📘 CodingMarble Learn

खोज (Searching) और छँटाई (Sorting) एल्गोरिदम

खोज एल्गोरिदम सूची में कोई चीज़ ढूँढता है; छँटाई एल्गोरिदम सूची को क्रम में लगाता है। रेखीय खोज एक-एक करके देखती है और किसी भी सूची पर चलती है। द्विआधारी खोज छँटी सूची को हर बार आधा करती है और बहुत तेज़ है। बबल सॉर्ट पड़ोसियों की अदला-बदली करता है; मर्ज सॉर्ट सूची तोड़कर छँटे टुकड़े जोड़ता है, जो बड़ी सूचियों में तेज़ है।

🎬 कदम-दर-कदम कहानी

  1. ये 12 डिब्बे हैं, हर एक में संख्या। हमें 23 वाला डिब्बा ढूँढना है। कितनी बार देखना पड़ेगा?
  2. रेखीय खोज: पहला डिब्बा, फिर दूसरा… जब तक 23 न मिले। यहाँ 7 बार देखना पड़ा।
  3. द्विआधारी खोज के लिए सूची छँटी होनी चाहिए। बीच वाला देखो, फिर वह आधा फेंक दो जिसमें 23 हो ही नहीं सकता।
  4. बबल सॉर्ट: पड़ोसी दो की तुलना करो, गलत क्रम हो तो अदला-बदली। तब तक दोहराओ जब तक कोई अदला-बदली न हो।
  5. मर्ज सॉर्ट: सूची को आधा-आधा तोड़ो, छोटे टुकड़े छाँटो, फिर क्रम से जोड़ो।
  6. खुद करो: संख्या और तरीका चुनो। गिनो कि किसमें कितनी तुलनाएँ लगीं।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

हर बार सारे आइटम ही क्यों न देखें?

चल जाएगा (यही रेखीय खोज है), पर 10 लाख आइटम में 10 लाख जाँच लग सकती हैं। चतुर तरीकों में बहुत कम लगती हैं।

रेखीय खोज कब सही है?

जब सूची छोटी हो या छँटी न हो। इसमें कोई तैयारी नहीं चाहिए, जैसे 3D में डिब्बा-दर-डिब्बा दिखता है।

द्विआधारी खोज के लिए सूची छँटी क्यों चाहिए?

हम आधा इसलिए फेंकते हैं क्योंकि पता है वहाँ सब बहुत छोटे या बहुत बड़े हैं। यह तभी सच है जब सूची क्रम में हो।

बबल सॉर्ट खत्म हुआ, कैसे पता चले?

जब पूरे चक्कर में एक भी अदला-बदली न हो, तो हर पड़ोसी जोड़ा सही क्रम में है।

मर्ज सॉर्ट में तोड़ना ज़्यादा है, फिर भी तेज़ क्यों?

तोड़ना सस्ता है। दो छँटी सूचियाँ जोड़ने में हर आइटम पर एक तुलना लगती है, और जोड़ने के सिर्फ़ लगभग log₂n स्तर होते हैं।

अगर संख्या सूची में हो ही नहीं?

रेखीय खोज अंत तक पहुँचती है; द्विआधारी खोज में कुछ नहीं बचता। खुद करो में 50 ढूँढकर देखो।

खोज और छँटाई एल्गोरिदम क्या हैं?

एल्गोरिदम किसी समस्या को हल करने के साफ़ चरणों की सूची है। कंप्यूटर में दो काम बार-बार आते हैं:

एल्गोरिदम की तुलना तुलनाओं की गिनती से करते हैं (कितनी बार दो मान जाँचे)। कम तुलना = तेज़ एल्गोरिदम।

रेखीय खोज (Linear search)

पहले आइटम से शुरू करो, लक्ष्य से मिलाओ। मिल गया तो रुको, नहीं तो अगले पर जाओ। अंत तक न मिले तो आइटम सूची में नहीं है।

for i from 0 to length − 1
    if list[i] = target then return i
return "not found"

द्विआधारी खोज (Binary search)

यह सिर्फ़ छँटी सूची पर चलती है।

  1. बीच वाला आइटम देखो।
  2. वही लक्ष्य है तो रुको।
  3. लक्ष्य छोटा है तो बायाँ आधा रखो, बड़ा है तो दायाँ आधा।
  4. बचे हुए आधे पर दोहराओ, जब तक मिल न जाए या कुछ न बचे।
low ← 0, high ← length − 1
while low ≤ high
    mid ← (low + high) DIV 2
    if list[mid] = target then return mid
    else if list[mid] < target then low ← mid + 1
    else high ← mid − 1
return "not found"

हर जाँच सूची आधी कर देती है। 1,000 आइटम में लगभग 10 जाँच, 10 लाख में लगभग 20। रेखीय खोज में 10 लाख तक लग सकती हैं।

बबल सॉर्ट और मर्ज सॉर्ट

बबल सॉर्ट

सूची में हर पड़ोसी जोड़े की तुलना करो; गलत क्रम हो तो अदला-बदली। एक चक्कर (pass) के बाद सबसे बड़ा आइटम अंत में पहुँच जाता है। तब तक चक्कर लगाओ जब तक किसी चक्कर में एक भी अदला-बदली न हो। आसान है, कम मेमोरी लेता है, पर बड़ी सूची में धीमा (लगभग n² तुलनाएँ)।

मर्ज सॉर्ट

