📘 CodingMarble Learn

एल्गोरिदम कॉम्प्लेक्सिटी: एल्गोरिदम कितनी तेज़ी से बढ़ता है?

एक ही सवाल को कई एल्गोरिदम हल कर सकते हैं, पर कुछ बहुत ज़्यादा कदम लेते हैं। हम घड़ी के सेकंड नहीं, बल्कि इनपुट के आकार n के साथ बढ़ते कदम गिनते हैं। बिग O इस बढ़त का नाम है: O(1) स्थिर, O(log n), O(n) रैखिक, O(n log n) और O(n²)। लीनियर सर्च O(n), बाइनरी सर्च O(log n); बबल सॉर्ट O(n²), मर्ज सॉर्ट O(n log n)। मेमोरी की बढ़त = स्पेस कॉम्प्लेक्सिटी।

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

  1. 16 डिब्बों में संख्या 13 ढूँढो, एक-एक डिब्बा खोलकर। हर डिब्बा खोलना = 1 कदम। यह लीनियर सर्च है: ज़्यादा से ज़्यादा n कदम।
  2. अगर डिब्बे क्रम में हैं, तो बीच वाला खोलो और गलत आधा हटा दो। फिर दोहराओ। बाइनरी सर्च ने 13 सिर्फ 4 कदम में ढूँढ लिया।
  3. अब n = 16 पर पाँच तरह के एल्गोरिदम की तुलना करो। बार की ऊँचाई = कदमों की गिनती। कुछ छोटे रहते हैं, एक बहुत बड़ा है।
  4. इनपुट 8 से 16 करो, यानी दोगुना। O(n) दोगुना, O(n²) चार गुना, और O(log n) सिर्फ 1 बढ़ता है।
  5. 1000 चीज़ें छाँटना: बबल सॉर्ट को लगभग 10 लाख तुलना चाहिए, मर्ज सॉर्ट को सिर्फ लगभग 10 हज़ार। बड़े इनपुट पर बढ़त की दर सबसे ज़रूरी है।
  6. तुम्हारी बारी: n स्लाइडर को 2 से 1024 तक खिसकाओ। देखो कौन सा बार सबसे तेज़ी से ऊपर जाता है।

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

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

प्रोग्राम को स्टॉपवॉच से क्यों न नापें?

समय हर कंप्यूटर पर बदलता है, कदमों की गिनती नहीं। कदम 1 में खोले गए डिब्बे गिने जाते हैं, सेकंड नहीं।

बाइनरी सर्च आधे डिब्बे क्यों छोड़ सकता है?

डिब्बे क्रम में हैं। बीच वाला लक्ष्य से छोटा है तो उसके बाएँ वाले सब और भी छोटे हैं, वे उत्तर नहीं हो सकते। कदम 2 में धूसर डिब्बे देखो।

बिग O में स्थिरांक क्यों हटाते हैं?

बिग O बताता है कि काम कितनी तेज़ी से बढ़ता है। n दोगुना होने पर 2n और n दोनों दोगुने होते हैं, यानी एक जैसे बढ़ते हैं। कदम 4 में दोगुना करना देखो।

क्या O(n²) हमेशा O(n log n) से धीमा है?

बहुत छोटे n पर कभी-कभी तेज़ भी हो सकता है, पर n बढ़ते ही n² बहुत आगे निकल जाता है। कदम 5 में n = 1000 पर फ़र्क लगभग 100 गुना है।

यहाँ log n का असली मतलब क्या है?

log₂ n यानी n को कितनी बार आधा करें कि 1 बचे। 1024 के लिए 10। आखिरी कदम में स्लाइडर खिसकाओ: n दोगुना होने पर नीला बार सिर्फ 1 बढ़ता है।

एक सवाल, कई एल्गोरिदम

एल्गोरिदम किसी सवाल को हल करने के पक्के कदमों की सूची है। ज़्यादातर सवाल एक से ज़्यादा एल्गोरिदम से हल हो सकते हैं। जैसे सूची में नाम ढूँढना: हर नाम देखो, या (अगर सूची छँटी है) बार-बार आधा करो।

दोनों सही उत्तर देते हैं। फ़र्क दक्षता (efficiency) में है: कितना काम और कितनी मेमोरी लगती है। अच्छा प्रोग्रामर वह एल्गोरिदम चुनता है जो बड़े डेटा पर भी तेज़ रहे।

