ट्रैक
/
Python
Python
/
अभ्यास
/
बाइनरी सर्च
बाइनरी सर्च

बाइनरी सर्च

आसान

परिचय

आप गणितज्ञों के एक ऐसे समूह से मिले हैं जो गायक-गीतकार भी हैं। उन्होंने अपनी हर पसंदीदा संख्या के लिए एक गाना लिखा है, और जैसा कि आप अंदाज़ा लगा सकते हैं, उनकी पसंदीदा संख्याएँ बहुत सारी हैं (जैसे 0, 73 या 6174)।

आप अपनी पसंदीदा संख्या का गाना सुनने के लिए उत्सुक हैं, लेकिन गाने इतने सारे हैं कि सही गाना ढूँढने में थोड़ा समय लग सकता है। अच्छी बात यह है कि उन्होंने अपने गानों को एक प्लेलिस्ट में शीर्षक के हिसाब से लगाया है। शीर्षक और कुछ नहीं, वही संख्या है जिसके बारे में वह गाना है।

आप समझ जाते हैं कि शीर्षक देखकर गाना जल्दी ढूँढने के लिए आप बाइनरी सर्च एल्गोरिदम का उपयोग कर सकते हैं।

निर्देश

आपको एक बाइनरी सर्च एल्गोरिदम लागू करना है।

बाइनरी सर्च एल्गोरिदम किसी ऐरे में कोई चीज़ ढूँढता है। इसके लिए वह ऐरे को बार-बार आधे में बाँटता है और सिर्फ उसी आधे को रखता है जिसमें वह चीज़ होती है जिसे हम ढूँढ रहे हैं। इससे हम अपनी चीज़ की संभावित जगहों को जल्दी-जल्दी कम करते जाते हैं, जब तक कि वह चीज़ मिल न जाए या सारी संभावित जगहें खत्म न हो जाएँ।

Caution

बाइनरी सर्च सिर्फ तब काम करती है जब ऐरे क्रमबद्ध हो।

यह एल्गोरिदम ऐसा दिखता है:

  • किसी क्रमबद्ध ऐरे का बीच का एलिमेंट ढूँढिए और उसकी तुलना उस चीज़ से कीजिए जिसे हम ढूँढ रहे हैं।
  • अगर बीच का एलिमेंट हमारी चीज़ है, तो काम पूरा!
  • अगर बीच का एलिमेंट हमारी चीज़ से बड़ा है, तो हम उस एलिमेंट को और उसके बाद के सारे एलिमेंट को हटा सकते हैं।
  • अगर बीच का एलिमेंट हमारी चीज़ से छोटा है, तो हम उस एलिमेंट को और उसके पहले के सारे एलिमेंट को हटा सकते हैं।
  • अगर ऐरे का हर एलिमेंट हट चुका है, तो वह चीज़ ऐरे में नहीं है।
  • वरना ऐरे का जो हिस्सा अभी हटा नहीं गया है, उस पर यही प्रक्रिया दोहराइए।

यहाँ एक उदाहरण देखिए:

मान लीजिए हमें इस क्रमबद्ध ऐरे में संख्या 23 ढूँढनी है: [4, 8, 12, 16, 23, 28, 32].

  • सबसे पहले हम 23 की तुलना बीच के एलिमेंट, यानी 16 से करते हैं।
  • 23, 16 से बड़ा है, इसलिए हम ऐरे का बायाँ आधा हिस्सा हटा सकते हैं। अब हमारे पास [23, 28, 32] बचता है।
  • इसके बाद हम 23 की तुलना नए बीच के एलिमेंट, यानी 28 से करते हैं।
  • 23, 28 से छोटा है, इसलिए हम ऐरे का दायाँ आधा हिस्सा हटा सकते हैं: [23].
  • हमें अपनी चीज़ मिल गई।

एक्सेप्शन संदेश

कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जो बताए कि एरर कहाँ से आई है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में काफी मदद मिलती है। जहाँ आपको पता हो कि एरर का स्रोत एक तय तरह का ही होगा, वहाँ आप पहले से बने एरर टाइप में से कोई एक उठाना चुन सकते हैं, लेकिन तब भी अर्थपूर्ण संदेश शामिल करना चाहिए।

इस अभ्यास में, जब दी गई वैल्यू ऐरे में न मिले, तो आपको raise स्टेटमेंट से ValueError "फेंकना" है। टेस्ट तभी सफल होंगे जब आप exception को raise करें और उसके साथ एक संदेश भी शामिल करें।

संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

# example when value is not found in the array.
raise ValueError("value not in array")

स्रोत

Wikipediaयह लिंक एक नई विंडो या टैब में खुलता है
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

बाइनरी सर्च शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।