बाँटो और जीतो (divide and conquer) तरीका। सूची को बार-बार आधा करो जब तक हर टुकड़े में एक आइटम न बचे (एक आइटम अपने-आप छँटा है)। फिर टुकड़ों को जोड़ो (merge): दोनों के आगे वाले आइटम मिलाओ, छोटा पहले लो। बड़ी सूची में बहुत तेज़ (लगभग n·log₂n), पर ज़्यादा मेमोरी लेता है।

इंसर्शन सॉर्ट

आइटम एक-एक उठाओ और छँटे हिस्से में सही जगह खिसकाओ, जैसे हाथ में ताश के पत्ते लगाते हैं। छोटी या लगभग छँटी सूची के लिए अच्छा।

कौन-सा एल्गोरिदम कब?

एल्गोरिदमछँटी सूची चाहिए?बड़ी सूची में गतिकिसके लिए अच्छा
रेखीय खोजनहींधीमी (n)छोटी या बिना छँटी सूची
द्विआधारी खोजहाँबहुत तेज़ (log₂n)बड़ी छँटी सूची
बबल सॉर्ट—धीमा (n²)बहुत छोटी सूची, सीखने के लिए
मर्ज सॉर्ट—तेज़ (n log n)बड़ी सूची

सुझाव: अगर एक ही सूची में बार-बार खोजना है, तो एक बार छाँट लो और फिर द्विआधारी खोज करो।

करके देखो: पत्तों की खोज-दौड़

1 से 16 तक कार्ड बनाओ। उन्हें मिलाकर उल्टा लाइन में रखो और दोस्त से 11 ढूँढने को कहो, एक बार में एक पत्ता पलटकर (रेखीय खोज)। गिनो कितनी बार पलटा। अब क्रम में रखकर हर बार बीच वाला पलटो (द्विआधारी खोज)। किसमें कम बार लगा? फिर मिले हुए पत्तों को बबल सॉर्ट से छाँटो और अदला-बदली गिनो।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. [42, 7, 19, 88, 3, 56] में 56 की रेखीय खोज। कितनी तुलनाएँ?

42, 7, 19, 88, 3, 56 → छठी जाँच में मिला: 6 तुलनाएँ।

2. [3, 7, 11, 19, 23, 35, 42, 56, 64, 71, 88, 90] में 64 की द्विआधारी खोज।

low 0, high 11 → mid 5 = 35 < 64 → low 6। mid 8 = 64 → मिल गया। 2 तुलनाएँ।

3. [5, 1, 4, 2] पर बबल सॉर्ट का एक चक्कर।

5>1 बदलो → [1,5,4,2]; 5>4 बदलो → [1,4,5,2]; 5>2 बदलो → [1,4,2,5]। 5 अंत में पहुँचा।

4. [2, 9] और [4, 5] को मर्ज करो।

2 vs 4 → 2; 9 vs 4 → 4; 9 vs 5 → 5; फिर 9। नतीजा [2, 4, 5, 9]।

5. 64 आइटम पर द्विआधारी खोज में ज़्यादा से ज़्यादा कितनी जाँच?

64 → 32 → 16 → 8 → 4 → 2 → 1: 6 बार आधा, तो अधिकतम 7 जाँच।

6. [9, 2, 7, 4] पर द्विआधारी खोज क्यों नहीं?

सूची छँटी नहीं है, तो आधा फेंकने पर लक्ष्य भी फेंका जा सकता है। पहले छाँटो या रेखीय खोज करो।

आम गलतियाँ

अभ्यास क्विज़

1. किस खोज के लिए छँटी सूची चाहिए?
2. बबल सॉर्ट (आरोही) के पहले चक्कर के बाद कौन-सा आइटम पक्का सही जगह पर है?
3. मर्ज सॉर्ट किसका उदाहरण है?
4. 100 आइटम पर रेखीय खोज में सबसे ज़्यादा जाँच:
5. 1,000 छँटे आइटम पर द्विआधारी खोज में लगभग अधिकतम:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

रेखीय खोज और द्विआधारी खोज में क्या अंतर है?

रेखीय खोज एक-एक करके देखती है और किसी भी सूची पर चलती है। द्विआधारी खोज बीच से देखकर छँटी सूची को हर बार आधा करती है, इसलिए बड़ी सूची में बहुत तेज़ है।

सबसे तेज़ sorting algorithm कौन-सा है?

स्कूल में पढ़ाए जाने वालों में मर्ज सॉर्ट बड़ी सूचियों में सबसे तेज़ है (लगभग n log n)। बबल और इंसर्शन सॉर्ट धीमे (लगभग n²) पर आसान हैं।

क्या द्विआधारी खोज हमेशा बेहतर है?

नहीं। इसे छँटी सूची चाहिए। छोटी या बिना छँटी सूची में, जिसे एक ही बार खोजना है, रेखीय खोज अक्सर बेहतर है।

यह कहाँ पढ़ाया जाता है

कनाडा (ओंटारियो)Grade 12A. Programming Concepts and Skills
कनाडा (ओंटारियो)Grade 12A. Programming Concepts and Skills
पोलैंडSzkoła podstawowa, klasa VIIUnderstanding, analysing and solving problems
पोलैंडSzkoła podstawowa, klasa VIIIUnderstanding, analysing and solving problems
रोमानियाClasa a X-aFundamental algorithms on arrays
इंग्लैंडYear 9Computer science
इंग्लैंडYear 103.1 Fundamentals of algorithms
इंग्लैंडYear 134.3 Fundamentals of algorithms
अमेरिकाGrade 11Data Collections
दक्षिण कोरिया고등학교 2학년Algorithms and programming
चीन高二Sel.1 Data and data structures

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