DCTLib सही है, लेकिन एक सेकंड के लिए गणित को भूल जाओ।
आपके तर्क से, n -ary सबसे तेज़ होनी चाहिए। लेकिन अगर आप इसके बारे में सोचते हैं, तो n -ary एक नियमित पुनरावृत्ति खोज के बराबर है (सिर्फ सूची 1 से 1 के माध्यम से पुनरावृत्ति, लेकिन रिवर्स ऑर्डर में)। पहले आप सूची में अंतिम (या अंतिम से अगले) आइटम का चयन करें और उस मूल्य की तुलना अपने मूल्य से करें। फिर आप अपनी सूची से उस आइटम को हटाते हैं, और फिर नई सूची में अंतिम आइटम चुनते हैं, जो कि सरणी में अंतिम मूल्य के बगल में है। हर बार, आप केवल एक समय में 1 मूल्य को समाप्त कर रहे होंगे जब तक कि आपको अपना मूल्य नहीं मिला।
इसके बजाय, आपको इसके बारे में इस तरह सोचना चाहिए - मैं प्रत्येक पुनरावृत्ति सूची से सबसे अधिक मूल्यों को कैसे समाप्त करूं? एक द्विआधारी खोज में, आप हमेशा आधी सूची को समाप्त करते हैं। एक टर्नरी खोज में, एक संभावना (33.33% संभावना है, वास्तव में) है कि आप सूची के 2/3 को समाप्त कर सकते हैं, लेकिन एक और भी अधिक मौका (66.66%) है कि आप केवल 1/3 सूची को समाप्त करेंगे। ओ (एन) की गणना करने के लिए, आपको सबसे खराब स्थिति को देखने की जरूरत है, जो 1/3, 1/2 से कम है। जैसे-जैसे आप नज़दीकी और n के करीब आते हैं, यह और भी बदतर होता जाता है।
न केवल सबसे खराब स्थिति को द्विआधारी खोज के साथ सुधार दिया जाएगा, बल्कि आपके औसत समय में भी सुधार किया जाएगा। अपेक्षित मूल्य को देखते हुए (सूची का कौन सा भाग हम औसतन निकाल सकते हैं), हम इस सूत्र का उपयोग करते हैं:
(P_lower) x (वह भाग जिसे हम कम कर सकते हैं) + (P_higher) x (यदि हम उच्चतर निकाल सकते हैं) = E
बाइनरी खोज के लिए, यह .5x.5 + .5x.5 = .5 है (हम हमेशा आधी सूची निकालते हैं)। टर्नरी खोजों के लिए, यह मान .666x.333 + .333x.666 = 0.44 है, या प्रत्येक चरण में, हम संभवतः केवल 44% सूची को हटा देंगे, जो औसतन बाइनरी खोज की तुलना में कम कुशल है। यह मान 1/2 (आधी सूची) पर बोलता है, और आपके द्वारा n (रिवर्स पुनरावृत्ति) और 0 (नियमित पुनरावृत्ति) के करीब आने की संख्या कम हो जाती है।
ठीक है, इसलिए मैंने झूठ बोला..तो थोड़ा गणित में शामिल है, लेकिन मुझे आशा है कि मदद करता है!