समय के आधार पर तुलना

स्टॉपवॉच से नापना ठीक नहीं: तेज़ कंप्यूटर धीमे एल्गोरिदम को भी अच्छा दिखा देता है। इसलिए हम इनपुट के आकार n के हिसाब से मूल कदम (तुलना, अदला-बदली, जोड़) गिनते हैं।

सबसे अच्छा, औसत और सबसे खराब केस

बेस्ट केस सबसे किस्मत वाला इनपुट है (13 पहले डिब्बे में: 1 कदम)। वर्स्ट केस सबसे बुरा (13 है ही नहीं: n कदम)। हम आमतौर पर वर्स्ट केस बताते हैं, क्योंकि यह एक वादा है: इससे धीमा कभी नहीं होगा।

टाइम और स्पेस कॉम्प्लेक्सिटी

टाइम कॉम्प्लेक्सिटी बताती है कि n बढ़ने पर कदम कैसे बढ़ते हैं। स्पेस कॉम्प्लेक्सिटी बताती है कि अतिरिक्त मेमोरी कैसे बढ़ती है। मर्ज सॉर्ट तेज़ है पर ज़्यादा मेमोरी लेता है; बबल सॉर्ट कम मेमोरी लेता है पर धीमा है।

बिग O नोटेशन

बिग O बढ़त की दर बताता है, छोटी बातों को छोड़कर। सिर्फ सबसे बड़ा पद रखो और स्थिर संख्याएँ हटाओ: 3n² + 5n + 2 बन जाता है O(n²), क्योंकि बड़े n पर लगभग सारा काम n² वाला हिस्सा करता है।

बिग Oनामn = 16n = 1000उदाहरण
O(1)स्थिर11ऐरे का 5वाँ आइटम पढ़ना
O(log n)लघुगणकीय4लगभग 10बाइनरी सर्च
O(n)रैखिक161000लीनियर सर्च, सबसे बड़ा ढूँढना
O(n log n)n log n64लगभग 10,000मर्ज सॉर्ट
O(n²)द्विघाती25610,00,000बबल सॉर्ट, लूप के अंदर लूप

कोड के लिए आसान नियम: n पर एक लूप = O(n); लूप के अंदर लूप = O(n²); हर बार सवाल आधा = O(log n)।

लीनियर और बाइनरी सर्च की दक्षता

लीनियर सर्च एक-एक करके देखता है। वर्स्ट केस: n तुलना, यानी O(n)। यह किसी भी सूची पर चलता है।

बाइनरी सर्च को छँटी हुई सूची चाहिए। बीच वाला देखो; बड़ा है तो दायाँ आधा हटाओ, वरना बायाँ। हर कदम सूची आधी होती है, इसलिए वर्स्ट केस लगभग log₂ n + 1 तुलना: O(log n)। 10 लाख आइटम पर सिर्फ लगभग 20 कदम।

सॉर्टिंग एल्गोरिदम की दक्षता

बबल, इंसर्शन और सिलेक्शन सॉर्ट में लूप के अंदर लूप होता है, इसलिए लगभग n²/2 तुलना: O(n²)। छँटी हुई सूची पर इंसर्शन सॉर्ट O(n) (बेस्ट केस) है।

मर्ज सॉर्ट सूची को लगभग log₂ n बार आधा करता है और हर स्तर पर लगभग n काम करता है: O(n log n)। इसे O(n) अतिरिक्त मेमोरी चाहिए।

अगर सिर्फ एक बार ढूँढना है, तो पहले छाँटना (n log n) एक लीनियर सर्च (n) से महँगा है। बार-बार ढूँढना हो तो एक बार छाँटना फ़ायदेमंद है।

प्रीकंडीशन, पोस्टकंडीशन और रिकर्शन की गलतियाँ

प्रीकंडीशन वह शर्त है जो शुरू होने से पहले सच होनी चाहिए (बाइनरी सर्च: सूची छँटी हो)। पोस्टकंडीशन वह वादा है जो अंत में पूरा होता है (सॉर्टिंग: हर आइटम अगले से छोटा या बराबर)। इन्हें लिखने से टेस्ट करना आसान होता है।

रिकर्शन में फ़ंक्शन छोटे सवाल पर खुद को बुलाता है। आम गलतियाँ:

