Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

कई द्विआधारी खोज कार्यान्वयन में एक समस्या?

हम जानते हैं कि बाइनरी सर्च एल्गोरिथम लीनियर सर्च एल्गोरिथम से बेहतर है। इस एल्गोरिथम को निष्पादित होने में O(log n) समय लगता है। हालांकि अधिकांश मामलों में लागू कोड में कुछ समस्या है। आइए नीचे की तरह एक बाइनरी सर्च एल्गोरिथम फ़ंक्शन पर विचार करें -

उदाहरण

int binarySearch(int array[], int start, int end, int key){
   if(start <= end){
      int mid = (start + end) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}

यह एल्गोरिथम तब तक ठीक काम करेगा जब तक कि प्रारंभ और अंत बड़ी संख्या में न पहुंच जाए। यदि (प्रारंभ + अंत) 2 32 . के मान से अधिक है - 1 तो यह रैप अप के बाद एक ऋणात्मक संख्या लौटा सकता है। और चूंकि ऋणात्मक संख्याएं सरणी अनुक्रमणिका के रूप में समर्थित नहीं हैं, तो इससे कुछ समस्या हो सकती है।

इस समस्या को दूर करने के लिए कुछ अलग तरीके हैं।

विधि 1

int mid = start + ((end - start) / 2)

दूसरी विधि केवल जावा में काम करेगी क्योंकि C या C++ में कोई>>> ऑपरेटर नहीं है।

विधि 2 (केवल जावा)

int mid = (start + end) >>> 1

चूंकि>>> सी या सी ++ में समर्थित नहीं है, तो हम निम्न विधि का उपयोग कर सकते हैं।

विधि 3

int mid = ((unsigned int) low + (unsigned int) high) >> 1

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत

  1. डेटा संरचनाओं में इष्टतम बाइनरी सर्च ट्री

    पूर्णांकों का एक सेट क्रमबद्ध क्रम में दिया जाता है और आवृत्ति गणना के लिए एक और सरणी फ़्रीक दिया जाता है। हमारा काम सभी खोजों के लिए न्यूनतम लागत खोजने के लिए उन डेटा के साथ एक बाइनरी सर्च ट्री बनाना है। उप समस्याओं के समाधान को हल करने और संग्रहीत करने के लिए एक सहायक सरणी लागत [एन, एन] बनाई गई ह

  1. सी # में बाइनरी सर्च

    द्विआधारी खोज क्रमबद्ध सरणी पर कार्य करता है। मान की तुलना सरणी के मध्य तत्व से की जाती है। यदि समानता नहीं मिलती है, तो आधा भाग समाप्त हो जाता है जिसमें मूल्य नहीं होता है। इसी तरह दूसरे आधे हिस्से की तलाशी ली जाती है। यहाँ हमारे सरणी में मध्य तत्व है। मान लीजिए कि हमें 62 खोजने की जरूरत है, फिर ब