यह ट्यूटोरियल बाइनरी सर्च और amp की व्याख्या करेगा; जावा में पुनरावर्ती बाइनरी खोज इसके एल्गोरिदम, कार्यान्वयन और जावा बाइनरी सीच कोड उदाहरणों के साथ:
जावा में एक बाइनरी खोज एक तकनीक है जिसका उपयोग किसी संग्रह में लक्षित मूल्य या कुंजी की खोज के लिए किया जाता है। यह एक ऐसी तकनीक है जो एक कुंजी की खोज के लिए "फूट डालो और जीतो" तकनीक का उपयोग करती है।
जिस संग्रह पर बाइनरी खोज को कुंजी की खोज के लिए लागू किया जाना है, उसे आरोही क्रम में क्रमबद्ध करने की आवश्यकता है।1
आमतौर पर, अधिकांश प्रोग्रामिंग भाषाएं रैखिक खोज, बाइनरी खोज और हैशिंग तकनीकों का समर्थन करती हैं जिनका उपयोग संग्रह में डेटा खोजने के लिए किया जाता है। हम अपने अगले ट्यूटोरियल्स में हैशिंग सीखेंगे।
जावा में बाइनरी सर्च
लीनियर सर्च एक बुनियादी तकनीक है। इस तकनीक में, सरणी को क्रमिक रूप से पार किया जाता है और प्रत्येक तत्व की तुलना कुंजी से तब तक की जाती है जब तक कि कुंजी नहीं मिल जाती है या सरणी का अंत नहीं हो जाता है।
व्यावहारिक अनुप्रयोगों में रैखिक खोज का उपयोग शायद ही कभी किया जाता है। बाइनरी खोज सबसे अधिक उपयोग की जाने वाली तकनीक है क्योंकि यह रैखिक खोज की तुलना में बहुत तेज़ है।
जावा बाइनरी खोज करने के तीन तरीके प्रदान करता है:
- उपयोग पुनरावृत्ति दृष्टिकोण
- पुनरावर्ती दृष्टिकोण का उपयोग करना
- Arrays.binarySearch () विधि का उपयोग करना।
इस ट्यूटोरियल में, हम इन सभी को लागू और चर्चा करेंगे 3 तरीके।
जावा में बाइनरी खोज के लिए एल्गोरिथम
बाइनरी मेंखोज विधि, संग्रह को बार-बार आधे में विभाजित किया जाता है और मुख्य तत्व को संग्रह के बाएं या दाएं आधे हिस्से में खोजा जाता है, इस पर निर्भर करता है कि कुंजी संग्रह के मध्य तत्व से कम या अधिक है।
एक साधारण बाइनरी खोज एल्गोरिथम इस प्रकार है:
- संग्रह के मध्य तत्व की गणना करें।
- मुख्य वस्तुओं की तुलना मध्य तत्व से करें।
- यदि कुंजी = मध्य तत्व, तो हम कुंजी के लिए मध्य सूचकांक स्थिति वापस कर देते हैं।
- अन्यथा यदि कुंजी > मध्य तत्व, तो कुंजी संग्रह के दाहिने आधे भाग में है। इस प्रकार संग्रह के निचले (दाएं) आधे हिस्से पर चरण 1 से 3 को दोहराएं।
- अन्यथा कुंजी मध्य तत्व, तो कुंजी संग्रह के ऊपरी भाग में है। इसलिए आपको ऊपरी आधे हिस्से में बाइनरी खोज को दोहराने की आवश्यकता है।
जैसा कि आप उपरोक्त चरणों से देख सकते हैं, बाइनरी खोज में, पहली तुलना के ठीक बाद संग्रह के आधे तत्वों को अनदेखा कर दिया जाता है।
ध्यान दें कि पुनरावृत्त और पुनरावर्ती बाइनरी खोज के लिए चरणों का समान क्रम लागू होता है। निम्नलिखित 10 तत्वों की क्रमबद्ध सरणी लें।
चलिए सरणी के मध्य स्थान की गणना करते हैं।
मध्य = 0+9/2 = 4
#1) कुंजी = 21
सबसे पहले, हम कुंजी मान की तुलना करेंगे [मध्य] तत्व और हम पाते हैं कि तत्व मूल्य परमध्य = 21।
इस प्रकार हम पाते हैं कि कुंजी = [मध्य]। इसलिए कुंजी सरणी में स्थिति 4 पर पाई जाती है।
#2) कुंजी = 25
हम पहले कुंजी की तुलना करते हैं मध्य के लिए मूल्य। (21 25) के रूप में, हम सीधे सरणी के ऊपरी आधे हिस्से में कुंजी खोजेंगे।
अब फिर से हम ऊपरी आधे हिस्से के लिए मध्य का पता लगाएंगे सरणी।
मध्य = 4+9/2 = 6
स्थान पर मान [मध्य] = 25
अब हम मुख्य तत्व की तुलना मध्य तत्व से करें। इसलिए (25 == 25), इसलिए हमें स्थान [मध्य] = 6 पर कुंजी मिली है। कुंजी खोजें। बाइनरी सर्च समय और शुद्धता के मामले में अधिक कुशल है और बहुत तेज भी है।
बाइनरी सर्च इम्प्लीमेंटेशन जावा
उपरोक्त एल्गोरिथम का उपयोग करते हुए, हम जावा में एक बाइनरी सर्च प्रोग्राम को लागू करते हैं। पुनरावर्ती दृष्टिकोण। इस कार्यक्रम में, हम एक उदाहरण सरणी लेते हैं और इस सरणी पर बाइनरी खोज करते हैं।
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("The input array: " + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println("\nKey to be searched=" + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first = last ){ //if the mid key, then key to be searched is in the first half of array if ( numArray[mid] last ){ System.out.println("Element is not found!"); } } }
आउटपुट:
इनपुट सरणी: [5, 10, 15, 20 , 25, 30, 35]
कुंजी खोजी जानी है=20
तत्व अनुक्रमणिका में पाया जाता है: 3
उपरोक्त कार्यक्रम बाइनरी खोज का पुनरावृत्त दृष्टिकोण दिखाता है। प्रारंभ में, एक सरणी घोषित की जाती है, फिर खोजी जाने वाली कुंजी परिभाषित की जाती है।
सरणी के मध्य की गणना करने के बाद, कुंजी की तुलना मध्य तत्व से की जाती है। फिर चाहे पर निर्भर करता हैकुंजी कुंजी से कम या अधिक है, कुंजी को क्रमशः सरणी के निचले या ऊपरी आधे हिस्से में खोजा जाता है।
जावा में पुनरावर्ती बाइनरी खोज
आप एक बाइनरी खोज भी कर सकते हैं रिकर्सन तकनीक का उपयोग करना। यहां, कुंजी मिलने तक या पूरी सूची समाप्त होने तक बाइनरी खोज विधि को पुनरावर्ती रूप से कहा जाता है।
पुनरावर्ती बाइनरी खोज को लागू करने वाला प्रोग्राम नीचे दिया गया है:
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray[], int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //if intArray[mid] > key then key is in left half of array if (intArray[mid] > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args[]){ //define array and key int intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("Input List: " + Arrays.toString(intArray)); int key = 31; System.out.println("\nThe key to be searched:" + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println("\nKey not found in given list!"); else System.out.println("\nKey is found at location: "+result + " in the list"); } }
आउटपुट:
इनपुट सूची: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
खोजी जाने वाली कुंजी :
कुंजी स्थान पर पाई जाती है: सूची में 3
Arrays.binarySearch () विधि का उपयोग करना।
जावा में Arrays वर्ग एक 'बाइनरीसर्च ()' विधि प्रदान करता है जो दिए गए Array पर बाइनरी खोज करता है। यह विधि सरणी और कुंजी को तर्क के रूप में खोजती है और सरणी में कुंजी की स्थिति लौटाती है। यदि कुंजी नहीं मिलती है, तो विधि -1 लौटाती है।
नीचे दिया गया उदाहरण Arrays.binarySearch () विधि को लागू करता है।
इनपुट ऐरे: [10, 20, 30, 40, 50, 60, 70, 80, 90]
खोजी जाने वाली कुंजी:50
कुंजी अनुक्रमणिका में पाई जाती है: सरणी में 4।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न #1) आप बाइनरी खोज कैसे लिखते हैं ?
जवाब: बाइनरी सर्च आमतौर पर सरणी को आधे में विभाजित करके किया जाता है। यदि खोजी जाने वाली कुंजी मध्य तत्व से बड़ी है,फिर सरणी के ऊपरी आधे हिस्से को आगे विभाजित करके और कुंजी मिलने तक उप-सरणी की खोज की जाती है।
इसी तरह, यदि कुंजी मध्य तत्व से कम है, तो कुंजी को निचले हिस्से में खोजा जाता है। सरणी का आधा।
प्रश्न #2) बाइनरी सर्च का उपयोग कहाँ किया जाता है?
जवाब: बाइनरी सर्च का उपयोग मुख्य रूप से किसी एक को खोजने के लिए किया जाता है। सॉफ्टवेयर अनुप्रयोगों में डेटा को विशेष रूप से तब सॉर्ट किया जाता है जब मेमोरी स्पेस कॉम्पैक्ट और सीमित होता है।
प्रश्न#3) बाइनरी सर्च का बिग ओ क्या है?
जवाब : बाइनरी खोज की समय जटिलता O (logn) है जहां n सरणी में तत्वों की संख्या है। बाइनरी खोज की अंतरिक्ष जटिलता O (1) है।
Q #4) क्या बाइनरी खोज पुनरावर्ती है?
उत्तर: हाँ। चूँकि बाइनरी खोज फूट डालो और जीतो रणनीति का एक उदाहरण है और इसे पुनरावर्तन का उपयोग करके लागू किया जा सकता है। हम सरणी को आधे में विभाजित कर सकते हैं और बार-बार बाइनरी खोज करने के लिए एक ही विधि को कॉल कर सकते हैं।
Q #5) इसे बाइनरी खोज क्यों कहा जाता है?
0 जवाब: बाइनरी सर्च एल्गोरिथम फूट डालो और जीतो रणनीति का उपयोग करता है जो बार-बार सरणी को आधा या दो भागों में काट देता है। इस प्रकार इसे बाइनरी सर्च का नाम दिया गया है।निष्कर्ष
बाइनरी सर्च जावा में अक्सर उपयोग की जाने वाली खोज तकनीक है। बाइनरी खोज करने के लिए आवश्यक है कि डेटा को आरोही क्रम में क्रमबद्ध किया जाना चाहिए।
एक बाइनरी खोज हो सकती हैपुनरावृत्त या पुनरावर्ती दृष्टिकोण का उपयोग करके कार्यान्वित किया गया। जावा में Arrays क्लास 'बाइनरीसर्च' विधि भी प्रदान करती है जो एक ऐरे पर बाइनरी सर्च करती है।
हमारे बाद के ट्यूटोरियल्स में, हम जावा में विभिन्न सॉर्टिंग तकनीकों का पता लगाएंगे।