मैंने हमेशा सुना है कि रैखिक खोज एक भोली दृष्टिकोण है और द्विआधारी खोज बेहतर विषमता की जटिलता के कारण प्रदर्शन से बेहतर है। लेकिन मुझे यह कभी समझ में नहीं आया कि बाइनरी खोज से पहले जब छंटाई की आवश्यकता होती है तो यह रैखिक खोज से बेहतर क्यों है?
रैखिक खोज है O(n)
और बाइनरी खोज है O(log n)
। यह कहने का आधार प्रतीत होता है कि बाइनरी खोज बेहतर है। लेकिन बाइनरी खोज के लिए छंटाई की आवश्यकता होती है जो O(n log n)
कि सर्वश्रेष्ठ एल्गोरिदम के लिए है। तो बाइनरी खोज वास्तव में तेज़ नहीं होनी चाहिए क्योंकि इसमें छंटाई की आवश्यकता होती है।
मैं सीएलआरएस पढ़ रहा हूं जिसमें लेखक का तात्पर्य है कि भोले रेखीय खोज दृष्टिकोण का उपयोग करने के बजाय सम्मिलन क्रम में उस स्थान को खोजने के लिए द्विआधारी खोज का उपयोग करना बेहतर है जहां आइटम डाला जाना है। इस मामले में यह उचित प्रतीत होता है क्योंकि प्रत्येक लूप पुनरावृत्ति में एक सॉर्ट की गई सूची है, जिस पर द्विआधारी खोज को लागू किया जा सकता है। लेकिन सामान्य मामले में जहां डेटा सेट के बारे में कोई गारंटी नहीं है, जिसमें हमें खोज करने की आवश्यकता नहीं है बाइनरी खोज वास्तव में रैखिक खोज की तुलना में बदतर है जो छंटनी की आवश्यकताओं के कारण है?
क्या कोई व्यावहारिक विचार है कि मैं अनदेखी कर रहा हूं जो द्विआधारी खोज को रैखिक खोज से बेहतर बनाते हैं? या द्विआधारी खोज को क्रमबद्धता के लिए आवश्यक गणना समय पर विचार किए बिना रैखिक खोज से बेहतर माना जाता है?