Complexities (जटिलता)
एल्गोरिथम जटिलता (Algorithm Complexity) एक तरीका है एल्गोरिदम के प्रदर्शन को मापने का, जिसमें हम देखते हैं – कितना समय (Time Complexity) और इसके लिए कितनी मेमोरी (space) की आवश्यकता है|
1. समय की जटिलता (Time Complexity)
आसान भाषा में : यह हमें बताता है, कि प्रोग्राम अपना काम पूरा करने में कितना समय (time) लेगा। जैसे-जैसे डेटा बढ़ता है, क्या प्रोग्राम बहुत ज्यादा समय लेने लगता है?
यह क्यों जरूरी है?
जब हमारे पास बहुत सारा डेटा (Big Data) होता है, तो हम ऐसा तरीका चुनना चाहते हैं जो सबसे तेज (fast) हो।
उदाहरण: किताब ढूँढना (Searching)
-
लीनियर सर्च (Linear Search) : मान लीजिए आप एक लाइन में रखी 100 किताबों को एक-एक करके चेक कर रहे हैं। अगर किताब सबसे अंत में हुई, तो आपको 100 बार चेक करना पड़ेगा। इसमें ज्यादा समय (more time) लगता है।
-
जटिलता : O(n)
-
-
बाइनरी सर्च (Binary Search) : आप सीधे बीच वाली किताब देखते हैं और तय करते हैं, कि किताब दाईं ओर है या बाईं ओर। हर बार आप आधी किताबों को छोड़ देते हैं। यह बहुत तेजी से (quickly) काम करता है।
-
जटिलता : O(log n)
-
2. जगह की जटिलता (Space Complexity)
आसान भाषा में : यह हमें बताता है, कि प्रोग्राम को चलने के लिए कंप्यूटर की कितनी मेमोरी (memory/RAM) की जरूरत है।
मेमोरी कहाँ इस्तेमाल होती है?
-
इनपुट (Input) : जो डेटा हम प्रोग्राम को देते हैं।
-
अस्थायी काम (Temporary work) : गणना (calculation) के दौरान बीच में कुछ डेटा को याद रखने के लिए।
-
कोड (Code) : खुद प्रोग्राम की फाइल्स को रखने के लिए।
उदाहरण : नंबरों को याद रखना (Fibonacci)
-
इटरैटिव (Iterative – लूप वाला तरीका) : इसमें हम केवल 2-3 डिब्बे (variables) इस्तेमाल करते हैं, और पुराने नंबर हटाकर नए लिखते जाते हैं। इसमें बहुत कम जगह (less space) लगती है।
-
जटिलता : O(1)
-
-
रिकर्सिव (Recursive – बार-बार खुद को बुलाना) : इसमें कंप्यूटर को हर पुराने स्टेप को याद रखना पड़ता है, जब तक आखिरी जवाब न मिल जाए। इससे मेमोरी का खर्च बढ़ जाता है (more memory usage)।
-
जटिलता : O(n)
-
Complexity का परिचय के लिए तीन Notations का उपयोग होता है : एल्गोरिदम की जटिलता (Complexity) को मापने के लिए हम तीन मुख्य चिन्हों (Notations) का उपयोग करते हैं। इसे आप एक उदाहरण से बहुत आसानी से समझ सकते हैं।
- Big-O (O) : Worst Case – Maximum Time/Space लगेगा।
- Big-Ω (Ω) : Best Case – Minimum Time/Space लगेगा।
- Big-Θ (Θ) : Average Case – Generally जितना लगेगा।
1. बिग-ओ (Big-O Notation – O) : सबसे खराब स्थिति (Worst Case)
यह बताता है कि काम को पूरा करने में ज्यादा से ज्यादा (maximum) कितना समय या जगह लगेगी।
-
उदाहरण: मान लीजिए चाबी आपके कमरे के सबसे आखिरी कोने में मिले। आपको पूरा कमरा छानना पड़ा। यह “Worst Case” है।
-
प्रोग्रामिंग में हम हमेशा इसी पर ध्यान देते हैं ताकि हमें पता रहे कि सबसे बुरा होने पर भी प्रोग्राम कितना समय लेगा।
2. बिग-ओमेगा (Big-Omega Notation – Omega) : सबसे अच्छी स्थिति (Best Case)
यह बताता है कि काम को पूरा करने में कम से कम (minimum) कितना समय लगेगा।
-
उदाहरण : जैसे ही आपने ढूंढना शुरू किया, चाबी दरवाजे के पास ही मिल गई। यह सबसे अच्छी बात है।
-
असल दुनिया में ऐसा हमेशा नहीं होता, इसलिए इसे कम इस्तेमाल किया जाता है।
3. बिग-थीटा (Big-Theta Notation – Theta) : औसत स्थिति (Average Case)
यह बताता है कि औसतन (generally/average) कितना समय लगेगा।
-
उदाहरण : चाबी न तो एकदम शुरू में मिली और न ही एकदम अंत में, बल्कि बीच में कहीं मिल गई।
बाइनरी सर्च (Binary Search) का उदाहरण :
इसे हम एक शब्दकोश (dictionary) में शब्द ढूंढने जैसा मान सकते हैं :
-
सबसे अच्छी स्थिति (Omega(1)) : आपने किताब ठीक बीच से खोली और आपको पहले ही प्रयास (attempt) में अपना शब्द मिल गया।
-
सबसे खराब स्थिति (O(\log n)) : आपको बार-बार पन्ने आधे-आधे बाँटने पड़े और अंत में जाकर शब्द मिला।
-
औसत स्थिति (Theta(\log n)) : ज्यादातर समय आपको शब्द ढूंढने में लगभग इतने ही कदम (steps) लगेंगे।
निष्कर्ष (Conclusion)
सरल शब्दों में कहें तो एल्गोरिदम जटिलता (Algorithm Complexity) हमें दो मुख्य बातें सिखाती है :
-
समय की बचत (Time Complexity) : यह हमें बताता है कि डेटा (input) बढ़ने पर प्रोग्राम अपना काम पूरा करने में कितना समय लेगा। हमारा लक्ष्य इसे हमेशा कम रखना होता है।
-
मेमोरी की बचत (Space Complexity) : यह बताता है कि प्रोग्राम को चलने के लिए कंप्यूटर की कितनी जगह (memory/RAM) चाहिए।
याद रखने योग्य मुख्य बातें :
-
सही चुनाव (Better Choice) : इन दोनों पैमानों (metrics) की मदद से हम अपनी जरूरत के हिसाब से सबसे बेहतरीन तरीका (efficient algorithm) चुन सकते हैं।
-
अदला-बदली (Time-Space Tradeoff) : अक्सर हमें एक को पाने के लिए दूसरे का त्याग करना पड़ता है।
-
कभी-कभी काम को जल्दी (fast) करने के लिए हमें ज्यादा मेमोरी (more memory) देनी पड़ती है।
-
कभी-कभी कम मेमोरी (less memory) में काम चलाने के लिए हमें ज्यादा समय (more time) खर्च करना पड़ता है। इसे ही हम ‘ट्रेड-ऑफ’ (tradeoff) कहते हैं।
-
-
सुधार (Optimization) : जटिलता को समझकर हम अपने प्रोग्राम को और बेहतर (better/optimize) बना सकते हैं ताकि वह बहुत बड़े डेटा (large inputs) को भी आसानी से संभाल सके।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
प्रश्न 1. समय की जटिलता (Time Complexity) क्या है?
- यह एक पैमाना (measure) है जो बताता है कि डेटा का साइज (input size) बढ़ने पर एल्गोरिदम को अपना काम पूरा करने में कितना समय लगेगा।
प्रश्न 2. जगह की जटिलता (Space Complexity) क्या है?
- यह बताता है, कि एल्गोरिदम को अपना काम करने के लिए कंप्यूटर की कितनी मेमोरी (memory space) की जरूरत पड़ेगी।
प्रश्न 3. बेस्ट, वर्स्ट और एवरेज केस क्या होते हैं?
-
सबसे अच्छा (Best Case) : जब काम सबसे कम समय (minimum time) में हो जाए।
-
सबसे खराब (Worst Case) : जब काम होने में सबसे ज्यादा समय (maximum time) लगे।
-
औसत (Average Case) : जब काम होने में सामान्य समय (expected average time) लगे।
प्रश्न 4. O(1), O(n), और O(n2) का मतलब क्या है?
-
O(1) – स्थिर समय (Constant Time) : डेटा चाहे कितना भी बड़ा हो, समय हमेशा एक जैसा ही लगेगा।
-
O(n) – रेखीय समय (Linear Time) : जैसे-जैसे डेटा बढ़ेगा, समय भी उसी रफ़्तार (proportion) से बढ़ेगा।
-
O(n2) – द्विघातीय समय (Quadratic Time) : अगर डेटा थोड़ा भी बढ़ता है, तो समय बहुत तेजी से (वर्ग की रफ़्तार में) बढ़ता है।
प्रश्न 5. टाइम-स्पेस ट्रेडऑफ़ (Time-space tradeoff) क्या है?
- यह एक तरह का समझौता (compromise) है। कभी-कभी काम को जल्दी (fast) करने के लिए हमें ज्यादा मेमोरी का इस्तेमाल करना पड़ता है, और कभी कम मेमोरी में काम चलाने के लिए ज्यादा समय देना पड़ता है।
प्रश्न 6. रिकर्शन (Recursion) की जटिलता कैसे नापते हैं?
-
समय (Time) : कुल कितनी बार फंक्शन को बुलाया (number of calls) गया और हर बार कितना काम हुआ।
-
जगह (Space) : हर बार फंक्शन बुलाने पर जो मेमोरी का ढेर (stack memory) बनता है, उसे जोड़कर।