करके देखो: दो सर्च की दौड़

1 से 32 तक संख्याएँ पर्चियों पर लिखो और क्रम में उल्टा रखो। दोस्त से एक गुप्त संख्या चुनवाओ। पहले एक-एक पर्ची पलटकर ढूँढो और गिनो। फिर हमेशा बीच वाली पर्ची पलटकर ढूँढो। 5 बार करो। किस तरीके में कभी 6 से ज़्यादा बार नहीं पलटना पड़ा? आखिरी 3D कदम में स्लाइडर से जाँचो (n = 32: log₂ 32 = 5)।

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

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

1. सूची में 50 नाम हैं। लीनियर सर्च में बेस्ट और वर्स्ट केस में कितनी तुलना?

बेस्ट केस: नाम पहला है → 1 तुलना। वर्स्ट केस: नाम आखिरी है या है ही नहीं → 50 तुलना। लीनियर सर्च O(n) है।

2. 1024 आइटम की छँटी सूची में बाइनरी सर्च को ज़्यादा से ज़्यादा कितनी तुलना चाहिए?

हर कदम आधा: 1024 → 512 → 256 → 128 → 64 → 32 → 16 → 8 → 4 → 2 → 1। यह 10 बार आधा करना है, और आखिरी जाँच: ज़्यादा से ज़्यादा 11 तुलना (log₂ 1024 = 10)।

3. f(n) = 4n² + 10n + 7 का बिग O बताओ।

सबसे बड़ा पद 4n² रखो और 4 हटाओ: O(n²)।

4. i का लूप 1 से n तक, उसके अंदर j का लूप 1 से n तक। अंदर की लाइन कितनी बार चलेगी?

i के n मानों में से हर एक के लिए n बार: n × n = n²। टाइम कॉम्प्लेक्सिटी O(n²)।

5. एक O(n²) प्रोग्राम 1000 आइटम 2 सेकंड में छाँटता है। 3000 आइटम में लगभग कितना समय?

n 3 गुना, तो n² 3² = 9 गुना: लगभग 2 × 9 = 18 सेकंड।

6. n = 1000 पर बबल सॉर्ट और मर्ज सॉर्ट की तुलना करो।

बबल: लगभग n²/2 = 5,00,000 तुलना। मर्ज: लगभग n log₂ n = 1000 × 10 = 10,000। मर्ज सॉर्ट लगभग 50 गुना कम काम करता है, पर अतिरिक्त मेमोरी लेता है।

आम गलतियाँ

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

1. लीनियर सर्च की वर्स्ट केस टाइम कॉम्प्लेक्सिटी क्या है?
2. बाइनरी सर्च तभी चलता है जब सूची:
3. n दोगुना होने पर O(n²) एल्गोरिदम लगभग कितना समय लेगा?
4. कौन सा सॉर्ट O(n log n) है?
5. 7n + 300 का बिग O है:

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

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

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

टाइम कॉम्प्लेक्सिटी आसान शब्दों में क्या है?

यह बताती है कि इनपुट बड़ा होने पर एल्गोरिदम के कदम कैसे बढ़ते हैं। जैसे O(n) का मतलब: इनपुट दोगुना, कदम दोगुने।

टाइम और स्पेस कॉम्प्लेक्सिटी में क्या अंतर है?

टाइम कॉम्प्लेक्सिटी कदम नापती है; स्पेस कॉम्प्लेक्सिटी अतिरिक्त मेमोरी। एल्गोरिदम तेज़ होकर भी ज़्यादा मेमोरी ले सकता है, जैसे मर्ज सॉर्ट।

सबसे तेज़ बिग O कौन सा है?

O(1) सबसे अच्छा है, फिर O(log n), O(n), O(n log n), O(n²), और घातांकी O(2ⁿ) आम लोगों में सबसे खराब है।

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

कनाडा (ओंटारियो)Grade 12C. Designing Modular Programs
यूक्रेन11 класAlgorithms
इंग्लैंडYear 103.1 Fundamentals of algorithms
अमेरिकाGrade 11Selection and Iteration
अमेरिकाGrade 11Algorithms and Programming
दक्षिण कोरिया고등학교 2학년Algorithms and programming
दक्षिण कोरिया고등학교 3학년Abstraction and algorithms

पहले यह पढ़ें

आगे पढ़ें

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

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