जावास्क्रिप्ट में बाइनरी सर्च को कैसे कोड करें
एल्गोरिदम खोजना एक प्रोग्रामर के रूप में जीवन को इतना आसान बनाता है। ऐसा करने से दसियों, सैकड़ों या हजारों वस्तुओं के डेटा सेट के अंदर किसी विशेष आइटम को खोजना आसान हो जाता है।
खोजों के सबसे लोकप्रिय रूपों में से एक द्विआधारी खोज है। यह खोज जल्दी से एक सरणी में एक आइटम ढूंढती है। हर बार जब खोज किसी वस्तु को देखती है, तो यह उन वस्तुओं की संख्या को कम कर देती है जिन्हें खोजा जाना शेष रह जाता है।
इस गाइड में, हम इस बारे में बात करने जा रहे हैं कि बाइनरी सर्च क्या हैं और वे कैसे काम करते हैं। फिर हम दो अलग-अलग दृष्टिकोणों का उपयोग करके एक द्विआधारी खोज को लागू करने के लिए आगे बढ़ेंगे:पुनरावृत्त और पुनरावर्ती।
आइए JavaScript में एक बाइनरी खोज एल्गोरिथम बनाएं!
द्विआधारी खोज क्या है?
एक द्विआधारी खोज एक कंप्यूटर विज्ञान एल्गोरिथ्म है जो एक क्रमबद्ध सरणी में एक आइटम की खोज करता है।
यह एक सरणी के बीच में शुरू होता है और जांचता है कि मध्य वस्तु उस संख्या से कम, बराबर या उससे अधिक है जिसके लिए आप खोज रहे हैं।
यदि संख्या छोटी है, तो एल्गोरिथम सरणी के बाएं आधे हिस्से में खोज जारी रखना जानता है, जहां छोटी संख्याएं हैं; यदि संख्या बड़ी है, तो एल्गोरिथम सरणी के दाहिने आधे भाग पर ध्यान केंद्रित करेगा। बाइनरी खोज केवल क्रमबद्ध सूचियों पर काम करती है।
रैखिक खोजों की तुलना में बाइनरी खोज अधिक कुशल हैं। ऐसा इसलिए है क्योंकि हर बार जब कोई खोज की जाती है तो सूची में खोजे जाने के लिए शेष बचे आइटमों की संख्या आधे से कम हो जाती है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
बाइनरी सर्च का उपयोग कैसे करें
एक बार जब आप इसे लटका लेते हैं तो एक द्विआधारी खोज को समझना आसान होता है।
इससे पहले कि हम एक द्विआधारी खोज एल्गोरिथ्म को लागू करें, आइए एक कदम-दर-चरण चलें। हम एक सूची में संख्या "9" खोजने जा रहे हैं। आइए एक क्रमबद्ध सूची से शुरू करें:
2 | 6 | 8 | 9 | 10 |
सबसे पहले, हमें मध्य संख्या खोजने और इसे एक चर के लिए असाइन करने की आवश्यकता है। यह पहली और आखिरी संख्याओं के योग की गणना करके और इसे दो से विभाजित करके पाया जाता है। हम इस चर को "मध्य" कहेंगे:
शुरू करें | <टीडी>मध्य | <टीडी>समाप्त | ||
2 | 6 | 8 | 9 | 10 |
8 हमारी मध्य संख्या है। फिर, हम मध्य संख्या की तुलना उस संख्या से कर सकते हैं जिसके लिए हम खोज कर रहे हैं। यदि बीच की संख्या हमारे द्वारा खोजी जा रही संख्या के बराबर हो, तो हमारी खोज रुक सकती है।
इस उदाहरण में, 8, 9 के बराबर नहीं है। हमारी खोज जारी है।
इसके बाद, हमें तुलना करने की आवश्यकता है कि मध्य संख्या 9 से बड़ी है या नहीं। ऐसा नहीं है।
इससे हमें पता चलता है कि हम जिस नंबर की तलाश कर रहे हैं वह बीच वाली संख्या के बाद का होना चाहिए। 9 क्रमबद्ध सूची में 8 से बड़ा है। हम अपनी शुरुआती संख्या को मध्य संख्या के बराबर सेट करने जा रहे हैं। ऐसा इसलिए है क्योंकि हम जानते हैं कि हम जिस संख्या की खोज कर रहे हैं वह मध्य संख्या से पहले नहीं आती है।
यदि हम जिस संख्या की खोज कर रहे हैं वह छोटी है, तो हम अंतिम संख्या को मध्य संख्या के बराबर सेट करेंगे। चूंकि संख्या मध्य संख्या से छोटी है, इसलिए हम अपनी खोज को सूची के निचले आधे हिस्से पर केंद्रित कर सकते हैं।
द्विआधारी खोज सूची के शीर्ष आधे भाग पर फिर से दोहराई जाती है क्योंकि 9 8 से बड़ा है:
| <टीडी> शुरू करें | मध्य | समाप्त | |
2 | 6 | 8 | 9 | 10 |
हम फिर से मध्य संख्या पाते हैं। यह 9 है। हम 9 की तुलना उस संख्या से कर सकते हैं जिसके लिए हम खोज कर रहे हैं। 9 उस संख्या के बराबर है जिसके लिए हम खोज कर रहे हैं।
यानी हमारी तलाश रुक सकती है. हमने अपनी सूची में नंबर 9 को सफलतापूर्वक ढूंढ लिया है!
जावास्क्रिप्ट में बाइनरी सर्च कैसे लागू करें
बाइनरी खोजों को पुनरावृत्त या पुनरावर्ती दृष्टिकोण का उपयोग करके कार्यान्वित किया जा सकता है।
इटरेटिव बाइनरी सर्च
एक पुनरावृत्त बाइनरी खोज सूची में किसी आइटम को खोजने के लिए थोड़ी देर के लूप का उपयोग करती है। यह लूप तब तक निष्पादित होगा जब तक कि सूची में आइटम नहीं मिल जाता, या जब तक सूची की खोज नहीं हो जाती।
आइए एक फ़ंक्शन लिखकर शुरू करें जो हमारी बाइनरी खोज करता है:
फ़ंक्शन बाइनरीसर्च (सरणी, संख्या टूफाइंड) {शुरू होने दें =0; चलो अंत =सरणी। लंबाई - 1; जबकि (शुरू करें <=अंत) { मध्य =मठ। तल ((प्रारंभ + अंत) / 2); अगर (सरणी [मध्य] ===संख्या खोजने के लिए) {मध्य वापसी; } और अगर (सरणी [मध्य] <नंबर टोफाइंड) {शुरू =मध्य + 1; } और {अंत =मध्य -1; } } वापसी -1;}
हम दो चर परिभाषित करके शुरू करते हैं:प्रारंभ और अंत। ये उच्चतम और निम्नतम मूल्यों का ट्रैक रखते हैं जिनके साथ हमारी खोज काम कर रही है। हम थोड़ी देर के लूप का उपयोग करते हैं जो तब तक चलता है जब तक कि प्रारंभ संख्या अंतिम संख्या से अधिक न हो। यह लूप सूची में प्रारंभ और अंत के बीच मध्य संख्या की गणना करता है।
यदि हम जिस संख्या की खोज कर रहे हैं वह मध्य संख्या के बराबर है, तो मध्य संख्या हमारे मुख्य कार्यक्रम में वापस आ जाती है। यदि संख्या छोटी है, तो प्रारंभ मान मध्य संख्या जमा एक के बराबर होना निर्धारित है। ये तुलना एक if स्टेटमेंट का उपयोग करके की जाती है।
अन्यथा, अंतिम संख्या मध्य संख्या माइनस वन के बराबर होगी। यदि लूप चलने के बाद हमारा नंबर नहीं मिलता है, तो -1 वापस आ जाता है। हम इसे आधार शर्त कहते हैं। हमारे मुख्य कार्यक्रम में, हम जाँचेंगे कि क्या लौटाई गई संख्या -1 के बराबर है। अगर है तो इसका मतलब है कि हमारा नंबर नहीं मिल सका।
हमारा कार्य अभी काम नहीं करता है। हमें एक मुख्य प्रोग्राम लिखने की ज़रूरत है जो इसे कॉल करे:
लेट नंबर =[2, 6, 8, 9, 10]; लेट टू फाइंड =9; लेट फाइंडनंबर =बाइनरीसर्च (नंबर, टूफाइंड); अगर (फाइंडनंबर! ==-1) { कंसोल.लॉग (`$ { toFind} को ${findNumber}.`);} और {कंसोल.लॉग(`${toFind} नहीं मिला।`);}पर मिला है।
हमने संख्याओं की एक सूची परिभाषित की है जिसके माध्यम से खोजना है और वह संख्या जो हम अपनी सूची में खोजना चाहते हैं। इसके बाद, हमने बाइनरीसर्च फ़ंक्शन को कॉल किया है। यह हमारी खोज को अंजाम देगा। खोज या तो -1 या उस वस्तु की स्थिति लौटाएगी जिसके लिए हम खोज कर रहे हैं।
-1 इंगित करता है कि कोई आइटम नहीं मिला। यदि कोई आइटम नहीं मिलता है, तो हमारे else
. की सामग्री कथन निष्पादित किया जाता है। अन्यथा, if
. की सामग्री बयान चलाए जा रहे हैं।
चलिए अपना कोड चलाते हैं:
9 स्थान 3 पर पाया गया है।
यह हमें बताता है कि हमारी खोज सफल रही है!
पुनरावर्ती बाइनरी खोज
पुनरावर्ती बाइनरी खोज को पुनरावृत्त खोज की तुलना में अधिक सुरुचिपूर्ण माना जाता है। ऐसा इसलिए है क्योंकि बाइनरी सर्च एक ही ऑपरेशन को एक सूची में बार-बार करते हैं। यह व्यवहार एक रिकर्सन एल्गोरिदम का उपयोग करके कार्यान्वित किया जा सकता है।
एक नई जावास्क्रिप्ट फ़ाइल खोलें और इस कोड में पेस्ट करें:
फ़ंक्शन बाइनरीसर्च (सरणी, संख्या खोजने, प्रारंभ, अंत) {अगर (प्रारंभ => अंत) {वापसी -1; } बीच में चलो =Math.floor ((शुरू + अंत) / 2); अगर (सरणी [मध्य] ===संख्या खोजने के लिए) {मध्य वापसी; } और अगर (सरणी [मध्य] <नंबर टोफाइंड) {वापसी बाइनरी खोज (सरणी, संख्या टोफाइंड, मध्य + 1, अंत); } और { वापसी बाइनरीसर्च (सरणी, संख्या टोफाइंड, प्रारंभ, मध्य - 1); }}पूर्व>यह कोड हमारी पहली खोज के समान ही तुलना करता है। यह जांचता है कि मध्य संख्या उस संख्या के बराबर, उससे बड़ी या कम है जिसके लिए हम खोज कर रहे हैं।
हमारे फ़ंक्शन की शुरुआत में, हमने यह जांचने के लिए एक कथन का उपयोग किया है कि प्रारंभ संख्या अंतिम संख्या से अधिक है या नहीं। यदि ऐसा है, तो इसका मतलब है कि हमारा आइटम हमारे द्वारा निर्दिष्ट सूची में नहीं पाया जा सका। यदि ऐसा है तो हम मुख्य कार्यक्रम में -1 लौटाते हैं।
यदि हम जिस संख्या की तलाश कर रहे हैं वह मध्य संख्या के समान है, तो मध्य संख्या मुख्य कार्यक्रम में वापस आ जाती है। यदि हम जिस संख्या की तलाश कर रहे हैं, वह मध्य संख्या से अधिक या कम है, तो हमारा बाइनरीसर्च फ़ंक्शन फिर से चलाया जाता है। यह तब तक जारी रहता है जब तक हमारा आइटम नहीं मिल जाता।
इस फ़ंक्शन को चलाने के लिए, हमें अपने मुख्य कार्यक्रम में बदलाव करने होंगे:
लेट नंबर =[2, 6, 8, 9, 10]; लेट टू फाइंड =9; लेट फाइंडनंबर =बाइनरीसर्च (नंबर, टू फाइंड, 0, नंबर। लेंथ - 1);…हमें दो अतिरिक्त मापदंडों में पारित करने की आवश्यकता है:"प्रारंभ" और "अंत" के मान। "प्रारंभ" का मान 0 के बराबर है। "अंत" का मान सूची की लंबाई घटाकर एक के बराबर है।
आइए अपना कोड चलाएं और देखें कि क्या होता है:
9 स्थान 3 पर पाया गया है।हमारी बाइनरी खोज सफल रही! यह उसी अंतर्निहित एल्गोरिदम का उपयोग पुनरावृत्त दृष्टिकोण के रूप में करता है। अंतर यह है कि बाइनरी सर्च एक फ़ंक्शन का उपयोग करके किया जाता है जो आइटम मिलने तक या सूची पूरी तरह से खोजे जाने तक, जो भी पहले आता है, खुद को कॉल करता है।
निष्कर्ष
बाइनरी खोज सूची में किसी आइटम को ढूंढना आसान बनाती है। हर बार जब कोई खोज निष्पादित की जाती है, तो सूची में खोज के लिए छोड़ी गई वस्तुओं की संख्या आधे से कम हो जाती है। यह रैखिक खोज की तुलना में बाइनरी खोज को अधिक कुशल बनाता है।
अब आप एक विशेषज्ञ की तरह जावास्क्रिप्ट में द्विआधारी खोज को लागू करने के लिए तैयार हैं!