0:00 हेलो एवरीवन, माय नेम इज हरिश चस। आज के इस वीडियो में हम स्टार्ट करने वाले हैं डेटा स्ट्रक्चर्स का सेकंड ईयर का फर्स्ट यूनिट वि इज इंट्रोडक्शन टू डेटा स्ट्रक्चर्स एंड एल्गोरिदम्स। तो ये 2024 पैटर्न के लिए मैं वीडियोस बना रहा हूं। 2019 पैटर्न के मैंने ऑलरेडी अपलोड किए थे। बट अभी सिलेबस काफी चेंज हो गया है। तो मैंने सोचा कि 2024 पैटर्न के लिए भी सब कुछ आपको न्यू कंटेंट दूं। और इनके नोट्स भी जो है आपको लिंक है नीचे डिस्क्रिप्शन में। वहां से मिल जाएंगे। तो चलिए स्टार्ट करते हैं। सबसे पहले हम देखेंगे इंट्रोडक्शन। अह कि डेटा स्ट्रक्चर्स एग्ज़ैक्टली होते क्या है? तो देखो डेटा स्ट्रक्चर्स इन सिंपल वर्ड्स डेटा जो भी होता है ना आपका वो आपको कंप्यूटर में मैनेज करना है। उसको अच्छे से एक्सेस करना है। उस पे कुछ ऑपरेशंस करने हैं डेटा के साथ तो आप डेटा स्ट्रक्चर्स का यूज़ करते हो। देखो वही है अ वे ऑफ़ ऑर्गेनाइजिंग एंड स्टोरिंग डेटा कंप्यूटर के अंदर ताकि आप उसको एक्सेस प्रोसेस मैनेज वगैरह एफिशिएंटली कर पाओ। इसलिए आप डेटा स्ट्रक्चर्स का यूज़ करते हो। डिफरेंट एप्लीकेशनेशंस रिक्वायर डिफरेंट वेज़ ऑफ स्टोरिंग डेटा। अलग-अलग 1:00 टाइप के जो एप्लीकेशनेशंस होते हैं उनको अलग-अलग तरीके लगते हैं डेटा स्टोर करने के लिए। ऐसा नहीं कि एक सिंपल कुछ टेबल बना दिया। उसी में आप सब टाइप का डेटा स्टोर करते हो। अलग चीजों के लिए अलग डेटा। एक सिंपल एग्जांपल ले लो। मान लो आप एक आपके पास एक सुपर मार्केट है। ओके? और वो सुपर मार्केट में आप बहुत सारी चीजें बेचते हो। आपके पास वहां पर बुक्स है, आपके पास मिल्क है और क्लोथ्स है। मतलब अलग-अलग टाइप की चीजें हैं वहां पे। तो ये सारी चीजें आप एक ही रैक के अंदर रखोगे क्या? आप एक ही रैक के अंदर नहीं रखते। आप शायद बुक्स बुकशेलफ में रखोगे, मिल्क फ्रिज के अंदर रखोगे, क्लोथ्स कहीं दूसरे रैक में रखोगे। तो ये अलग-अलग चीजों को आप अलग-अलग जगह रखते हो। उसी तरीके से अलग-अलग वेज़ होते हैं अलग-अलग एप्लीकेशनेशंस के डेटा स्टोर करने के। ओके? तो डेटा स्ट्रक्चर्स क्या करते हैं? आपको ऑपरेशंस परफॉर्म करने में हेल्प करते हैं। कौन से ऑपरेशन? डेटा इंसर्ट करना। आपको नया डेटा इंसर्ट करना है। आपको डेटा डिलीट करना है। कुछ सर्च करना है आपको डेटा। तो ये सारे ऑपरेशंस जो है आप 2:03 परफॉर्म कर सकते हो डेटा स्ट्रक्चर्स का यूज़ करके। तो एक क्लासिफिकेशन देख लेते हैं हम अभी डेटा स्ट्रक्चर्स का। तो डेटा स्ट्रक्चर्स को दो पार्ट्स में क्लासिफाई किया जाता है। लीनियर और नॉन लीनियर। लीनियर डेटा स्ट्रक्चर्स जो होते हैं ना उसमें डेटा लीनियर सीक्वेंशियल तरीके में स्टोर किया जाता है। एक के बाद एक जैसा एग्जांपल के तौर पे दिखाता हूं मैं आपको। अ यहां पे दिखा जैसा एक डेटा पॉइंट है यहां पे। उससे दूसरा कनेक्टेड है। फिर दूसरे से तीसरा कनेक्टेड है। तीसरे से चौथा। जैसे कि आप देख सकते हो डेटा पूरा लीनियर वे में कनेक्टेड है। एक दूसरे से देखो। यहां पर भी जो डाटा आपको दिखाई दे रहा है यह जो भी नंबर्स मैंने लिखे ये डाटा ही है ऐसा ज़ूम करो यह सब कुछ लीनियर वे में एक के बाद एक रखा हुआ है तो वो लीनियर डेटा स्ट्रक्चर है और नॉन लीनियर क्या होता है डेटा वहां पे इस तरीके से लीनियर वे में नहीं होता शायद वो ट्री या ग्राफ के फॉर्म में होगा ये A इसके साथ यहां पे B 3:05 कनेक्टेड है यहां पे C यहां D यहां E ओके तो ये जो है नॉन लीनियर है क्योंकि यहां पे आपको दिखाई दे रहा है A के बाद B है, B के बाद C है। यहां पे A के बाद B भी है और A के बाद C भी है। ओके? तो सीक्वेंशियल फॉर्म आपको यहां पे नहीं दिखता अ नॉन लीनियर डेटा स्ट्रक्चर में। अब लीनियर के अंदर भी ना दो पार्ट्स होते हैं। स्टैटिक और डायनेमिक। अभी देखो ये जो भी मैं डायग्राम्स बना रहा हूं। अरे ट्री लिंक लिस्ट वगैरह जो भी है अगर आपको नहीं समझ आ रहा है तो भी कोई प्रॉब्लम नहीं है क्योंकि इसका रिलेशन जो है ना आगे है ये लिंक लिस्ट स्टक q का अलग चैप्टर है ट्री ग्राफ का अलग चैप्टर है फिर अरे के बारे में आप नेक्स्ट चैप्टर में सीखोगे अभी बस आपको जनरल आईडिया लेनी है कि डेटा स्ट्रक्चर होते क्या है वगैरह-वगैरह ओके तो नहीं भी समझ आ रहा है तो कोई प्रॉब्लम नहीं आगे आगे जाके जब आप ये चीजें और सुनेंगे फिर से तब आपको अच्छे से चीजें समझेंगी। अभी बस सुनते चलो और रिवीजन के लिए तो नोट्स का आप यूज़ कर ही सकते हो। ठीक है? तो हां आई वास टॉकिंग अबाउट द क्लासिफिकेशन ऑफ़ लीनियर डेटा स्ट्रक्चर। स्टैटिक और डायनेमिक। अब ये जो है ना 4:06 स्टैटिक और डायनेमिक ये स्टोरेज के बेसिस पे डिसाइड किया जाता है। देखो मेमोरी जो है अगर आपने पहले से एलोकेट करके रख दी कि अभी ये इतनी एलोकेट कर दी इतने एलिमेंट्स के लिए फिर बाद में डेटा डालेंगे उसमें तो वो स्टैटिक डेटा स्ट्रक्चर होता है। जैसा अ्यूम करो कि मैंने ना एक एरे बनाया जिसके अंदर पांच एलिमेंट्स मैं स्टोर करने वाला हूं। तो मैंने अरे बना के रख दिया और उसको मेमोरी भी एलोकेट कर दी मैंने पांच एलिमेंट्स के लिए। अब मैं उसमें पांच एलिमेंट से ज्यादा स्टोर नहीं कर सकता क्योंकि मेमोरी उसमें पांच की है। और अगर मान लो मैं उसमें सिर्फ एक एलिमेंट स्टोर करके ब्लैंक छोड़ दे रहा हूं बाकी का तो भी मैं मेमोरी वेस्ट कर रहा हूं क्योंकि मैंने तो एलोकेट करके रख दिया ना। अब मैं यूज़ करूं या ना करूं? मेमोरी तो दे दी मैंने उसको। तो इस तरीके की चीज़ होती है स्टैटिक के अंदर। लेकिन डायनेमिक में कैसा होता है ना? आप जैसा-जैसा डेटा डिलीट करते हो या इंसर्ट करते हो, उसके बेसिस पे अह मेमोरी एलोकेट की जाती है रन टाइम पे। यह एग्जीक्यूशन के पहले ही आप मेमोरी एलोकेट करके रखते हो स्टैटिक डेटा स्ट्रक्चर में 5:07 और डायनेमिक में आप रन टाइम पे ऑटोमेटिकली मेमोरी एलोकेट की जाती है। जैसा ये देखिए मैं मैंने यहां पे दो डेटा रखा है ए और बी। ओके? तो अभी जो मेमोरी लग रही है वो सिर्फ A और B के लिए लग रही है। मान लो मैंने C भी ऐड कर दिया। तो अब C के लिए भी मेमोरी एलोकेट हो जाएगी। फिर मान लो मुझे C नहीं रखना है मैंने डिलीट कर दिया तो उसकी मेमोरी हट जाएगी वहां से। तो यहां पे जितना डेटा है उतनी मेमोरी होती है। तो आपकी मेमोरी वेस्ट नहीं होती डायनेमिक में। इसमें आपकी मेमोरी वेस्ट भी हो सकती है अगर आप यूज़ नहीं कर रहे हो तो या फिर ओवरफ्लो भी हो सकता है। अगर मान लो भर गया और मुझे और डेटा डालना है तो। तो ये स्टैटिक है और ये डायनेमिक है। फिर डायनेमिक में अलग-अलग टाइप्स हैं। लिंक लिस्ट, स्टैक, क्यू वगैरह ये जो एग्जांपल है नीचे वाला ये लिंक लिस्ट का है। और ये जो एग्जांपल है ये अरे का है ऊपर वाला। ओके? और नॉन लीनियर में जैसा मैंने आपको बोला था कि वो सीक्वेंशियल वे में नहीं होता। अ एक से मल्टीपल नोड्स कनेक्टेड हो सकते हैं। ट्री का ये एग्जांपल है जो मैंने ड्रॉ किया। फिर ग्राफ भी होता है। अभी ग्राफ जो है उससे मल्टीपल नोड्स 6:08 कनेक्टेड हो सकते हैं। जैसा इसमें आपने देखा दो ही थे। उसमें वैसा नहीं रहता ग्राफ में। ग्राफ में कुछ इस तरीके के कनेक्शंस आपको दिखाई देंगे। रिलेशनशिप्स के लिए वो यूज़ किया जाता है। बेसिकली ग्राफ्स। अ नेक्स्ट देखते हैं अभी डेटा स्ट्रक्चर्स की जरूरत क्यों है? तो इससे बहुत सारा डेटा ना आप एफिशिएंटली ऑर्गेनाइज और मैनेज कर सकते हो। परफॉर्मेंस इंप्रूव कर सकते हो प्रोग्राम्स का। टाइम और मेमोरी कंजमशन रिड्यूस कर सकते हो। फास्ट एक्सेस दे सकते हो अ जो स्टर्ड डेटा है उसके लिए और कॉम्प्लेक्स कंप्यूटेशनल प्रॉब्लम्स भी आप अच्छे से सॉल्व कर सकते हो। बेसिक ऑपरेशंस देख लेते हैं हम अभी डेटा स्ट्रक्चर्स के ऊपर इंसर्शन, डिलीशन वगैरह। तो मैं एक सिंपल अरे का आपको एग्जांपल दे के सब कुछ एक्सप्लेन करता हूं। तो अरे ना एक डेटा स्ट्रक्चर होता है जिसमें आप डेटा स्टोर करते हो। इतना समझ लो अरे के बारे में। देखो एक अरे बना रहा हूं मैं जिसके अंदर हम कुछ इस तरीके से एलिमेंट स्टोर करेंगे। तो इसमें आप पांच एलिमेंट स्टोर कर सकते हो। पांच इसमें जो 7:08 है मैंने मेमोरी रखी है और अरे को ना इंडेक्सिंग दी जाती है ज़ीरो से। 0 1 2 3 4 इस तरीके से। चलिए अब इसके अंदर ना हम डेटा इंसर्ट डिलीट वगैरह देखते हैं। तो इंसर्शन है सबसे पहले। इंसर्शन मतलब डेटा इंसर्ट करना। तो डेटा स्ट्रक्चर के अंदर आप डेटा इंसर्ट कर सकते हो। जैसा मैंने यहां एक डेटा डाल दिया। 7 2 इस तरीके से मैंने डेटा यहां पे इंसर्ट किया। फिर उसके बाद है डिलीशन। अब आप डेटा डिलीट भी कर सकते हो। जैसा मान लो मैंने इसको डिलीट कर दिया यहां से। फिर उसके बाद ट्रेवर्सल। अगर मुझे ट्रेवर्स करना है पूरे डेटा स्ट्रक्चर के अंदर। ट्रेवर्स का मतलब मैं एक्सप्लेन करता हूं। ठीक है? ये इसके अंदर डेटा है। अरे के अंदर। अब मैं आपको बोल रहा हूं ये जो भी डेटा है ना अरे में वो मुझे डिस्प्ले करके बताओ। आउटपुट में दिखाओ कि अरे के अंदर क्या-क्या डेटा प्रेजेंट है। तो आप क्या करोगे? ट्रेवर्स करोगे। सबसे पहले एलिमेंट के पास जाओगे और उसको प्रिंट कर दोगे। फिर आप दूसरे एलिमेंट के पास जाओगे। उसे भी प्रिंट कर दोगे। फिर तीसरे के पास जाओगे 8:10 उसे भी प्रिंट कर दोगे। चौथे के पास जाओगे प्रिंट कर दोगे। लास्ट वाले के पास जाओगे प्रिंट कर दोगे। तो ये जो आप जा रहे हो ना एक के बाद एक, एक के बाद एक उसको ही ट्रेवर्सल बोला जाता है। ठीक है? सो दैट्स ट्रेवर्सल। फिर उसके बाद सर्चिंग। सर्चिंग मतलब कोई स्पेसिफिक एलिमेंट अगर आपको डेटा स्ट्रक्चर में सर्च करना है। जैसे मान लो मैंने बोला मुझे सिक्स सर्च करना है। सिक्स कहां पर है बताओ? तो तो भी आप ट्रेवर्सल का यूज़ कर सकते हो। वैसा सर्च करने के तो बहुत अलग-अलग एल्गोरिदम्स वगैरह होते हैं। बाइनरी सर्च वगैरह-वगैरह। लेकिन अभी मैं सिंपल लीनियर सर्च बता रहा हूं आपको। मैंने सिक्स सर्च करने को बोला। तो आप क्या करोगे? आप सिक्स को की बना लोगे क्योंकि आपको ढूंढना है ना सिक्स आपको की ढूंढना है तो आप सब में पहले एलिमेंट के पास जाओगे चेक करोगे कि आपको जो एलिमेंट ढूंढना है क्या वो वही है जैसा सिक्स है क्या ये फोर नहीं है ना तो फिर आप अगले वाले के पास जाओगे फिर आप चेक करोगे कि ये वाला जो एलिमेंट है वो है क्या नहीं वो भी नहीं है फिर आप फिर से अगले वाले के पास जाओगे फिर से आप चेक करोगे नहीं ये भी नहीं है फिर आप अगले वाले के पास जाओगे 9:10 फिर से चेक करोगे हां इस बार मैच हो हो गया। मतलब आप बोलोगे एलिमेंट जो है वो आपको थर्ड इंडेक्स पे मिल चुका है। एलिमेंट फाउंड एट इंडेक्स थ्री। ओके? इस तरीके से सर्चिंग भी हो जाएगी। फिर उसके बाद सॉर्टिंग। सॉर्टिंग मतलब डेटा को किसी ऑर्डर में सॉर्ट करना असेंडिंग ऑर्डर में या डिसेंडिंग ऑर्डर में। तो अगर मान लो इसको आपने सॉर्ट किया तो फिर एरे कैसा बन जाएगा आपका? 1 2 4 6 7 1 2 4 6 से इस तरीके से सॉर्ट कर दिया आपने इसको। फिर उसके बाद अपडेटिंग अगर मान लो कोई स्पेसिफिक एलिमेंट आपको अपडेट करना है। जैसे मुझे इस सिक्स के जगह पे एट कर देना है तो मैं इसको अपडेट कर दूंगा। है ना? वो स्पेसिफिक इंडेक्स के एलिमेंट को मैं चेंज कर दूंगा। मतलब मैं लिख दूंगा कि थर्ड इंडेक्स का जो एलिमेंट है वो एट है। तो अब जो पहले सिक्स था वो एट बन जाएगा। इस तरीके से अपडेशन भी आप डेटा स्ट्रक्चर में कर सकते हो। ये सारे ऑपरेशंस थे। फिर नेक्स्ट देखते हैं 10:11 गुड डेटा स्ट्रक्चर किसको बोलते हो आप जिसमें अच्छे से मेमोरी यूटिलाइज होती है। फास्ट एक्सेस होता है डेटा का। इजी इंसर्शन और डिलीशन हो जाता है और इंप्लीमेंटेशन करना भी आसान है। और लार्ज डेटा सेट्स के लिए स्केलेबिलिटी है। स्केलेबिलिटी मतलब अ जो है आप उसको बड़ा बना सकते हो। जैसे-जैसा आपका डेटा सेट इंप्रूव हो बड़ा होता जाएगा ना आपका डेटा स्ट्रक्चर भी स्केलेबल होना चाहिए। उसको उतना लार्ज डेटा सेट मैनेज करने आना चाहिए। ऐसा नहीं कि आप डेटा बढ़ाते जा रहे हो बट आपके डेटा स्ट्रक्चर की कैपेबिलिटी है ही नहीं उसको मैनेज करने की ऐसा नहीं होना चाहिए स्केलेबल होना चाहिए डेटा स्ट्रक्चर उसके बाद एडवांटेजेस वही है एफिशिएंट ऑर्गेनाइजेशन ऑफ़ डेटा अ फास्ट सर्चिंग और इनेशन रिट्रीव कर सकते हो आप मेमोरी यूटिलाइज़ेशन अच्छे से होती है और प्रोग्राम परफॉर्मेंस आपका इंप्रूव होता है और कॉम्प्लेक्स एप्लीकेशनेशंस भी जो है सिंपलीफाई हो जाता है उनका इंप्लीमेंटेशन एप्लीकेशनेशंस क्या है डेटा स्ट्रक्चर्स के डीबीएमएस में यूज़ किया जाता है। डेटाबेस मैनेजमेंट सिस्टम्स में डेटाबेस 11:13 मैनेजमेंट सिस्टम्स में डेटा होता है अलग-अलग टाइप का। स्टूडेंट्स के रिकॉर्ड्स होंगे। उनके मार्क्स, उनका रिजल्ट, उनका रोल नंबर, फोन नंबर, ईमेल आईडी सारा डेटा एक जगह पे स्टोर किया जाएगा। तो वो डेटा स्ट्रक्चर वहां यूज़ किया जाता है। फिर ऑपरेटिंग सिस्टम्स में मेमोरी मैनेजमेंट के लिए, प्रोसेस मैनेजमेंट वगैरह के लिए आप देखते होंगे ना अ जो भी रैम कितनी कौन यूज़ कर रहा है वो सब कुछ डेटा लिखा होता है। तो उसके लिए भी फिर कंप्यूटर नेटवर्क्स में, कंपाइलर डिज़ाइन में, एआई में, फाइल मैनेजमेंट सिस्टम्स में ये सब चीजों में डेटा स्ट्रक्चर्स का यूज़ किया जाता है। आगे आते हैं एब्स्ट्रैक्ट डेटा टाइप पे। तो एब्स्ट्रैक्ट डेटा टाइप का सिंपल मतलब इतना समझो आप। लॉजिकल मॉडल होता है वो। लॉजिकल मॉडल ऑफ डेटा स्ट्रक्चर। ओके? इतना सिंपल मतलब है उसका। एक लॉजिकल या मैथमेटिकल मॉडल डेटा स्ट्रक्चर का जो बस इतनी चीज बताता है कि कौन से ऑपरेशंस परफॉर्म किए जाते हैं। बस उतना ही उसका काम है। वो ऑपरेशंस कैसे होते हैं? इंप्लीमेंटेशन कैसा होता है वो नहीं बताता। एब्स्ट्रैक्ट डेटा 12:15 स्ट्रक्चर। इट ओनली शोज़ व्हाट ऑपरेशंस कैन बी परफॉर्म्ड। इट डजंट शो हाउ दोज़ ऑपरेशंस कैन बी परफॉर्म्ड। ओके? तो कौन से ऑपरेशंस होंगे? सर्च, इंसर्ट, डिलीट, अपडेट। ये सारे ऑपरेशंस होते हैं। कैसे होते हैं? नहीं वो नहीं बताना है क्योंकि ये एक लॉजिकल मॉडल है। इसमें की आईडिया क्या है? एडीटी बस इन दो चीजों पे फोकस करता है। डेटा जो आपको स्टोर करना है और ऑपरेशंस जो डेटा के ऊपर परफॉर्म किए जा सकते हैं। तो इससे इंप्लीमेंटेशन डिटेल्स हाइड हो जाते हैं यूजर से। यूजर को क्या दिखाई देता है? यूजर को बस फंक्शनंस दिखाई देते हैं कि मुझे मेरे डिटेल्स सर्च करने हैं या फिर मुझे किसी और के डिटेल्स सर्च करने हैं या फिर मुझे मेरे डिटेल्स इंसर्ट करने हैं या डिलीट कर देने हैं मुझे मेरे डिटेल्स। बस मैं उतना कर सकता हूं। डेटा दे सकता हूं सर्चिंग के लिए इंसर्शन डिलीशन के लिए। लेकिन मैं इंप्लीमेंटेशन देख नहीं सकता कि ये जो सर्च ऑपरेशन हो रहा है वो एग्जैक्टली हो कैसे रहा है। इसमें लीनियर सर्च यूज़ हो रहा है क्या? क्या बाइनरी सर्च यूज़ हो रहा है? क्या इसमें डेटा स्ट्रक्चर स्टक यूज़ कर रहे हैं या लिंक लिस्ट यूज़ कर रहे हैं? ये मुझे कुछ दिखाई नहीं देने वाला। ओके? इतनी चीज़ आप याद 13:18 रखो। ये कंपोनेंट्स दिखा सकते हो आप एडीटी के। यहां पर एक एप्लीकेशन प्रोग्राम आपको दिखाई दे रहा है जो एक यूजर एक्सेस करेगा। क्यों यूजर एक्सेस करेगा? क्योंकि उसको कुछ पब्लिक फंक्शनंस का यूज़ करना होगा। उसको सर्च यूज़ करना होगा शायद। इंसर्ट करना होगा कुछ या डिलीट करना होगा कुछ। ये सब क्या है? ये सब पब्लिक फंक्शनंस हैं। उसको बस पब्लिक फंक्शन का एक्सेस मिलेगा यूजर को और वो भी अह इस एप्लीकेशन प्रोग्राम के थ्रू। वही है एब्स्ट्रैक्ट डेटा टाइप। बाकी ये जो भी चीजें दिखाई दे रही है आपको प्राइवेट फंक्शन, डेटा स्ट्रक्चर, मेमोरी ये सारी चीजें हिडन होती है यूजर से। तो उसी से डेटा एब्स्ट्रैक्शन हो जाता है। ओके? इसीलिए इसको एब्स्ट्रैक्ट डेटा टाइप बोलते हैं। डेटा एब्स्ट्रैक्शन का मतलब ये है डेटा छुपा कर रखना। ओके? अ दैट्स व्हाट इट इज़। तो पब्लिक फंक्शन दिखेंगे बस सर्च इंसर्ट डिलीट बट प्राइवेट फंक्शनंस जो पीछे चलते होंगे जैसे लीनियर सर्च करने के लिए जो भी फंक्शनंस होंगे एक एलिमेंट देखना उसके बाद अ अगर वो मिल गया तो उसको प्रिंट कर देना 14:18 प्रिंट का फंक्शन चलता होगा फिर वो प्राइवेट है वो यूजर को नहीं दिखने वाला फिर वो डेटा स्ट्रक्चर से कम्युनिकेट कर रहा है प्राइवेट फंक्शन मेमोरी से डेटा ले रहा है ये सारी चीजें हिडन होगी बस पब्लिक फंक्शन का एक्सेस मिलेगा वो भी एप्लीकेशन प्रोग्राम के थ्रू ओके मतलब ये जो भी चीजें हैं। ये सब कुछ हिडन ही होगी यूजर से। एडवांटेजेस देख लो। इंप्लीमेंटेशन डिटेल्स हिडन होते हैं यूजर से। डेटा सिक्योरिटी और इंटेग्रिटी मिल जाती है। क्योंकि आप हाइड करके रख रहे हो ना चीजों को। प्रोग्राम्स को मेंटेन और मॉडिफाई करना आसान होता है। कोड रयूजेबिलिटी प्रमोट होती है और प्रोग्राम की कॉम्प्लेक्सिटी भी जो है कम हो जाती है। डिफरेंस देख लेते हैं दोनों के बीच में। एडीटी और डेटा स्ट्रक्चर में। तो एडीटी डिफाइन करता है कि कौन से ऑपरेशंस परफॉर्म किए जा सकते हैं और डेटा स्ट्रक्चर बताता है कि डेटा कैसे स्टोर किया जा रहा है और कैसे इंप्लीमेंट किया जा रहा है। जो भी ऑपरेशंस वगैरह होंगे वो कैसे इंप्लीमेंट हो रहे हैं और डेटा कैसे स्टोर किया जा रहा है वो डेटा स्ट्रक्चर में। इसमें क्या है? बस ऑपरेशंस कौन से हो रहे हैं। ये एक लॉजिकल व्यू होता है। बस लॉजिकल व्यू देता 15:19 है कि ये ऑपरेशंस है। डिलीट करने पे डिलीट होगा। इंसर्ट करने पे कुछ नई चीज़ ऐड होगी। यही चीज लॉजिक ये फिजिकल इंप्लीमेंटेशन एक्चुअल में कैसा इंप्लीमेंटेशन है? एक्चुअल में सर्च जब करते हो आप तो वो सर्च होने कैसा वाला है? वो सारी चीजें डेटा स्ट्रक्चर में होती है। ये इंप्लीमेंटेशन से इंडिपेंडेंट होता है। इसका कुछ काम नहीं है इंप्लीमेंटेशन से। ये पूरा इंप्लीमेंटेशन स्पेसिफिक होता है। एग्जांपल देखो स्टक एडीटी। अब स्टक क्या है? अगर आपको पता नहीं तो मैं सिंपल वे में एक्सप्लेन करता हूं। बस आपको अभी पता करने की जरूरत भी नहीं है। बट देखो स्टक भी एक डेटा स्ट्रक्चर ही होता है जिस कुछ इस तरीके से वो दिखता है। उसके अंदर ना डेटा पुश किया जाता है। ऐसा और फिर अगर डिलीट करना है तो डेटा पॉप कर दिया जाता है। मतलब डेटा आप इंसर्ट कर सकते हो। जैसा मान लो मुझे ए इसमें पुश करना है तो ऐसा पुश किया जाएगा। मैंने ए डाल दिया डेटा स्टक के अंदर। फिर मान लो मुझे बी भी डालना है। तो मैं इसके ऊपर बी डाल दूंगा। मान लो सी डालना है। मैं सी डाल दूंगा। अब समझो मुझे कुछ डिलीट करना है। तो डिलीट जब करना है ना तो वो ऑटोमेटिकली ऊपर का ही एलिमेंट डिलीट हो जाता है। तो डिलीट जब 16:19 करूंगा मैं जब पॉप ऑपरेशन का यूज़ करूंगा। इसमें पॉप का मतलब डिलीट होता है और पुश का मतलब इंसर्ट होता है। आप पुश भी करोगे तो ऊपर ही होगा। पॉप भी करोगे तो ऊपर से ही होगा। तो पॉप अगर मैंने किया तो फिर ये सी पॉप हो जाएगा यहां से। मान लो मैंने फिर से पॉप यूज़ किया तो ये बी भी पॉप हो जाएगा। ओके? तो स्टक कुछ इस तरीके से काम करता है। तो ये स्टक अब्स्ट्रैक्ट डेटा टाइप का मतलब है कि ये बस क्या बताएगा? ये बस ऑपरेशंस बताएगा। पुश पॉप और पीक होता है। पीक का मतलब डिस्प्ले करना जो सब में टॉप पे है। जैसा अभी टॉप पे ए है तो प्रिंट ए होगा। तो ये सारे ऑपरेशंस बस दिखेंगे यूजर को यूज़ करने के लिए। लेकिन जो उनके पीछे का इंप्लीमेंटेशन है कि स्टैक को आपने कैसे इंप्लीमेंट किया? अरे का यूज़ करके या फिर लिंक लिस्ट का यूज़ करके। अरे का कब यूज़ करोगे आप? जब आपको स्टैटिक डेटा स्ट्रक्चर चाहिए। जब आप चाहते हो मेमोरी पहले से एलोकेट कर देना स्टक के लिए। जब आप चाहते हो डायनेमिक मेमोरी एलोकेशन रखो तो आप लिंक लिस्ट का यूज़ करोगे। तो ये पीछे की बातें हैं। ओके? और ये बस दिखाने की बात है। दैट्स इट। 17:23 अब आते हैं वो जो भी हमने क्लासिफिकेशन देखा था ना वही सारी चीजें फिर से लीनियर नॉन लीनियर और बाकी जो भी थे वो सब कुछ हम देखते हैं अभी डेटा स्ट्रक्चर्स अ को लीनियर नॉन लीनियर में क्लासिफाई किया जाता है एलिमेंट्स को कैसे ऑर्गेनाइज और रिलेट किया जाता है उसके बेसिस पे तो देख लेते हैं लीनियर क्या है नॉन लीनियर क्या है लीनियर डेटा स्ट्रक्चर एक ऐसा डेटा स्ट्रक्चर होता है जहां पे एलिमेंट्स सीक्वेंशियल मैनर में होते हैं ओके हर एलिमेंट उसके प्रीवियस और उसके नेक्स्ट एलिमेंट से यहां पे कनेक्टेड होता है। जैसे कि आप यहां पे देख सकते हो। A ए के बाद B है, B के बाद C, C के बाद डी ये एक दूसरे से कनेक्टेड है। और ये जो पीछे वाले से कनेक्टेड है और ये वाला उसके सक्सेसर से कनेक्टेड है। ये भी एक्चुअली पीछे कनेक्टेड होता है। ये हेड से कनेक्टेड होगा और ये टेल से कनेक्टेड होता है। अगर लिंक लिस्ट की आप बात कर रहे हो तो बट बट इतनी बात याद रखो कि जो है ना लीनियर वे में सारी चीजें होती है। इसमें एग्जांपल्स हैं इसके। अरे, लिंक लिस्ट, स्टक Q एडवांटेजेस देख लो। इंप्लीमेंट करना और 18:24 समझना काफी आसान है। ट्रवर्सल ऑफ एलिमेंट सिंपल होता है। सिंपल इसलिए होता है क्योंकि ट्रेवर्सल एक ही डायरेक्शन में होगा। इसका अगर ट्रेवर्सल करोगे a b c d लाइन से चले जाओगे आप तो काफी सिंपल ट्रेवर्सल होता है। फिर कॉम्प्लेक्सिटी भी जो है इसकी काफी कम होती है ऑपरेशंस के अंदर। अब नॉन लीनियर की अगर हम बात करें तो ये ऐसा डेटा स्ट्रक्चर होता है जहां पे एलिमेंट सीक्वेंशियली नहीं अरेंज किए जाते। हर एलिमेंट मल्टीपल एलिमेंट से कनेक्टेड होता है जिससे एक हायरार्किकल या नेटवर्क स्ट्रक्चर आपको देखने को मिलेगा। जैसे कि आप यहां पे देख सकते हो। ए बी सी डी ई एफ जी। ओके? तो यहां पे अगर आपको ट्रेवर्सल करना है तो वो सीक्वेंशियल नहीं होने वाला है। जैसा आप पिछले वाले में हो जा रहा था। जैसा A के बाद B और B के बाद C और D ऐसा था ना? बट यहां पे तो A के बाद B भी दिख रहा है। A के बाद C भी दिख रहा है। और इसमें भी ट्रेवर्सल के बहुत अलग-अलग तरीके होते हैं। इनऑर्डर ट्रेवर्सल, प्रीऑर्डर ट्रेवर्सल वगैरह जिसमें ए के बाद बी, बी के बाद डी। फिर डी के बाद ई 19:25 लेंगे। फिर बाद में सी लेंगे। या फिर आप लेवल बाय लेवल भी कर सकते हो। ए, बी, सी, डी, ई, एफ, जी। ठीक है? ठीक है? तो ट्रेवर्सल इसमें अलग-अलग टाइप्स में होते हैं। एलिमेंट्स को मल्टीपल लेवल्स पे इसमें ऑर्गेनाइज किया जाता है। ट्रेवर्सल अलग-अलग पाथ्स ले सकता है। जैसे मैं आपको बोल रहा था। फिर कॉम्प्लेक्स रिलेशनशिप्स जो है ये रिप्रेजेंट करता है डेटा एलिमेंट्स के बीच में। नॉन लीनियर डेटा स्ट्रक्चर के एग्जांपल्स हैं ट्री और ग्राफ। जैसे मैंने आपको पहले भी बताया था ट्री और ग्राफ के बारे में। एडवांटेजेस क्या है इसके? कि जो हायरार्किकल रिलेशनशिप्स हैं वो अच्छे से रिप्रेजेंट हो सकते हैं। यहां पे सर्च करना, प्रोसेस करना कॉम्प्लेक्स डेटा के लिए फास्ट होता है और नेटवर्क्स या रियल वर्ल्ड रिलेशनशिप्स आपको दिखाने हैं तो उसके लिए भी इसको यूज़ करते हैं। जैसा आप Facebook वगैरह पे जो फ्रेंड्स वगैरह बनते हैं ना वो ग्राफ के थ्रू आप रिलेशनशिप्स उनके दिखा सकते हो। जैसा मान लो कोई A है। कोई A का फ्रेंड है बी। B का फ्रेंड है सी। C का कोई फ्रेंड है डी। अब यह जो C है 20:27 वह A का भी फ्रेंड है। कोई A का फ्रेंड E होगा जो डी का भी फ्रेंड है। तो ये एक दूसरे से जो है ना रिलेशनशिप्स दिखाए जाते हैं ग्राफ के थ्रू। और तो वही है। दैट्स अ व्हाट ग्राफ्स आर यूज़्ड फॉर। डिफरेंस देख लो अभी लीनियर और नॉन लीनियर में। यहां पे एलिमेंट्स सीक्वेंशियली अरेंज किए जाते हैं। एक के बाद एक। यहां पे एलिमेंट्स को हायरार्किकली या फिर एज अ नेटवर्क जो है अरेंज किया जाता है। हर एलिमेंट एक प्रेडसेसर और एक सक्सेसर से कनेक्टेड होता है। यहां पे एक नोड मल्टीपल नोड्स के साथ कनेक्टेड रह सकता है। ट्रेवर्सल एक सिंगल पाथ फॉलो करता है। ए बी सी डी जैसा एग्जांपल में बताया था। और ये मल्टीपल पाथ्स फॉलो कर सकता है। इंप्लीमेंट करना आसान है। ये थोड़ा सा कॉम्प्लेक्स है। अरे, स्टक, क्यू, लिंक लिस्ट ये सब लीनियर है। यहां पे ट्री और ग्राफ जो है नॉन लीनियर है। अब इसके बाद है स्टैटिक और डायनेमिक डाटा स्ट्रक्चर्स। डाटा स्ट्रक्चर्स को आप क्लासिफाई कर सकते हो स्टैटिक और डायनेमिक डेटा स्ट्रक्चर में। उनका साइज चेंज होता 21:27 है कि नहीं एग्जीक्यूशन के टाइम पे उसके बेसिस पे। तो स्टैटिक डेटा स्ट्रक्चर एक ऐसा डेटा स्ट्रक्चर है जहां जिसका साइज़ फिक्स्ड पहले ही होता है मेमोरी एलोकेशन के टाइम पे और एग्जीक्यूशन के टाइम पे अब आप उसका साइज़ चेंज नहीं कर सकते। जैसे कि आप यहां पे देख सकते हो। एक चार एलिमेंट्स की अरे है। फिक्स्ड साइज़ है उसका। अब आप उसका साइज बढ़ा नहीं सकते, कम नहीं कर सकते। उसमें आप एक एलिमेंट डालो या आप उसमें चार एलिमेंट डालो। अब आप साइज नहीं चेंज कर सकते हो। उसका स्टैटिक है वो। यहां पे देखो मेमोरी बिफोर एग्जीक्यूशन ही एलोकेट कर दी जाती है। साइज फिक्स्ड रहता है इसका थ्रूउ द प्रोग्राम। चार एलिमेंट्स मतलब चार एलिमेंट्स। मेमोरी को आप इंक्रीज या डिक्रीज नहीं कर सकते। और इंप्लीमेंट करना आसान होता है। पहले मेमोरी एलोकेट कर दो, फिर डेटा डालो। कुछ बाद में ग्रो, श्रिंक वगैरह कुछ काम नहीं। अरे जो है इसका एक एग्जांपल है। एडवांटेजेस है। सिंपल इंप्लीमेंटेशन है इसका। अ एलिमेंट्स को भी फास्ट एक्सेस मिल जाता है। इंडेक्सिंग का यूज़ करके। इंडेक्सिंग के बारे में मैंने आपको बताया था वो अरे में 22:27 ज़ीरो से स्टार्ट होता है। मैंने बोला था आपको 0 1 2 3 जैसा मान लो मैंने बोला इंडेक्स टू के एलिमेंट को एक्सेस करो। तो इंस्टेंटली वो जो है ना एक्सेस कर सकते हो आप। अह जो उसकी टाइम कॉम्प्लेक्सिटी होती है बिगो ऑफ़ वन। वैसा हम यह टाइम कॉम्प्लेक्सिटी वगैरह के बारे में आगे सीखेंगे। मतलब इसी वीडियो में आगे सीखेंगे। लेकिन वो काफी फास्ट हो जाता है वो उसको एक्सेस करना। और मेमोरी ओवरहेड भी ना यहां पे कम होता है। ओवरहेड मतलब एक्स्ट्रा काम। जो नॉर्मल काम आपको करना पड़ता है उससे एक्स्ट्रा अगर कुछ काम करना पड़े ना उसको ओवरहेड बोलते हो आप। तो मेमोरी ओवरहेड भी यहां पे नहीं होता। कुछ डिसएडवांटेजेस हैं कि साइज़ मॉडिफाई नहीं कर सकते। आपने एक बार एलोकेट कर दिया तो मेमोरी वेस्ट हो जाएगी। अगर एक्स्ट्रा स्पेस एलोकेट कर दिया। पहले बोला था मैंने अगर आपको एक ही एलिमेंट डालना है। आपने 100 एलिमेंट्स के लिए मेमोरी एलोकेट कर दी। वो तो वेस्ट हो गई फिर आपकी मेमोरी और ओवरफ्लो भी हो सकता है। अगर साइज कम पड़ रहा है तो अगर आपको और एलिमेंट्स डालने हैं तो अब जगह नहीं है तो ओवरफ्लो होगा। 23:28 डायनेमिक में ये सारे प्रॉब्लम्स हट जाते हैं। डायनेमिक डेटा स्ट्रक्चर ऐसा है जिसका साइज ग्रो कर सकता है या फिर श्रिंक कर सकता है। प्रोग्राम एग्जीक्यूशन के टाइम पे एग्जीक्यूशन के टाइम पे जितना डेटा है उसके बेसिस पे मेमोरी जो है ना एलोकेट की जाती है। अगर कम एलिमेंट्स है तो उतने की मेमोरी ज्यादा है तो उतने की मेमोरी प्रोग्राम्स के प्रोग्राम के रिक्वायरमेंट्स के हिसाब से। इसका कुछ फिक्स्ड साइज़ नहीं है। यहां पे A है, B है और C है। मान लो इतना है तो ठीक है। मैं इसमें ऐड भी कर सकता हूं। मुझे जितना भी ऐड करना है या फिर मैं डिलीट भी कर सकता हूं अगर मुझे डिलीट करना है तो। यहां पे मेमोरी एलोकेट और डीलोकेट होती है रन टाइम पे। साइज़ फ्लेक्सिबल होता है और डायनेमिकली अब चेंज हो सकता है वो खुद से। यूटिलाइजेशन भी एफिशिएंट है मेमोरी का और स्टैटिक डेटा स्ट्रक्चर से कॉम्प्लेक्स तो होता ही है। एग्जांपल्स हैं इसके लिंक लिस्ट, स्टक, क्यू, ट्रीज़, ग्राफ्स। अभी यहां पे लिंक लिस्ट इंप्लीमेंटेशन इसलिए लिखा है ये बताने के लिए कि ये डायनेमिक वाला है। अगर मान लो आप एक कोई स्टक बना 24:29 रहे हो और वो स्टैक की मेमोरी आप ऑलरेडी एलोकेट करके रख रहे हो तो मतलब वो उसका आप अरे इंप्लीमेंटेशन कर रहे हो। लेकिन आप डायनेमिक बता रहे हो तो इसलिए लिंक लिस्ट इंप्लीमेंटेशन किया जा रहा है उसका। फिर ट्रीज़ ग्राफ्स एडवांटेजेस है कि मेमोरी तभी एलोकेट होती है जब आपको जरूरत है। ग्रो या श्रिंक हो सकती है। एफिशिएंट मेमोरी यूटिलाइजेशन है और उन एप्लीकेशनेशंस के लिए सूटेबल है जिसका डेटा साइज जो है आपको पता नहीं रहता। अगर डेटा साइज मुझे कितना है पता नहीं है तो मैं डायनेमिक यूज़ करूंगा। जितना लगेगा उतना लगेगा। लेकिन अगर मुझे पता है कितना लगने वाला है तो मैं स्टैटिक भी यूज़ कर सकता हूं। क्योंकि मेरा काम वहां पे आसान हो जाता है स्टैटिक यूज़ करने से। तो इंप्लीमेंट करना कॉम्प्लेक्स है। डिसएडवांटेजेस एडिशनल मेमोरी लगती है आपको पॉइंटर्स ऑफ और रेफरेंसेस के लिए। ये एक इसमें चीज बढ़ जाती है। जैसे देखो लिंक लिस्ट जो था जो पहले डायग्राम में आपने देखा था A फिर यहां पे B फिर उससे कनेक्टेड है C। ये जो आपको दिखाई दे रहा है ना यहां पे डेटा है और डेटा के बाजू में जो ये जगह रखी हुई है ना इसको पॉइंटर 25:30 बोलते हैं। जो पॉइंट करता है अगले वाले डेटा को। यहां पे मेमोरी एड्रेस रखा हुआ होता है अगले वाले नोड का जो उससे कनेक्टेड है। फिर इसके पास मेमोरी एड्रेस होता है अगले वाले नोड का। तो ये जो मेमोरी एड्रेस स्टोर करने का एक्स्ट्रा काम लग रहा है ना वो इसके अंदर ही लगता है डायनेमिक डेटा स्ट्रक्चर में। वहां पे वैसा नहीं होता। लीनियरली होता है वो डेटा पूरा। इसलिए अ ये लीनियरली तो ये भी है लेकिन वहां पे डेटा स्टैटिक होने की वजह से ये पॉइंटर रेफरेंसेस की आपको जरूरत नहीं पड़ती। एलिमेंट्स को एक्सेस करना थोड़ा सा स्लो हो सकता है कंपेयर टू अरेज़ क्योंकि यहां पे इंडेक्सिंग नहीं है। वहां पे इंडेक्सिंग थी ना अरेज़ के अंदर डिफरेंस देख लेते हैं। तो यहां पे साइज़ फिक्स्ड है। यहां पे चेंज हो सकता है ये एग्जीक्यूशन के टाइम पे। मेमोरी एलोकेट हो जाती है एग्जीक्यूशन के पहले। यहां पे रन टाइम पे मेमोरी एलोकेट होती है। अ ये फ्लेक्सिबल नहीं है उतना। ये फ्लैक्सिबल है क्योंकि आप बढ़ाओ कम करो आपके हिसाब से किया जा सकता है। एलिमेंट्स को एक्सेस भी फास्ट कर सकते हो आप। ये एक्सेस थोड़ा स्लो होता है क्योंकि यहां पे पॉइंटर्स का यूज़ 26:30 किया जाता है। फिर मेमोरी वेस्ट होगी यहां पे आपकी। यहां पे मेमोरी वेस्ट नहीं होगी क्योंकि जितना डेटा है उतनी ही मेमोरी एलोकेट होने वाली है। एग्जांपल इसका अरे है। इसका एग्जांपल लिंक लिस्ट है। अब देखते हैं पर्सिस्टेंट और इफर्मल डेटा स्ट्रक्चर्स। तो अपडेट्स कैसे हैंडल होते हैं ना उसके बेसिस पे इन दोनों में क्लासिफिकेशन किया जाता है। पर्सिस्टेंट और इफर्मल। अपडेट मतलब आप जब नया कुछ अपडेट करते हो आपके डेटा स्ट्रक्चर में। तो पर्सिस्टेंट देखो डेटा स्ट्रक्चर जो उसके प्रीवियस वर्जनंस को प्रिजर्व करता है ना वो पर्सिस्टेंट डेटा स्ट्रक्चर होता है। मतलब ये क्या करता है? एकिस्टिंग स्ट्रक्चर को चेंज नहीं करता। आपका जो डेटा है उसमें मान लो आपने कुछ चेंजेस किए डिलीट किया, इंसर्ट किया जो जो आपने किया तो उसके बाद पर्सिस्टेंट डेटा स्ट्रक्चर क्या करता है? जो आपने चेंजेस अभी किए ना उसका पहले का जो वर्जन था उसको भी अच्छे से रखता है कि अगर मान लो कुछ प्रॉब्लम हो गया। अगर आपने चेंजेस करने में कुछ गलती से डिलीट कर दिया या कुछ अननेसेसरी गलत ही चेंज कर दिया। अब आपको पीछे जाना है वापस तो पीछे का वर्जन अवेलेबल रहेगा आपके लिए। तो ये अ पर्सिस्टेंट डेटा स्ट्रक्चर का 27:32 काम है। यही डायग्राम है उसका कि देखो ये आपका पहला वर्जन था। आपने उसमें कुछ चेंज किया। फिर कुछ चेंज किया। फिर कुछ चेंज किया। फिर अभी ये फाइनल आपका वर्जन है जिसमें आपने बहुत सारे चेंजेस कर दिए। लेकिन अब जो है पुराने वर्जनंस भी आपके पूरे एक्सेसिबल होते हैं। अगर इसमें कुछ गलती से डिलीट हो गया या कुछ काम नहीं कर रहा है, कुछ गलत हो गया तो मैं पुराने वर्जनंस पे जाके वो भी यूज़ कर सकता हूं। ऑल हिस्टोरिकल स्टेट्स आर एक्सेसिबल। फिर कैरेक्टरिस्टिक्स की अगर बात करें तो प्रीवियस वर्जनंस यहां पे प्रिज़र्व्ड होते हैं। हर अपडेट एक नया वर्जन क्रिएट करता है। क्योंकि पुराना वर्जन भी रखना है ना उसको। नहीं तो वो क्या करेगा? बस ज अपडेट कर दिया आपने उसी फाइल में ओवराइट कर देगा। पुराने डाटा को फिर गया आपका पुराना डाटा अभी का नया अपडेट होगा बस लेकिन ये ऐसा नहीं करता ये पुराने वर्जन को स्टोर करता है और जो भी हिस्टोरिकल डेट्स स्टेट्स हैं उनको आप अच्छे से एक्सेस कर सकते हो ओरिजिनल डेटा आपका पूरा अनचेंज्ड होता है एडवांटेजेस देख लो अ कंप्लीट हिस्ट्री 28:32 होती है यहां पे मॉडिफिकेशंस की अनडू और रोलबैक ऑपरेशंस होते हैं अनडू तो आपको पता ही होगा कंट्रोल z जैसा था पहले का वैसा कर देते हो रोल बैकक का मतलब भी अनडू ही है लेकिन वो पूरे पूरे के लिए जैसा मान लो फाइल में मैंने 10 चेंजेस कर दिए तो कंट्रोल z से तो बस एक पीछे जाते हो ना आप लेकिन पूरी की पूरी फाइल भी आपकी अगर है बैकअप में सो यू कैन रोल बैक टू दैट प्रीवियस फाइल ये एक्सीडेंटल लॉस ऑफ़ डेटा प्रिवेंट करता है और वर्जन कंट्रोल सिस्टम्स के लिए ये काफी यूज़फुल है। डिसएडवांटेज है कि आपको एडिशनल मेमोरी लगती है। अब आप इतने वर्जन स्टोर कर रहे हो मल्टीपल तो ऑब्वियसली मेमोरी तो ज्यादा लगेगी ही आपको। फिर इंप्लीमेंट करना थोड़ा सा कॉम्प्लेक्स होता है और अपडेट ऑपरेशंस को ना थोड़ा ज्यादा ओवरहेड लगता है। क्यों ओवरहेड लगता है देखिए क्योंकि अपडेट मतलब एज सच वैसा अपडेट नहीं है कि ये अरे है ये एरे के अंदर ये मान लो दो एलिमेंट्स हैं। ये फोर को मैंने एट कर दिया। अपडेट कर दिया। ऐसा अपडेट नहीं कर रहा ना वो सिंपल। वो क्या कर रहा है? नया वर्जन बना रहा है। पुराने वर्जन को स्टोर कर रहा है तो वो अपडेशन में थोड़ा सा ओवरहेड ज्यादा बढ़ 29:33 जाता है। उस वजह से एप्लीकेशनेशंस हैं वर्जन कंट्रोल सिस्टम्स गेट गेटब के बारे में अगर आपने सुना होगा तो आप उस पे अगर आपका कोड अपलोड करते हो और फिर अगर आप कुछ कोड में कुछ भी चेंजेस करते हो तो आप कमिट करते हो ना फिर पहला कमिट आपने किया समझो कमिट ए फिर आपने दूसरा कमिट किया कमिट बी कोड में चेंजेस करके कमिट कर देते हो आप फिर पुराना जो वर्जन है तो भी आपका वो पुराना वर्जन भी स्ट रहता है अगर कुछ नए वर्जन में बग्स आ रहे हैं तो आप पुराने कमिट वाले पे जाके के पुराने को भी एक्सेस कर सकते हो। डेटाबेस ट्रांजैक्शन सिस्टम्स में यूज़ किया जाता है। ये अनडू रीडू फंक्शनैलिटी मिल जाती है। कंट्रोल Z कंट्रोल Y वाली। फिर फंक्शनल प्रोग्रामिंग लैंग्वेजज़ में भी इसका यूज़ होता है। इसके बाद इफर्मल डेटा स्ट्रक्चर बिल्कुल उसका उल्टा है। पर्सिस्टेंट में पुराने वर्जन स्टोर होते हैं। इसमें पुराने वर्जन स्टोर नहीं होते। इफर्मल डेटा स्ट्रक्चर ऐसा डेटा स्ट्रक्चर है जहां पे अपडेट्स एग्जिस्टिंग स्ट्रक्चर को सीधा-सीधा मॉडिफाई कर देते हैं। एक बार चेंज आपने कर दिया तो प्रीवियस स्टेट आपकी चली गई और आप प्रीवियस स्टेट को फिर 30:35 एक्सेस नहीं कर सकते। एग्जांपल देखो यहां पे यहां पे अ जो है आपकी पुरानी स्टेट है और ये आपकी न्यू स्टेट है। आपने कुछ इसके अंदर चेंज किया और फिर चेंज करने के बाद यही आपकी अभी स्टेट वर्जन आपका अवेलेबल है। पुराना वर्जन चला गया आपका। जो भी आपने चेंज किया इसके अंदर आपकी यह अपडेटेड फाइल है जो पुरानी फाइल थी वह अब आपके पास नहीं रहने वाली है। नो एक्सेसिबल हिस्ट्री कैरेक्टरिस्टिक्स अगर देखना है तो सिर्फ करंट वर्जन यहां पे मेंटेंड होता है। ओ ये क्या करता है? अ एग्ज़िस्टिंग डेटा को ओवराइट कर देता है। प्रीवियस स्टेट्स यहां पे स्टर्ड नहीं होते और इसको मेमोरी भी कम लगती है। एडवांटेजेस है कि इंप्लीमेंटेशन आसान है इसका। मेमोरी यूटिलाइजेशन भी एफिशिएंट है क्योंकि मेमोरी एक्स्ट्रा नहीं लग रही ना आपको यहां पे और अपडेट्स भी फास्ट होते हैं क्योंकि सीधा-सीधा मॉडिफाई कर रहे हो आप नया वर्जन बनाओ पुराना वर्जन रखो वो सब काम ही नहीं है कुछ और जनरल पर्पस एप्लीकेशनेशंस के लिए सूटेबल है जहां पे 31:35 वैसा भी आपको पुरानी चीजों को रखने की जरूरत नहीं है वहां पे आप इसका यूज़ कर सकते हो डिसएडवांटेज है कि पुराने वर्जन चले गए आपके रिकवर नहीं हो सकते रोल बैक ऑपरेशंस आपको नहीं देखने को मिलेंगे अगर गलती से कुछ आपने मॉडिफिकेशन कर दिया तो आपका परमानेंट डाटा लॉस हो जाएगा। यहां पे एप्लीकेशनेशंस है इफर्मल के अरेज़, लिंक लिस्ट, स्टक, क्यू और जो भी ट्रेडिशनल पुराने डेटा स्ट्रक्चर प्रोग्राम्स में यूज़ किए जाते थे वो सब इफर्मल ही है। वो पुराने वर्जनंस को स्टोर नहीं करते। दोनों का डिफरेंस भी देख लो। ये प्रीवियस वर्जनंस को प्रिजर्व करता है या नहीं करता। फिर यह न्यू वर्जन क्रिएट करता है। मॉडिफिकेशन के बाद यह जो एक्चुअल एक ही वर्जन है ना उसी पर मॉडिफिकेशन कर देता है। यहां पे नया वर्जन बनेगा। वहां पे जो है उसी में चेंज कर दिया जाएगा। हिस्टोरिकल स्टेट्स पूरे एक्सेसबल होते हैं। पुराने जितने भी वर्जनंस हैं आप पीछे जाके एक्सेस कर सकते हो। इसमें सिर्फ करंट स्टेट एक्सेसिबल होती है। इधर मेमोरी ज्यादा लगती है। यहां पे मेमोरी कम लगती है। अनडू रोल बैक ऑपरेशंस का सपोर्ट मिल 32:35 जाता है। यहां पे कुछ आपको रोलबैक वगैरह नहीं मिलता। इंप्लीमेंट करना कॉम्प्लेक्स है या इंप्लीमेंट करना आसान है। इसलिए तो सारे बेसिक डेटा स्ट्रक्चर्स अरे, स्टक वगैरह में इफर्मल डेटा स्ट्रक्चर ही अ जो है ना उसकी क्वालिटी यूज़ होती है। अब हम एल्गोरिदम्स की बात करते हैं। तो देखिए एल्गोरिदम्स होते क्या है? आपको कोई भी अगर प्रॉब्लम सॉल्व करना है तो प्रॉब्लम सॉल्व करने के लिए अ आप क्या करते हो? सबसे पहले एक स्टेप्स लिख के रखते हो कि वो प्रॉब्लम आप सॉल्व कैसे करोगे? तो वही है अ फाइनाइट सीक्वेंस ऑफ वेल डिफाइंड स्टेप्स और इंस्ट्रक्शंस जिससे आप प्रॉब्लम सॉल्व करते हो या फिर कोई स्पेसिफिक टास्क परफॉर्म करते हो। तो इन सिंपल वर्ड्स एल्गोरिदम होती क्या है? एक स्टेप बाय स्टेप प्रोसीजर जिसमें आप एक इनपुट लेते हो। फिर उस इनपुट को प्रोसेस करके कुछ आउटपुट जनरेट करवा के देते हो। तो वही आप एल्गोरिदम पहले लिखते हो और फिर एल्गोरिदम लिखने के बाद उसी को आप उसका कोड बना सकते हो। सीधा-सीधा कोडिंग नहीं करते आप जाके। पहले आप एक एल्गोरिदम लिखते हो, स्टेप बाय स्टेप प्रॉपर इंस्ट्रक्शंस लिखते हो। फिर उसके बाद ही उस एल्गोरिदम 33:37 को आप कोड में कन्वर्ट करते हो आगे जाके। एल्गोरिदम्स की क्यों जरूरत है? क्योंकि प्रॉब्लम सॉल्विंग के लिए आपको एक सिस्टमैटिक अप्रोच मिलता है यहां पे। फिर उसके बाद प्रोग्राम एफिशिएंसी और परफॉर्मेंस भी आपका इंप्रूव होता है। और करेक्ट और ऑप्टिमाइज सॉलशंस आप डेवलप कर सकते हो। क्योंकि आप अलग-अलग टाइप के एल्गोरिदम्स देख सकते हो। एल्गोरिदम समझ सकते हो कि क्या ये एल्गोरिदम ऑप्टिमल स्यूशन दे रहा है। क्या ये एल्गोरिदम फास्ट काम करेगा? आप अलग-अलग एल्गोरिदम्स बना के उन्हें कंपेयर कर सकते हो। कंप्यूटर प्रोग्रामिंग और सॉफ्टवेयर डेवलपमेंट का फाउंडेशन होता है ये। ये एल्गोरिदम बनने के बाद ही आप आगे कोडिंग सॉफ्टवेयर डेवलपमेंट वगैरह कर सकते हो। कैरेक्टरिस्टिक्स क्या है एल्गोरििदम के? सबसे पहले है इनपुट। अब इनपुट हो भी सकता है या नहीं भी हो सकता है। जैसा मान लो अगर आप कोई प्रोग्राम बना रहे हो जिसमें दो नंबर्स का कंप्यूटेशन करोगे। आप उसका एडिशन करोगे और वो दो नंबर्स खुद आपने ही कोड में अगर शुरुआत में लिख दिए कि दो नंबर्स हैं a और b उनकी ये ये वैल्यू है और फिर उन दोनों का एडिशन करेंगे और फिर वो डिस्प्ले कर देंगे। तो वो आउटपुट में 34:37 आप दे रहे हो सम लेकिन इनपुट यूजर से आप कुछ नहीं ले रहे। तो ऐसा भी हो सकता है या फिर आप यूजर से ही दो नंबर्स का इनपुट ले लो और फिर उसका सम करके बताओ। तो इसलिए यहां पे लिखा है ज़ीरो और मोर इनपुट्स। ऐसा भी हो सकता है कि इनपुट नहीं भी हो सकता है एल्गोरिदम में आउटपुट लेकिन कंपलसरी है एक आउटपुट तो बिल्कुल होना चाहिए एटलीस्ट वन आउटपुट अह शुड बी प्रोवाइडेड और फिर डेफिनेटनेस होनी चाहिए हर एक स्टेप क्लियर और अनअ्बिग्यूस होना चाहिए अन्ंबिग्वस का मतलब है कि उसमें ए्बिग्विटी नहीं चाहिए क्लियर होना चाहिए ऐसा नहीं कि एक चीज दिख रही है उससे अलग-अलग मीनिंग्स बन सकते हैं। अन्ंबिग्वस का मतलब होता है एक ही मीनिंग होना चाहिए उस चीज का जो भी लिखी जा रही है। फाइनाइनाइटनेस एक फाइनाइट नंबर ऑफ़ स्टेप्स के बाद टर्मिनेट हो जाना चाहिए। ऐसा नहीं कि इनफिनिट वह लूप चलती जा रही है। रुक ही नहीं रहा आपका एल्गोरिदम। ऐसा नहीं चाहिए। इफेक्टिवनेस चाहिए। हर स्टेप सिंपल और एग्जीक्यूटेबल होनी चाहिए। तो ये चीजें हैं कैरेक्टरिस्टिक्स है एक एल्गोरिदम के। तो एक सिंपल बेसिक स्ट्रक्चर भी देख लो। इनपुट एक्सेप्ट करो। फिर उस इनपुट को प्रोसेस 35:38 करो और आउटपुट दे के लास्ट में टर्मिनेट कर दो। ठीक है? एक सिंपल एल्गोरिदम टू फाइंड द सम ऑफ़ टू नंबर्स। कैसे करोगे? आप पहले एक स्टेप लिख दो। अ स्टार्ट कर दो पहले। फिर उसके बाद अ रीड टू नंबर्स। A एंड B. फिर उसके बाद उन दोनों का सम कंप्यूट कर दो। कंप्यूट द सम ऑफ़ A एंड B. 36:17 और फिर जो आपने कंप्यूट किया हुआ सम है वो उसको डिस्प्ले कर दो। डिस्प्ले द सम ऑफ़ A एंड B और बस हो गया आपका एल्गोरिदम खत्म। स्टॉप कर दो उसको। ठीक है? तो सिंपल इनपुट लो और प्रोसेस करो और आउटपुट दो। ये सिंपल चीजें होनी चाहिए आपके एल्गोरििदम के अंदर। एडवांटेजेस क्या है एल्गोरििदम के? ये इजी टू अंडरस्टैंड और इंप्लीमेंट होते हैं। लॉजिकल एरर्स आपको पहले समझ में आ जाती है। सिंटेक्स एरर वगैरह वो कोडिंग में है। वो कोडिंग में आप देखो। लेकिन अगर आपका लॉजिक ही सही नहीं है। आपको पता ही नहीं है कि अगर मान लो कोई मैं सर्च एल्गोरिदम लिख रहा हूं बाइनरी सर्च का। उसका मुझे लॉजिक ही पता नहीं है तो मैं कोड कैसे लिखूंगा? इसलिए पहले आप एल्गोरिदम लिखते हो। उसके पीछे का लॉजिक समझते हो वो काम कैसा करता है? फिर आप कोडिंग की तरफ जाते हो। लैंग्वेज इंडिपेंडेंट है। इसमें आपको कुछ लैंग्वेज में लिखना नहीं पड़ता। एल्गोरििदम आपके खुद के पर्सनल लैंग्वेज में आप लिख सकते 37:18 हो। प्रॉब्लम सॉल्विंग की एफिशिएंसी इससे बढ़ जाती है और ये एक ब्लूप्रिंट की तरह काम करता है प्रोग्राम डेवलपमेंट के लिए। नेक्स्ट है एप्लीकेशनेशंस क्या है? एल्गोरििदम्स के हर जगह पे एप्लीकेशनेशंस हैं इसके। जहां पे भी आप कोड कर रहे हो कोई चीज आप एल्गोरिदम बना के कर सकते हो। सर्चिंग या सॉर्टिंग के एल्गोरििदम्स होते हैं। डीबीएमएस में एल्गोरिदम्स लगते हैं। कंप्यूटर नेटवर्क में, एआई में, ओएस में, डेटा कंप्रेशन, इंक्रिप्शन में हर जगह आपको एल्गोरििदम्स का यूज़ करना पड़ेगा। अब स्पेस कॉम्प्लेक्सिटी की बात करते हैं। तो देखो स्पेस कॉम्प्लेक्सिटी का मतलब है टोटल अमाउंट ऑफ़ मेमोरी जो एल्गोरिदम को लगती है एग्जीक्यूट होने के लिए सक्सेसफुली। एज़ अ फंक्शन ऑफ़ द इनपुट साइज़ M. अब कुछ ना कुछ इनपुट आएगा। आप एल्गोरिदम को कुछ ना कुछ इनपुट दोगे। एक सिंपल मैं एग्जांपल देता हूं आपको जो मैं हमेशा देता रहूंगा। जैसा मान लो हम ना इनपुट में एक अरे देते जाएंगे। अब नंबर ऑफ एलिमेंट्स देंगे और जो आउटपुट में हमको मिलने वाला है वो एलिमेंट्स जो भी है ना उनका सम मिलेगा। जैसा मान लो मैंने एक अरे 38:19 दे दी जिसके अंदर ये पांच एलिमेंट्स हैं। ओके? तो जो मुझे आउटपुट चाहिए मुझे आउटपुट इन सबका सम चाहिए। 1 + 2 + 3 + 4 + 5 ये मेरा मुझे आउटपुट चाहिए। अब एल्गोरिदम को मैं जब इनपुट दूंगा तो जैसा मेरा इनपुट ज्यादा रहेगा तो एल्गोरिदम को ज्यादा कंप्यूटेशन करना पड़ेगा। अगर ये ज्यादा नंबर्स होंगे मैंने मान लो 100 नंबर दे दिए तो एल्गोरिदम को 100 नंबर्स का एडिशन करना पड़ेगा। अगर मैंने दो नंबर दिए तो उसको दो का एडिशन करना पड़ेगा। तो इनपुट के बेसिस पे जो है ना एल्गोरिदम को काम करना पड़ता है। तो वही है स्पेस कॉम्प्लेक्सिटी का मतलब है कि उसको टोटल मेमोरी कितनी लगती है एल्गोरिदम को काम करवा के देने के लिए इनपुट के बेसिस पे। ये चीज समझो आप। ये मेजर करता है कितनी मेमोरी एल्गोरिदम कंज्यूम करता है आपकी। अ इंक्लूडिंग मेमोरी यूज्ड फॉर वेरिएबल्स, डेटा स्ट्रक्चर, फंक्शन, कॉल्स एंड ऑिलरी स्टोरेज। अब ऑलरेडी मेमोरी तो उसमें होगी। अ जैसा मान लो अगर मैंने कुछ अ वेरिएबल्स असाइन करके रखे। 39:19 ऐसा मैं जस्ट एग्जांपल दे रहा हूं। मैंने कुछ भी कांस्टेंट वेरिएबल्स असाइन करके रख दिए उसमें। कुछ इनिशियलाइजेशन करके रख दिया मैंने। तो इनकी मेमोरी तो है ही है उसके पास ऑलरेडी। इसके अलावा अब ये जो भी मैं इनपुट वगैरह दे रहा हूं वो भी मेमोरी आएगी। ठीक है? तो उसके बेसिस पे जो है ना स्पेस कॉम्प्लेक्सिटी बताई जाती है। जो भी चीजें हैं जो भी स्पेस उसको यूज़ करना पड़ रहा है डेटा स्ट्रक्चर्स, वेरिएबल्स, फंक्शन, कॉल्स वगैरह के लिए वो सबके बेसिस पे आप बताते हो कि ये एल्गोरििदम की इतनी स्पेस कॉम्प्लेक्सिटी है। उसको इतनी मेमोरी लगने वाली है काम करने के लिए। स्पेस कॉम्प्लेक्सिटी क्यों जरूरत है? इससे आपको ना मेमोरी यूसेज एक्चुअल मेमोरी यूसेज समझ में आता है आपके एल्गोरिदम का। इससे फिर आप मेमोरी एफिशिएंट सॉलशंस ले सकते हो। आपने मान लो चार एल्गोरिदम बनाए सेम चीज के लिए। इसमें पता चल रहा है इसकी स्पेस कॉम्प्लेक्सिटी कम है। इसकी ज्यादा है। तो आप जिसकी स्पेस कॉम्प्लेक्सिटी कम है और जो अच्छे से काम करवा के दे रहा है वो यूज़ करोगे ना फिर। फिर ये इंपॉर्टेंट है जब आप लार्ज डेटा सेट्स या फिर मेमोरी कंस्ट्रेंट सिस्टम्स में काम कर रहे हो। मेमोरी कंस्ट्रेंट मतलब जहां पे मेमोरी जो 40:20 है ना आपकी लिमिटेड होती है या फिर डेटा सेट बहुत बड़ा है। अब इतना डेटा सेट है। इतनी ऑलरेडी स्पेस लगने वाली है तो आपको इधर-उधर स्पेस बचानी पड़ेगी ना। तो वहां पे स्पेस कॉम्प्लेक्सिटी कम करना पड़ता है फिर आपको। तो आप अलग-अलग एल्गोरिदम्स को कंपेयर कर सकते हो मेमोरी रिक्वायरमेंट्स के बेसिस पे। कंपोनेंट्स क्या होते हैं? स्पेस कॉम्प्लेक्सिटी में दो कंपोनेंट्स होते हैं। देखिए एक फिक्स्ड पार्ट होता है और एक वेरिएबल पार्ट होता है। फिक्स्ड पार्ट मतलब वो मेमोरी जिसको इनपुट से कुछ लेना देना नहीं है। जैसा मैंने एग्जांपल दिया था पिछला वाला। ये देखो अरे दी मैंने ये। अब मान लो उस कोड के उस एल्गोरिदम के अंदर ये इंट a = 6 एक इंटीजर है। सिक्स उसकी वैल्यू है। एक इंटीजर b है। उसकी वैल्यू 10 है। क्या इसको फर्क पड़ने वाला है इस इनपुट से कुछ? इनपुट पांच एलिमेंट्स का रहने दो, 10 का रहने दो, 100 का रहने दो। इसको पर्सनली कुछ लेना देना नहीं है उससे। इसको उसके साथ कुछ मिलके काम नहीं करना है। ओके? जब मान लो मुझे सम करना है। ओके? इन सबका एडिशन करना है। दैट इज़ सम। तो वो एडिशन वाला जो फंक्शन रहेगा उसको इनपुट से 41:21 रिलेशन रहेगा क्योंकि वो इनपुट आने के बाद वो उसके ऊपर काम करने वाला है ना। लेकिन ये जो पार्ट है ये फिक्स्ड पार्ट है। इसको कुछ लेना देना नहीं है उससे। ये कांस्टेंट है। ओके? तो ये फिक्स्ड पार्ट होता है स्पेस कॉम्प्लेक्सिटी में। इसका डिपेंडेंस इनपुट साइज पे कुछ नहीं होता। कॉंस्टेंट, सिंपल सिंपल वेरिएबल्स या फिर प्रोग्राम के इंस्ट्रक्शंस ये सब फिक्स्ड पार्ट है। अब वेरिएबल पार्ट जो इनपुट साइज के ऊपर डिपेंड करता है वो वेरिएबल पार्ट होता है। जैसे अरे, डायनेमिक मेमोरी एलोकेशन, रिकर्शन स्टक वगैरह। जैसा अगर मान लो वो मैं एलिमेंट्स दे रहा हूं एल्गोरिदम को सम करने के लिए उसका टोटल निकालने के लिए। तो अब वो जो टोटल निकालने वाला फंक्शन है वो है ना वेरिएबल पार्ट है। क्योंकि जितना ज्यादा इनपुट आएगा उसको उतना ज्यादा काम करना पड़ेगा। तो वो चेंज होगा। फिर वेरिएबल रहेगा वो। कॉमन स्पेस कॉम्प्लेक्सिटीज देख लेते हैं। तो यह आप कई बार देखोगे अभी स्पेस कॉम्प्लेक्सिटीज, टाइम कॉम्प्लेक्सिटीज़, टाइप्स ऑफ कॉम्प्लेक्सिटीज़ सब सेम चीज़ हैं। वही वही रिपीट होने वाली है। कॉन्स्टेंट स्पेस है सबसे पहले। ये कॉन्स्टेंट स्पेस। अभी ये जो आपको ये O 42:23 दिखाई दे रहा है ना, ये एक असिंटोटिक नोटेशन है। वो आगे मैं आपको अच्छे से एक्सप्लेन करूंगा। बट कॉम्प्लेक्सिटी जब भी बतानी रहती है ना, इस तरीके से दिखाई जाती है। ये ओ सिंबल यूज़ करके। बिगो ऑफ़ वन है। बिगो ऑफ़ वन है कांस्टेंट कॉम्प्लेक्सिटी। कॉनंस्टेंट का मतलब कांस्टेंट स्पेस कॉम्प्लेक्सिटी। उसका मतलब है कि मेमोरी रिक्वायरमेंट कांस्टेंट रहती है। रिगार्डलेस ऑफ़ इनपुट साइज। इनपुट पांच आने दो। इनपुट जनरली n से डिनोट किया जाता है। n फाइव रहने दो या n 200 रहने दो। स्पेस कॉम्प्लेक्सिटी सेम ही रहने वाली है। क्योंकि स्पेस कॉम्प्लेक्सिटी को लेना देना ही नहीं है कुछ इनपुट से। एग्जांपल दिया हुआ है यूजिंग अ फ्यू वेरिएबल्स टू स्टोर वैल्यूज़। मतलब अह फ़्यू वेरिएबल्स हैं बस उसमें। इंट a = 5 इंट b = c अह थ्री इंट c = a + b और मान लो मैं इसको प्रिंट प्रिंट कर दे रहा हूं a + b को तो इसमें इनपुट का कुछ लेना देना है क्या? नहीं। इनपुट अगर ले भी रहा हूं ना मैं तो वो एल्गोरिदम जो है अ कॉन्सेंट स्पेस कॉम्प्लेक्सिटी का रहने वाला है। 43:23 क्योंकि ये एग्जीक्यूशन के लिए उसको इनपुट पे उसका डिपेंडेंस नहीं है। इनपुट का जब काम नहीं लगने वाला है कुछ तो फिर आप बोलोगे स्पेस कॉम्प्लेक्सिटी कांस्टेंट रहती है। बी गो ऑफ़ वन। अब है लॉगरिथमिक स्पेस। लॉगरिथमिक स्पेस का मतलब है मेमोरी जो है ना लॉगरथमिकली ग्रो करती है इनपुट साइज से। बाइनरी सर्च में वो होता है। बाइनरी सर्च क्या होता है? मैं सिंपल तरीके से एक्सप्लेन करता हूं। देखो एक अरे है। ओके? सॉर्टेड अरे होती है एक्चुअली वो। 43:56 ठीक है? ये अरे मैंने एक बना दी। अभी मैं इसमें बाइनरी सर्च करूंगा। अ मतलब मुझे सर्च करना है कोई एलिमेंट। ठीक है? मुझे ना 70 एलिमेंट इसके अंदर कहीं है क्या? सर्च करना है। इसको बस ना आप ऊपर ऊपर से समझो। इसके पीछे का जो भी लॉजिक वगैरह है वो अगले चैप्टर में हम देखेंगे बाइनरी सर्च के। बट अभी मैं क्या बता रहा हूं आपको? पहले मैंने क्या बोला था? लीनियर सर्च कैसे काम करता है? 70 मुझे ढूंढना है। मैं हर इसके ऊपर जाके चेक करता हूं कि यस कि ये 70 है क्या? नहीं है। फिर मैं इस पे जाता हूं। इस पे जाता हूं। जाऊंगा जाऊंगा जाऊंगा। फिर मैं लास्ट में जब यहां पे आऊंगा तब मुझे वो की मिलेगी। मतलब मुझे इतने सारे चीजें देखना पड़ता है। तब जाके मुझे लास्ट में वो मिलता है। तो ये क्या हो रहा है? जितना इनपुट है उतना मुझे काम करना पड़ रहा है। लेकिन इसमें कैसा है? लॉग इन में ऐसा नहीं होता। यहां पे अ जो मेमोरी है वो इनपुट साइज से लॉगरिथमिकली ग्रो होती है। क्योंकि देखो अ बाइनरी सर्च क्या करता है? ये जो अरे होती है इसके मिडिल में जाके पहले देखता है कि वो एलिमेंट है क्या? मतलब 40 से चेक करता है 44:59 वो 40 ही है क्या आपकी? नहीं है ये तो। फिर उसको लेकिन ये समझ में आ जाता है कि 40 जो है ना 70 से कम है। इसका मतलब है कि यहां का जो पार्ट है इसके अंदर तो एलिमेंट रहने ही नहीं वाला है। तो जगह पे जो है ये इतनी मेमोरी वो स्टोर ही नहीं कर रहा। आधी मेमोरी हटा दी ना उसने। तो ये इस तरीके से जो मेमोरी हटती जाती है ना तो वो लॉगरिथमिकली ग्रो कर रही है। ऐसा आप बोलते हो। अभी यहां पे इनपुट साइज कितना था? ये सात एलिमेंट्स दिखाई दे रहे हैं ना आपको। लेकिन अ इनपुट साइज यहां पे कितना है? तीन ही है। क्योंकि ये शुरू का तो हट ही गया सीधा। तो यहां पे तीन ही आपको दिखाई दे रहे हैं। अ सॉरी मैं बोल रहा हूं इनपुट साइज तीन है। इनपुट साइज तीन नहीं है। इनपुट साइज सेवन था क्योंकि उसमें सेवन एलिमेंट्स थे। लेकिन अभी आपको यहां पे तीन ही एलिमेंट्स दिखाई दे रहे हैं। क्योंकि अगर आप log भी निकाल के देखोगे log 7 तो करीब-करीब 2.8 के आसपास कुछ आता है व्हिच इज़ ऑलमोस्ट इक्वल टू 3। तो इसलिए ये तीन हो गई है। ठीक है? आगे फिर से जब log का मैं एक्सप्लेन करूंगा तब आप को अच्छे से समझेगा। अभी भी नहीं भी समझा होगा तो। बट 46:00 इतना ही मुझे बताना है कि यहां पे आपका जो इनपुट है वो अ इनपुट आपका जो है उसके बेसिस पे जो स्पेस होती है ना वो उतनी ज्यादा नहीं होती जितनी अभी आप आगे देखोगे उसमें होगी लीनियर स्पेस में। अब लीनियर स्पेस में क्या होता है? मेमोरी ग्रोस डायरेक्टली प्रपोर्शनल टू इनपुट साइज। जितना इनपुट होगा उतनी मेमोरी इसमें स्टोर की जाएगी। जैसा स्टोरिंग n एलिमेंट्स इन एन अरे। मैंने सीधा-सीधा इनपुट में 10 एलिमेंट्स दे दिए और बोला कि ये 10 एलिमेंट्स को एक अरे के अंदर स्टोर करो। तो मतलब मैं क्या बोल रहा हूं? ये 10 एलिमेंट्स अरे में स्टोर करो। मतलब वो एल्गोरिदम को अब 10 एलिमेंट्स को स्टोर करना पड़ेगा। मतलब मैंने दिए 10 एलिमेंट उसको स्टोर करना पड़ रहा है 10 एलिमेंट्स। यहां पे मैंने दिए थे सात एलिमेंट लेकिन वो स्टोर कितने कर रहा है? सिर्फ तीन एलिमेंट। तो ये चीज होती है इसमें। अगर आप रिकर्सिव इंप्लीमेंटेशन कर रहे हो इसका तो ये सात के तीन हो गए यहां पे। बिगो ऑफ़ log n यहां पे 10 के 10 उसको स्टोर करना पड़ रहा है। बिगो ऑफ़ n और वहां पे तो कुछ स्टोर नहीं करना पड़ रहा था उसको। इसलिए वो 47:00 बिगो ऑफ़ वन था कॉन्स्टेंट कॉम्प्लेक्सिटी में। फिर उसके बाद क्वाड्रेटिक स्पेस है। अब ये तो मेमोरी यहां पे स्क्वायर ऑफ़ द इनपुट साइज से ग्रो होती है। मतलब मान लो मैंने अगर n जो है ना इनपुट दिया हुआ है तो स्पेस कॉम्प्लेक्सिटी जो है ना n² हो जाती है। उसको उल्टा डबल उसका स्क्वायर स्टोर करना पड़ता है। जैसा 2D मैट्रिक्स ऑफ़ साइज़ N * n ओके? तो अगर आपने n दिया तो वो n * n अंदर स्टोर करेगा। तो स्पेस कॉम्प्लेक्सिटी बिगो ऑफ़ n² है। फिर उसके बाद एक्सप्पोनेंशियल स्पेस है 2 पावर n यहां पर मेमोरी रिक्वायरमेंट डबल होती है विद इंक्रीज इन इनपुट साइज। अगर मान लो मैंने अ इनपुट दिया चार तो फिर अंदर स्पेस कितनी स्टोर होने वाली है यहां पे? 2 टू द पावर 4 2 टू द पावर 4 मतलब 16 कुछ इस तरीके से। अगर मैंने पांच दिया तो फिर 2 टू द पावर 5 32 हो जाएगा। इस तरीके से स्टोर की जाएगी। तो यहां पे पांच है तो यहां पे 32 देखो कितना ज्यादा इनक्रीस आपको देखने को मिल रहा है वहां पे। पिछले 48:01 वाले में अगर पांच होता यहां पे अगर आप पांच इनपुट देते हो तो स्टोर कितना हो रहा है वो? 25 यहां पे अगर आप 10 देते हो तो 10 का 10 स्टोर हो रहा है। यहां पे आप सात दे रहे हो तो तीन स्टोर हो रहे हैं सिर्फ। और यहां पे आप अगर 500 भी देते हो ना तब भी वो स्टोर कुछ करने ही नहीं वाला है। इसलिए उसकी कांस्टेंट कॉम्प्लेक्सिटी है। ठीक है? तो ये एक्सप्पोनेंशियल स्पेस का यही है। मेमोरी रिक्वायरमेंट डबल होती है विथ ये इंक्रीज़ इन इनपुट साइज़। इसका एग्जांपल है कुछ ऐसे रिकर्सिव एल्गोरिदम्स जो पूरे पॉसिबल कॉम्बिनेशंस को स्टोर करते हैं। एग्जांपल देख लो। रीड n नंबर्स इंटू एन अरे। ये मैंने यही बोला। मैंने आपको n नंबर्स दिए। मैंने आपको 10 नंबर्स दिए और एल्गोरिदम को बोला कि ये 10 एलिमेंट स्टोर कर दे अरे में। तो उसको 10 एलिमेंट्स मतलब जितने n है उतने एलिमेंट्स स्टोर करना पड़ रहा है। तो उसकी स्पेस कॉम्प्लेक्सिटी उस हिसाब से बढ़ेगी। अगर मैं n = 100 दे रहा हूं तो उसको 100 एलिमेंट स्टोर करना पड़ेगा। n = 1000 दे रहा हूं तो 1000 स्टोर करना पड़ेगा। तो इसलिए उसकी जो कॉम्प्लेक्सिटी है बिगो ऑफ़ n होती है। अभी 49:02 तक आपको कुछ नहीं समझा तो बिल्कुल आप टेंशन मत लो क्योंकि इसके बाद फिर से मैं कॉम्प्लेक्सिटी एक्सप्लेन करने वाला हूं। दो बार एक बार टाइम कॉम्प्लेक्सिटी और एक बार इन टोटल सारी कॉम्प्लेक्सिटीज़। फिर उसके बाद तो ये असिं्टोटिक नोटेशन जो है बिग वो उसको भी अलग से एक्सप्लेन करना है। तो नहीं समझा तो कोई प्रॉब्लम नहीं। ये रिपीट होने वाला है। तो फिर इसके ग्रोथ का भी यहां पे आपको डायग्राम बनाकर दिखाया हुआ है। बिगो ऑफ़ वन जो है यहां पे दिख रहा है आपको कॉन्सेंट कॉम्प्लेक्सिटी है। यहां पे जैसे एलिमेंट्स ग्रो हो रहे हैं। मतलब आपका n n जैसे-जैसे ग्रो हो रहा है ना वैसा-वैसा मेमोरी कितनी ग्रो होती है ये बता रहा है। तो देखो ये n जैसे ग्रो हो रहा है तो ये पूरा कांस्टेंट है बिगो ऑफ़ वन। ये ग्रो नहीं हो रही है इसकी स्पेस। क्योंकि इसका लेना देना ही नहीं है ना इनपुट से। तुम इनपुट 2000 दो 5000 दो 10000 दो। उसको लेना ही नहीं देना ही नहीं है। इसलिए वो स्पेस उसकी ग्रो होने ही नहीं वाली है। लेकिन बिगो ऑफ़ लॉग इन का कैसा है? ये थोड़ा सा ग्रो होता है। देखो ज्यादा ग्रोथ भी नहीं है इसकी। बहुत थोड़ी सी ग्रोथ है। क्योंकि अगर आप अ आठ एलिमेंट्स देते हो तो वो स्टोर करता है तीन। क्योंकि log 8 जो है वो है तीन। अगर मान लो मैंने 16 एलिमेंट्स दिए तो log 16 50:05 होता है चार। अगर 32 दिए मैंने। ये log टू द बेस 2 है तो फिर ये स्टोर करेगा पांच। इस तरीके से। ठीक है? सो लॉग ऑफ़ 32 टू द बेस 2 इज 5 मतलब 32 एलिमेंट्स इनपुट पर डाल रहा हूं मैं। लेकिन वो स्टोर सिर्फ पांच कर रहा है। इसलिए आपको ज्यादा ग्रोथ नहीं दिख रही है स्पेस में। इनपुट जबकि ग्रो हो रही है आपकी लेकिन स्पेस में ग्रोथ ज्यादा नहीं है स्पेस कॉम्प्लेक्सिटी में। वही अगर आप बिगो ऑफ़ n देखोगे तो ये कौन सी कॉम्प्लेक्सिटी है? ये लीनियर कॉम्प्लेक्सिटी है। इसका सीधा-सीधा मतलब है। जितना इनपुट दोगे उतनी स्पेस कॉम्प्लेक्सिटी बढ़ने वाली है। यहां पे भी n यहां पे भी n। ऐसा आप याद रख सकते हो। अगर मैंने यहां पे 100 एलिमेंट्स दिए इनपुट में तो यहां पे भी कितने बढ़ने वाले हैं? 100 ही बढ़ने वाले हैं। यहां पे लेकिन 32 थे तो फाइव हो रहा था। ऐसा हो रहा था। और बिगो ऑफ़ n² ये तो उल्टा ज्यादा आपकी स्पेस कॉम्प्लेक्सिटी बढ़ने वाली है। एलिमेंट्स जैसे-जैसे बढ़ेंगे जैसे मान लो एलिमेंट अगर पांच बढ़ गए लेकिन कॉम्प्लेक्सिटी कितने होने वाली है? वो 25 क्योंकि स्क्वायर में स्टोर करती है वो। और ये 2 टू द पावर n ये तो उससे भी ज्यादा 51:06 क्योंकि ये एक्सप्पोनेंशियल है। अगर एलिमेंट्स पांच है तो ये 2 टू द पावर 5 हो जाता है। 32 इस तरीके से एडवांटेजेस क्या है स्पेस कॉम्प्लेक्सिटी एनालिसिस के आपको मेमोरी यूसेज के बारे को आप ऑप्टिमाइज कर सकते हो। एक बार समझ में आया कि ये एल्गोरिदम ज्यादा मेमोरी यूज़ कर रहा है तो आप उसको बेटर बनाओगे। फिर लार्ज स्केल एप्लीकेशनेशंस के लिए यूज़फुल है। एल्गोरिदम्स कंपेयर करने के लिए यूज़फुल है। और ओवरऑल सिस्टम परफॉर्मेंस में इंप्रूवमेंट आपको मिलेगी इससे। अब आते हैं टाइम कॉम्प्लेक्सिटी पे। देखो स्पेस कॉम्प्लेक्सिटी में स्पेस से रिलेटेड चीज चीजें थी। मेमोरी कितने लगने वाली है आपको? अब यहां पे टाइम कितना लगने वाला है ये आप देखते हो। टाइम कॉम्प्लेक्सिटी मतलब द अमाउंट ऑफ़ टाइम द एल्गोरिदम टेक्स टू एग्जीक्यूट एज़ अ फंक्शन ऑफ़ द इनपुट साइज़ n। जो इनपुट साइज़ n दिया आपने उसके बेसिस पे कितना टाइम लगेगा वो टाइम कॉम्प्लेक्सिटी में आपको दिखाना है। तो ये डिस्क्राइब करता है हाउ द नंबर ऑफ़ ऑपरेशंस परफॉर्म्ड बाय एन एन एन एन एन एन एन एन एन एन एल्गोरिदम ग्रोस एज़ द इनपुट साइज़ इंक्रीज़। 52:07 टाइम कॉम्प्लेक्सिटी की अब क्यों जरूरत है? वही है। आप एफिशिएंसी कंपेयर कर सकते हो अलग-अलग एल्गोरिदम्स की। जो सब में कम टाइम ले रहा है, आप उसको यूज़ करोगे फाइनली। ये परफॉर्मेंस ऑफ़ एन एल्गोरिदम प्रेडिक्ट करता है लार्ज इनपुट के लिए। अगर मान लो बहुत बड़ा इनपुट दिया तो फिर ये कितना टाइम लेगा ये एल्गोरिदम? बहुत टाइम ले रहा है तो क्या मतलब आ रहा है फिर उसका? ये इससे आप मोस्ट सूटेबल एल्गोरिदम सेलेक्ट कर सकते हो और एग्जीक्यूशन टाइम कम होगा। परफॉर्मेंस भी आपकी इंप्रूव होगी। असिं्टोटिक नोटेशन की अभी बात करते हैं। तो देखो टाइम कॉम्प्लेक्सिटी को ना बिग ओ नोटेशन से जो है जनरली एक्सप्रेस किया जाता है जो अपर बाउंड ऑफ़ एल्गोरिदम्स रनिंग टाइम बताता है। अब ये अपर बाउंड क्या है ये मैं आगे एक्सप्लेन करूंगा जब मैं अभी को बताता हूं। बट नोटेशन ये जो है अ यूज़ करते हो टाइम कॉम्प्लेक्सिटी दिखाने के लिए। इतना अभी के लिए समझ लो। तो कॉमन टाइम कॉम्प्लेक्सिटीज़ वही है। सबसे पहले कॉन्स्टेंट टाइम है बिगो ऑफ़ वन जो हमने स्पेस कॉम्प्लेक्सिटी में भी देखा था। एग्जीक्यूशन टाइम कांस्टेंट रहेगा रिगार्डलेस ऑफ द इनपुट साइज। इनपुट साइज कितनी भी रहने दो 1000, 2000, 10000 आपकी 53:08 टाइम कॉम्प्लेक्सिटी जितनी है उतनी ही रहने वाली क्योंकि उसका इनपुट से कुछ लेना देना ही नहीं है। इनपुट को यूज़ नहीं करने वाला है आपका एल्गोरिदम। एक्सेसिंग एन एलिमेंट ऑफ़ एन अरे यूजिंग इट्स इंडेक्स। तो अगर मान लो एक अरे है जिसके अंदर 1000 एलिमेंट्स भी है। पर भी आप उस पे अगर उसका इंडेक्स दोगे तो वो इंडेक्स पे डायरेक्टली उसको जाके एक्सेस कर लेगा। उसको लीनियरली सर्च नहीं करना पड़ता। अगर लीनियर सर्च करना पड़ता एक एलिमेंट पे जाना है फिर दूसरे पे जाना है फिर तीसरे पे जाना है तो इस तरीके से अब वो एलिमेंट्स कितने हैं उसके बेसिस पे टाइम लगेगा लेकिन अगर आप उसका इंडेक्स ही बता देते हो कि 73 इंडेक्स के एलिमेंट को एक्सेस करो वो सीधा 73 पे जाके एक्सेस कर लेगा तब उसकी कॉम्प्लेक्सिटी कांस्टेंट रहेगी लॉगरिथमिक टाइम देखो नंबर ऑफ़ ऑपरेशंस जो है लॉगरिथमिकली इंक्रीस होते हैं जैसा जैसा इनपुट साइज ग्रो होता है एग्जांपल है बाइनरी सर्च वही बाइनरी सर्च मैंने आपको पहले भी बताया था आपको फिर से बता दूं हूं। ये देखो ये अरे है। ये एक सॉर्टेड अरे है। अगर लीनियर सर्च यूज़ करोगे तो एक-एक से 54:09 जाओगे। लास्ट में पहुंचने तक बहुत देर हो जाएगी। बाइनरी सर्च क्या करता है? बाइनरी सर्च सीधा-सीधा मान लो मुझे 70 ढूंढना है। तो ये क्या करता है? मिडिल वाले एलिमेंट पे जाता है। उससे कंपेयर करता है। उसको पता चलता है कि 40 इज़ लेस दैन 70। मतलब ये एलिमेंट लेस है। तो इसका मतलब यहां से लेके यहां तक वाला जो पार्ट है यहां पे वो एलिमेंट रहने ही नहीं वाला क्योंकि वो कम है। यही रहेगा राइट साइड में। फिर वो राइट साइड में जाता है और राइट साइड के मिडिल एलिमेंट को उठाता है। मतलब अभी ऑपरेशंस गिनो आप कितने हो रहे हैं ये सर्च करने के लिए। सबसे पहला एक ऑपरेशन हो चुका है। एक ऑपरेशन नहीं एक इटरेशन हुआ। ऐसा आप बोल सकते हो। एक बार हमने ढूंढने की कोशिश की जिसमें हमने ये पार्ट हटा दिया। अब हम दूसरी बार ढूंढने वाले हैं ये वाले पार्ट में 60 देखेंगे 60 भी लेस दैन 70 है। तो इससे ये भी समझ गया कि 60 और ये साइड का जो है यहां पे भी जो है आपका एलिमेंट नहीं है। फिर आप यहां पे जाओगे। अब वही बचा। अब चेक करो 70 तो 70 तो मिल ही गया आपको जो आपको ढूंढना था। तो मतलब पहले ये किया काम फिर सेकंड वाले में ये किया और थर्ड वाले 55:10 में ये किया। मतलब आपको तीसरे इटरेशन पे मिल गया। वही अगर मान लो आप लीनियर सर्च यूज़ करते तो पहले आप यहां जाते। 1 2 3 4 5 6 7 सात इटरेशंस लग जाते हैं आपको। तो देखो सात इसका इनपुट साइज है। जब n इसका सात था तो आपको टाइम कितना लगा टाइम कॉम्प्लेक्सिटी? टाइम कॉम्प्लेक्सिटी आपको लगी log ऑफ़ 7 व्हिच इज़ अ समवट इक्वल टू 2.8 तो आप बोल सकते हो तीन जो आपको तीन ऑपरेशंस लगे। समझ में आया आपको? सात इसके लिए आपको तीन ऑपरेशंस लग गए। तो इसलिए जो टाइम कॉम्प्लेक्सिटी है वो इस बिगो ऑफ लॉग n होती है क्योंकि नंबर ऑफ ऑपरेशंस लॉगरिथमिकली ग्रो करते हैं। अगर मान लो ये सात की जगह 16 होता तब आपको कितने ऑपरेशंस लगते हैं? तब आपको पांच ऑपरेशंस लगते हैं। बिकॉज़ log ऑफ़ 16 इज़ फाइव। लीनियर टाइम। लीनियर टाइम सिंपल है समझने के लिए। एग्जीक्यूशन टाइम सीधा-सीधा जितना 56:10 है उतना होता है। अगर मान लो वही सर्च का मैं आपको एग्जांपल देता हूं। अब मैं इसमें लीनियर सर्च लगाऊंगा। तो इसमें कितने क्या इनपुट साइज है इसका? अगर मैं इनपुट देता हूं एल्गोरिदम को तीन और तीन यहां पे छह। तो यहां पे मैं छह एलिमेंट्स अगर दे रहा हूं और मैं बोल रहा हूं अ नाइन ढूंढने के लिए। तो अब नाइन लास्ट में वो ढूंढते जाएगा जाएगा जाएगा और लास्ट में उसको मिलेगा। तो जितना अ इनपुट है उतने ही एलिमेंट्स अ जो है उसको सर्च करना पड़ रहा है। छह एलिमेंट्स हैं तो उसको छह बार सर्च करना पड़ गया लीनियर सर्च में। अब आप ऐसा भी बोल सकते हो कि अगर मैं टू सर्च करने को बोलूं तो तो शुरुआत में ही मिल जाएगा। टू शुरुआत में ही मिल गया तो तो इवन दो उसका साइज सिक्स एलिमेंट्स का था। पहले ही एलिमेंट पे मिल गया। ऐसा लग सकता है आपको। तो वो बेस्ट केस हो जाती है वो। अब उसमें भी एनालिसिस होती है। वर्स्ट केस, बेस्ट केस, बेस्ट केस वही होती है कि पहले ही आपने देखा और पहले ही आपको मिल गया तो उस केस में होगी कॉम्प्लेक्सिटी। बट एवरेज में अगर आप 57:11 देखोगे तब आपको जितने एलिमेंट्स हैं उतने बार ही सर्च करना पड़ता है। इसलिए जो इसकी कॉम्प्लेक्सिटी है बिगो ऑफ़ एन है। और सर्च ना भी बोलूं तो यहां पे एग्जांपल आप ट्रेवर्सिंग का दे सकते हो कि आपको अगर पूरे एलिमेंट्स ट्रेवर्स करना पड़ रहा है कुछ रीज़न की वजह से या फिर आपको डिस्प्ले करने को बोल दिया मैंने अरे दे दिया और बोला कि ये सारा डिस्प्ले करके बताओ। तो फिर तो आपको सब एक्सेस करना पड़ेगा। तो जितना इनपुट दे रहा हूं उतने आपको अगर ऑपरेशंस करने पड़ रहे हैं तो बोलते हो आप लीनियर टाइम लग रहा है। n अगर सिक्स है और अगर आपको जो ऑपरेशंस करना पड़ रहा है वो भी सिक्स है तब आपकी टाइम कॉम्प्लेक्सिटी हो जाएगी लीनियर बिग गो ऑफ है। अब लीनियरिथम्मिक टाइम है इसमें तो एग्जीक्यूशन टाइम थोड़ा सा फास्ट होता है लीनियर टाइम के मुकाबले में। मतलब इसमें मर्ज सॉर्ट हिप सॉर्ट के एग्जांपल्स दिए हुए हैं। ये उतना भी स्लो नहीं होता अ जितना बिगो ऑफ़ n है। बिगो ऑफ़ n जितने भी ऑपरेशंस नहीं लगते इसको। मतलब अगर मान लो 58:12 सिक्स है तो इसको कितने ऑपरेशंस लगेंगे? 6 * log 6 ये जितना भी आता होगा। ओके? इतने ऑपरेशंस लगेंगे। मर्ज सॉर्ट हिप शॉर्ट याद रख सकते हो। अब क्वाड्रेटिक टाइम। क्वाड्रेटिक मतलब एग्जीक्यूशन टाइम इज़ प्रपोर्शनल टू द स्क्वायर ऑफ़ द इनपुट साइज़। इनपुट आप जितना दोगे अगर मैंने इनपुट दिया n = 5 तो इसको कितना काम लगने वाला है? 5 * 5 व्हिच इज़ 25 ओके? ये है क्वाड्रेटिक टाइप कॉम्प्लेक्सिटी। बबल सॉर्ट सिलेक्शन सॉर्ट इसके एग्जांपल्स हैं। फिर इसके बाद अगर देखें तो एक्सप्पोनेंशियल टाइम है। बिग ओ टू टू द पावर n। नंबर ऑफ़ ऑपरेशन डबल हो जाते हैं विथ ईच इंक्रीज़ इन इनपुट साइज़। जितना आप इनपुट साइज़ में अह इंक्रीस करोगे, नंबर ऑफ़ ऑपरेशन डबल के करीब हो जाएंगे। रिकर्सिव फिबोनाची इसका एग्जांपल है। जैसा मान लो अगर मैंने अ चार ऑपरेशंस दे दिए। चार दे दिए तो ये 16 हो जाएगा। 2 टू द पावर 4 इज़ 16 पांच दिए तो 32 हो जाएगा। छह दिए तो 64 हो जाएगा। सेवन दिए तो 128 हो जाएगा। इस तरीके से 59:14 एंड सो ऑन। ओके? तो देखो ना कितना ज्यादा काम करना पड़ रहा है आपके एल्गोरिदम को। अगर ये कॉम्प्लेक्सिटी मिल गई तो आप सात इनपुट दे रहे हो सिर्फ और उसको 128 ऑपरेशंस करने पड़ रहे हैं। फैक्टोरियल टाइम यह तो सबसे ज्यादा टाइम लेता है। एग्जीक्यूशन टाइम ग्रोस एक्सट्रीमली रैपिडली विद इनपुट साइज जनरेटिंग ऑल परम्यूटेशंस ऑफ़ n एलिमेंट्स। अगर कुछ परम्यूटेशन वाला काम करवा रहे हो आप एल्गोरिदम से कोई n एलिमेंट्स के तो तो उसको nोरियल टाइम कॉम्प्लेक्सिटी लग जाएगी। मतलब अगर सात मैं n दे रहा हूं तो 7ोरियल इतना ज्यादा उसको काम करना पड़ रहा है। एग्जांपल देख लो। फाइंड द लार्जेस्ट एलिमेंट इन एन अरे ऑफ़ n एलिमेंट्स। तो n एलिमेंट्स का मैं अरे दे रहा हूं और बोल रहा हूं इसमें से लार्जेस्ट एलिमेंट ढूंढो। अब एल्गोरिदम को लार्जेस्ट एलिमेंट ढूंढने के लिए सारे एलिमेंट्स में ढूंढना पड़ेगा। सारे एलिमेंट्स सर्च करने पड़ेंगे। 1:00:14 अब अ एल्गोरिदम सब सर्च करेगा और फिर उसमें उसको जो लार्जेस्ट एलिमेंट है वो शो करेगा। बट सब करना पड़ रहा है ना सर्च मतलब जितना इनपुट दे रहा हूं उतना इनपुट पे उसको ढूंढना पड़ रहा है। तो ये सब पे ट्रेवर्स करना पड़ेगा। सबसे पहले तो देखने के लिए कि लार्जेस्ट कौन सा है। इसलिए जितना इनपुट है उतना उसको काम करना पड़ रहा है। इसलिए जो टाइम है वो लीनियर कॉम्प्लेक्सिटी है। आई एम सॉरी टाइम कॉम्प्लेक्सिटी लीनियर है। टाइप्स ऑफ़ टाइम कॉम्प्लेक्सिटी। हां, अब मैं जो आपको बोल रहा था कि अगर मान लो कोई अरे है। ओके? इसमें मैं बोल रहा हूं आपको कोई नंबर ढूंढने के लिए। मैंने आपको बोला सिक्स ढूंढो। तो आप ढूंढना चालू करेंगे। इसमें सबसे पहले वाले एलिमेंट पे जाएंगे। सिक्स पहले ही मिल गया आपको। तो उसी को बेस्ट केस बोलते हो। मिनिमम टाइम रिक्वायर्ड बाय एन एल्गिरिदम फॉर अ गिवन इनपुट। एक ऐसा मैंने इनपुट दिया। अब खैर ये इनपुट बहुत बड़ा भी हो सकता है। 100 एलिमेंट्स का इनपुट है मान लो। तो लेकिन है मेरा जो आंसर है वो पहले पे ही है। तो ये बेस्ट केस कॉम्प्लेक्सिटी हो गई क्योंकि मुझे पहले ही मिल गया वो। उतने 1:01:15 एल्गोरिदम को उतने ऑपरेशंस करना ही नहीं पड़ा। फिर उसके बाद है एवरेज केस। एक्सपेक्टेड टाइम रिक्वायर्ड फॉर अ टिपिकल इनपुट। टिपिकल मतलब जैसे मैं बोल रहा हूं कुछ टू ढूंढ लो या फोर ढूंढ लो। उसको आप एवरेज केस बोलते हो। फिर वर्स्ट केस। वर्स्ट केस मतलब मैक्सिमम टाइम जो आपके एल्गोरिदम को लगने वाला है। जैसे मैंने बोला वन ढूंढो। तो अब वन तो लास्ट में है। तो ये वर्स्ट केस हो गया। क्योंकि उसको पूरा काम करना पड़ेगा आपके की को ढूंढने के लिए। इसमें सबसे कम काम करना पड़ा। इसमें पहले ही उसको मिल गया तो ये बेस्ट केस था। लास्ट में उसको मिल रहा है तो ये वर्स्ट केस है। बीच में कहीं पे मिल रहा है तो वो एवरेज केस है। फिर ऑर्डर ऑफ ग्रोथ भी देख लो। वही सेम चीज है जो पहले हमने देखा था। बस यहां पे ऑपरेशंस लिख दिया। उसमें स्पेस कॉम्प्लेक्सिटी लिखा था पिछले डायग्राम में। जैसे-जैसे आपका इनपुट ग्रो होगा। तो देखो सबसे पहले तो कॉन्सेंट कॉम्प्लेक्सिटी ये ऊपर जा ही नहीं रही। जैसी है वैसी रुकी है। क्योंकि एलिमेंट्स से उसको कुछ लेना देना नहीं है। आप इनपुट बढ़ाते जाओ उससे कुछ फर्क नहीं पड़ता। फिर उसके बाद है बिगो ऑफ़ log n। इसमें आप जैसे कि देख सकते हो ज्यादा ग्रोथ नहीं है। 1:02:16 बहुत ही थोड़ी सी ग्रोथ है ऑपरेशंस में क्योंकि ये भी बहुत स्लोली ग्रो करता है। अगर मान लो अ मैं अ इसका ठीक है? इसके एग्जांपल्स भी देख लेते हैं। देख लेते हैं सब। इसका आप सिंपल एग्जांपल बाइनरी सर्च का याद रखो। आप ये एग्जाम में लिख सकते हो। फिर इसका अपना एक्सेसिंग एन एलिमेंट विद इंडेक्स ऐसा है देखो बिगो ऑफ़ n में तो आप सिंपल लीनियर सर्च का एग्जांपल दे सकते हो। ठीक है? मैं एक-एक से एक्सप्लेन करूंगा। बिग ऑफ़ log n जैसा मैं बोल रहा था। मतलब अगर अह n = 8 है तो ऑपरेशंस कितने लगने वाले हैं आपको? ऑपरेशंस जो आपको लगने वाले हैं वो 8 का लॉग वि इज थ्री इस तरीके से इसलिए ज्यादा ग्रोथ नहीं हो रही। एलिमेंट्स ग्रो होंगे लेकिन इसकी ज्यादा ग्रोथ नहीं होगी। अब ये n के लिए एट के लिए थी तीन ऑपरेशन है। अगर n 16 होता तब बस एक से बढ़ता वो ऑपरेशन चार 1:03:17 हो जाते। अगर ये 32 होता तो ऑपरेशन पांच हो जाते। इसलिए ज्यादा ज्यादा ग्रोथ नहीं है। छोटा सा आपको दिख रहा है यहां पे। ली ये तो सीधा-सीधा बिगो ऑफ़ N का यही है कि ये जितना ग्रो होगा उतना वो ग्रो होगा। दोनों प्रपोर्शनल होते हैं एक दूसरे से। n अगर 50 है, यह 50 है। n 100 है, ये भी 100 है। यह है बिगो ऑफ़ n log n ये लीनियरथमिक टाइम का एग्जांपल था। तो ये इससे थोड़ा सा ज्यादा होता है। ओके? एंड बिगो ऑफ़ n² जिसमें क्वाड्रेटिक टाइम कॉम्प्लेक्सिटी है। बबल सॉर्ट इसका एग्जांपल था। फिर बिगो ऑफ 2 पावर n इसका एग्जांपल है रिकर्सिव फिबोनाची एल्गोरिदम। 1:04:08 ये कुछ-कुछ आप टर्म्स याद रखते जाओ। अगर आप ये टर्म्स एग्जाम में लिखोगे तो एग्जामिनर को लगता है कि आपको आईडिया है उसके बारे में। एग्जांपल्स लिख सकते हो आप। बिगो ऑफ़ n का लीनियर सर्च। फिर बिगो ऑफ़ n² का बबल सॉर्ट। बिगो ऑफ़ n लॉग का आप लिख सकते हो। इसका कीप सॉर्ट मर्ज सॉर्ट वगैरह फिर बिगो ऑफ nियल का अगर आप परम्यूटेशन निकाल रहे हो n एलिमेंट्स का परम्यूटेशन ऑफ़ n एलिमेंट्स तब आपको बिगो ऑफ़ n² की कॉम्प्लेक्सिटी लग जाएगी। ओके? सो लेट्स हैव अ लुक एट द नेक्स्ट वन। एडवांटेजेस ऑफ़ टाइम कॉम्प्लेक्सिटी एनालिसिस। ओके? जस्ट अ सेकंड। यह डायग्राम थोड़ी सी खराब हो गई है। बिगो ऑफ़ n जो है इससे नीचे होना चाहिए बिगो ऑफ़ n log n बिकॉज़ बिगो ऑफ़ n log n को ज्यादा ऑपरेशंस नहीं लगते जितने बिगो ऑफ़ n को लगते हैं। तो ये थोड़ा सा डायग्राम में गलती है। आप इसको ठीक कर लेना। बिगो ऑफ़ n 1:05:08 को ऊपर रखो। बिगो ऑफ़ n log n को उसके नीचे रखो। एडवांटेजेस ऑफ़ टाइम कॉम्प्लेक्सिटी एनालिसिस। इससे एल्गोरिदम एफिशिएंसी आप इवैलुएट कर सकते हो। डिफरेंट एल्गोरिदम्स को कंपेयर कर सकते हो। जिसकी कम टाइम कॉम्प्लेक्सिटी है उसको यूज़ करो आप। फिर स्केलेबिलिटी भी आपको समझ में आती है लार्ज डेटा सेट्स के लिए और ओवरऑल प्रोग्राम परफॉर्मेंस आपका इंप्रूव होता है। स्पेस कॉम्प्लेक्सिटी टाइम कॉम्प्लेक्सिटी दोनों के लिए आप सेम चीजें लिख सकते हो। अब असिं्टिक नोटेशन की बात करते हैं जो मैं पहले आपको बता रहा था बिगोर नोटेशन। तो देखो असिं्टोटिक नोटेशन एक मैथमेटिकल टेक्निक होती है जिससे आप एल्गोरिदम का परफॉर्मेंस पता करते हो। अह इनपुट साइज जब आपका लार्ज बनता जाता है तो कैसा होगा? अब इनपुट साइज बड़ा होता जाएगा तो आपके एल्गोरिदम को भी काम ज्यादा करना पड़ने वाला है। तो वो कैसा ज्यादा करना पड़ेगा वो असिंटोटिक नोटेशंस के थ्रू आप बताते हो। ये एनालाइज़ करता है टाइम कॉम्प्लेक्सिटी और स्पेस कॉम्प्लेक्सिटी एल्गोरिदम्स की विदाउट कंसीडरिंग मशीन डिपेंडेंट फैक्टर्स। यह मशीन के ऊपर डिपेंडेंट नहीं होता कि आपके कंप्यूटर में 1:06:10 कौन सा i3 है, क्या i5 प्रोसेसर है, कौन सा ग्राफिक्स कार्ड है, उसका कुछ लेना देना नहीं है। ये पूरा टाइम और स्पेस कॉम्प्लेक्सिटी के बेसिस पे ही बताया जाता है आपके एल्गोरिदम के। प्रोसेसर स्पीड प्रोग्रामिंग लैंग्वेज का कुछ लेना देना इसमें नहीं है। तो असिं्टोटिक नोटेशन से आप ऐसा पता कर सकते हो। क्यों जरूरत है इसकी? क्योंकि ये एल्गोरिदम की एफिशिएंसी बताता है आपके। अलग-अलग एल्गोरिदम्स आप कंपेयर कर सकते हो। कांस्टेंट्स और लोअर ऑर्डर टर्म्स को यह इग्नोर कर देता है। मतलब इसमें ना आगे-आगे हम जब सॉल्व करेंगे तो कुछ इस तरीके के इक्वेशन बन सकते हैं। 5n² + 3n + 2 तो ये सीधा-सीधा ये कुछ नहीं देखता। ये इसमें देखता है डोमिनेंट टर्म कौन सा है? n² है। तो मतलब आपकी जो टाइम कॉम्प्लेक्सिटी है वो है बिगो ऑफ़ n²। बात खत्म। तो ये कांस्टेंट स्लोअर ऑर्डर टर्म्स को जो है इग्नोर कर देता है और एक मशीन इंडिपेंडेंट एनालिसिस आपको प्रोवाइड करता है। टाइप्स ऑफ असिं्टिक नोटेशंस तीन टाइप के नोटेशन है। बिग ओ नोटेशन जो हम अभी तक देखते आ रहे हैं। फिर ओमेगा और थीटा भी है। वो भी हम देख लेते हैं। तो बिग ओ 1:07:11 नोटेशन क्या है? ये ना अपर बाउंड अ रिप्रेजेंट करता है एल्गोरिदम के ग्रोथ रेट का। वर्स्ट केस टाइम या स्पेस कॉम्प्लेक्सिटी जो एल्गोरिदम को लगेगी जब इनपुट साइज आपका n बड़ा हो जाएगा ये बताता है। इसका मतलब क्या है? डायग्राम देख के आपको समझेगा। तो देखो ये डायग्राम में आपको यहां पे दिखाई देगा ये आपका फंक्शन है। ओके? और जैसा-जैसा इनपुट बढ़ेगा ये मतलब आपका फंक्शन को ज्यादा काम लगने वाला है। क्योंकि इनपुट बढ़ेगा तो आपके एल्गोरिदम को ज्यादा काम करना पड़ता है। तो ये क्या करता है? है बिगो नोटेशन ये अपर बाउंड बताता है। मतलब ज्यादा से ज्यादा काम आपके एल्गोरिदम को इतना ही लगने वाला है। कितना भी इसको काम लग गया ना ये इसके ऊपर नहीं जाने वाला है ये। तो वही इसका मतलब है कि ये अपर बाउंड बताता है एल्गोरिदम के ग्रोथ रेट की। एल्गोरिदम को कितना भी ग्रो होने दो आपके कितने भी ऑपरेशंस कर लेने दो ये इसके ऊपर नहीं जाने वाला क्योंकि ये अपर बाउंड है। तो फंक्शन आपके fn इज़ सेड टू बी बिगो ऑफ़ g ऑफ़ n ये g 1:08:11 ऑफ़ n मतलब आपकी ग्रोथ रेट है। एल्गोरिदम की ग्रोथ रेट बिगो ऑफ़ n बिगो ऑफ़ n² बिगो ऑफ़ n ये जो भी देखा ना अभी ये कुछ भी हो सकता है g ऑफ़ n n होगा n² होगा वन भी हो सकता है कॉन्स्टेंट कॉम्प्लेक्सिटी है तो nोरियल 2 पावर n जो भी हमने अभी तक देखा था log n वो सारी चीजें इफ देयर एग्ज़िस्ट पॉजिटिव कांस्टेंट्स c एंड n0 सच दैट f n इज़ लेस < और इक्वल c g ऑफ़ n ये अह इसके ही बारे में हमने यहां पे लिखा कि ये जो फंक्शन है आपका ये लेस दैन और इक्वल टू ही रहेगा वो cg ऑफ़ n के ये c कोई भी एक कांस्टेंट होता है अ उसके लिए फॉर ऑल n > अ ग्रेटर दैन इक्वल टू n0 n क्या है यहां पे n मतलब इनपुट है सिंपल जो भी आप इनपुट दे रहे हो और n0 मतलब वो इनपुट का बेस लाइन जैसा इनपुट मिनिमम यहां पे दिया हुआ है जैसे समझो n0 = 5 और तो अब इसके आगे के जो इनपुट है ना 1:09:15 उसके ऊपर बेस अह बेस्ड आपको चीज़ें देखनी है। तो अह जब भी n जो है आपका ग्रेटर दैन इक्वल टू n0 रहेगा। उन सबके लिए ही चीजों चीजों के ऊपर आप फोकस करोगे। क्योंकि आप यहां पे देख सकते हो ना ये fn थोड़ा सा ऊपर भी गया है उसके पहले। वो मैटर नहीं करता। उसके पहले छोड़ दो आप। n0 के पहले जो भी हुआ वो छोड़ दो। उसका मतलब है और जो भी चीजें हैं n के आगे से आपको देखना है। अ तो n0 आपने 5 लिया तो n की वैल्यू इसके आगे से ही आप लोगे। इसके आगे से मतलब फाइव भी उसमें पकड़ते हो। 5 6 7 8 वगैरह वगैरह वगैरह और n की जो वैल्यू 1 2 3 वगैरह थी होगी वो आपको छोड़ देना है। वो आपको पकड़ना ही नहीं है। उसका मतलब है। तो ये डायग्राम आप अच्छे से समझ लो। यहां पे आपको दिखाई देगा कि ये अपर बाउंड दिखाता है और जो आपका है फंक्शन वहां पे ग्रो हो रहा है। fn = बिग ओ ऑफ़ g ऑफ़ n ठीक है? नेक्स्ट देखते हैं अभी बिग ओ नोटेशन क्यों यूज़ किया जाता है? क्योंकि ये एल्गोरिदम एफिशिएंसी मेज़ करता है। 1:10:16 वर्स्ट केस परफॉर्मेंस डिस्क्राइब करता है। एल्गोरिदम्स कंपेयर होते हैं यहां पे। मशीन डिपेंडेंट फैक्टर्स जो भी है वो इग्नोर कर देता है। प्रोसेसर की स्पीड, कंप्यूटर कौन से कंपनी का है आपका वो कुछ फर्क नहीं पड़ता यहां पे। ग्रोथ रेट फॉर लार्ज इनपुट्स पे ये सिर्फ फोकस करता है। एडवांटेजेस देख लो। एक स्टैंडर्ड वे है एल्गोरिदम्स कंपेयर करने के लिए। वर्स्ट केस परफॉर्मेंस डिस्क्राइब करता है ये। हार्डवेयर या प्रोग्रामिंग लैंग्वेज से इंडिपेंडेंट है और एफिशिएंट एल्गोरिदम्स आप चूज़ कर सकते हो लार्ज इनपुट्स के लिए। ये बिग ओ नोटेशन पता करने। अब है ओमेगा नोटेशन। पहले वाले में हमने क्या देखा था? अपर बाउंड। अब ये बताता है लोअर बाउंड। लोअर बाउंड। क्यों? क्योंकि आपको पता करना है कि बेस्ट केस कौन सी है? मतलब मिनिमम मेरे एल्गोरिदम को कितना काम करना पड़ेगा वह यह बताता है। वह मैक्सिमम कितना काम करना पड़ सकता है वह बताता है। तो असिंटोटिक नोटेशन है ये लोअर बाउंड रिप्रेजेंट करने के लिए एल्गोरिदम के ग्रोथ रेट को। ये बेस्ट केस कॉम्प्लेक्सिटी बताता है एल्गोरिदम की। जब इनपुट साइज n काफी बड़ा हो जाता है। तो तो 1:11:16 देखो यहां पे आप उल्टा देख रहे हो। पहले ये जो cg ऑफ़ n था ये f ऑफ़ n के ऊपर था क्योंकि वो अपर बाउंड बता रहा था। ये लोअर बाउंड है। लोअर बाउंड का मतलब है कि ये जो इनपुट है ना कितना भी कम होने दो इसके नीचे नहीं आने वाला। अब इनपुट कितना भी कम होने दो आप इसलिए बोल रहे हो क्योंकि आप n0 के ऊपर ही लेते हो ना उसको। इनपुट की बेस लाइन बना दी जाती है n0 से। n मान लो अगर मैंने फाइव रख दिया। तो अभी n जो है वो फाइव के आगे ही रहने वाला है। बिकॉज़ n इज़ > = n0 से वगैरह-वगैरह वगैरह। ठीक है? तो इस इसलिए इसका मतलब है कि ये जो cg ऑफ़ n है इसके नीचे आपका फंक्शन कभी नहीं आने वाला। अब वो ऊपर ही जाता जाएगा। लोअर बाउंड यहां पे सेट कर दी जाती है ओमेगा नोटेशन से। ठीक है? तो फंक्शन आपका omeg ऑफ़ n तब होता है जब fn ग > = cg ऑफ़ n होता है। ठीक है? ये चीज़ याद रखो। पिछले वाले में हमने उल्टा लिखा था। fn जो था वो लेस 1:12:16 < इक्वल टू था। यहां पे fn ग्रेटर दैन इक्वल टू होता है क्योंकि वो ग्रेटर है ना ऊपर जा रहा है fn पिछले वाले में fn नीचे था c g ऑफ़ n ऊपर था ठीक है फॉर ऑल n > = n 0 और ये c एंड n 0 आर कांस्टेंट्स ठीक है तो ये डायग्राम जो है आप अच्छे से याद रखो इसके बाद ओमेगा नोटेशन की क्यों जरूरत है क्योंकि ये मिनिमम रिसोर्सेज डिटरमिन करता है रिक्वायर्ड बाय एन एल्गोरिदम बेस्ट केस परफॉर्मेंस डिस्क्राइब करता है और एल्गोरिदम की एफिशिएंसी यहां से एनालाइज़ होती है और लोअर बाउंड देता है यह ग्रोथ रेट के लिए लोअर बाउंड ये आपको याद रखना है ओमेगा से लोअर बाउंड और वो उससे अपर बाउंड और ये मिनिमम रिसोर्सेज कितने लगने वाले हैं आपको समझ में आ जाते हैं लोअर बाउंड से वहां पे क्या समझ में आता है मैक्सिमम रिसोर्सेज कितने लगने वाले हैं आपको एडवांटेजेस क्या है वही है लोअर बाउंड मिल जाता है आपको बेस्ट केस परफॉर्मेंस आपको एनालाइज़ कर सकते हो आप एल्गोरिदम्स कंपेयर कर सकते हो हार्डवेयर प्रोग्रामिंग लैंग्वेज से कुछ इसका वास्ता नहीं है थीटा नोटेशन अब थीटा क्या है ना 1:13:16 दोनों के बीच में होता है। ये एक अस्पिटोटिक नोटेशन है जो टाइट बाउंड बताता है। पहला वाला क्या था? बिगो नोटेशन वो था अपर बाउंड। उसके बाद लोअर बाउंड और ये है टाइट बाउंड। ये एल्गोरिदम के ग्रोथ रेट का टाइट बाउंड बताता है। ये डिस्क्राइब करता है कि एग्जैक्ट ग्रोथ ऑफ़ एन एल्गोरिदम बाय प्रोवाइडिंग बोथ द अप्पर बाउंड एंड लोअर बाउंड। दोनों यहां पे आपको देखने को मिलेंगे। अप्पर बाउंड और लोअर बाउंड। यहां पे देखो ये जो है आपका फंक्शन ग्रो हो रहा है और अब वो फंक्शन को मिनिमम रिसोर्सेज कितने लगने वाले हैं? इतने और मैक्सिमम रिसोर्सेज कितने लगने वाले हैं? इतने। ये चीज आपको समझ में आनी चाहिए। तो ये दोनों के बीच में fn होता है और ये जो है n0 है। अब ये जो पार्ट आपको दिखाई दे रहा है ना ये वाला ये जो लाइन ड्रॉ की है। अब यहां से आप आगे देखोगे इसके पीछे का रहने दोगे आप। क्योंकि वहां पे यहां से जो है ना अब n आपका हमेशा ग्रेटर दैन इक्वल टू n0 होने वाला है। जैसा मैंने पहले भी आपको बोला था। अगर n इक्वल अह n0 = 5 है तो फिर n जो है 5 6 7 8 ज्यादा ही रहने वाला है हमेशा। 1:14:17 अ हां। तो फंक्शन f n इज़ सेड टू बी θ ऑफ़ n इफ देयर एग्ज़िस्ट पॉजिटिव कांस्टेंट c1 c2 यहां पे अब देखो दोनों के लिए दो कांस्टेंट्स हैं। c1 c2 एंड n0 सच दैट c1 g ऑफ़ nस < = fn एंड fn < = c2gn ठीक है? ये चीज़ याद रखिए आप। पिछले वाले में हमने इतना लिखा था। दूसरे वाले में इतना। अब ये दोनों का मिक्सचर है थीटा नोटेशन के अंदर फॉर ऑल n इज़ > = n0 अगर असिं्टोटिक नोटेशन पे क्वेश्चन आता है आने के बहुत चांसेस है कई बार आता है तो आप ये तीनों ग्राफ्स अच्छे से ड्रॉ करना और थोड़ी सी थ्योरी लिख देना ठीक है थीटा नोटेशन की क्यों जरूरत है क्योंकि ये एग्जैक्ट ग्रोथ रेट बताता है। यह अप्पर और लोअर बाउट्स दोनों प्रोवाइड करता है और एक प्रिसाइज़ एनालिसिस देता है देन अह बिग गो एंड ओमेगा नोटेशंस और एल्गोरिदम्स को आप अच्छे से एक्यूरेटली कंपेयर कर सकते हो। रिलेशनशिप क्या है? O 1:15:19 एंड ओमेगा में। तो देखो F ऑफ़ N जो है आपका अ बिगो ऑफ़ G ऑफ़ N होना चाहिए। और दूसरा भी आपका नहीं सॉरी ओमेगा G ऑफ़ N ठीक है? और अब थी ये दोनों अगर होते हैं ना तभी आपका फंक्शन जो है अ थीटा में होता है। ऐसा आप बोल सकते हो अगर ये दोनों में है तो सो θ ऑफ़ n = biggo ऑफ़ g ऑफ़ n और सॉरी यूनियन ओमेगा ऑफ़ g ऑफ़ n ठीक है? तो अगर ये दोनों का यूनियन है तब आपका जाके θ ऑफ़ n बनता है। ऐसा आप रिलेशनशिप इनकी बता सकते हो। एडवांटेजेस थीटा नोटेशन के देखो कि ये एग्जैक्ट ग्रोथ रेट बताता है एल्गोरिदम का। ये अपर और लोअर बाउंड्स दोनों को कंबाइन करता है। यहां पे एल्गोरिदम्स मोर 1:16:20 एक्यूरेटली आपके कंपेयर होते हैं क्योंकि लोअर अप्पर बाउंड दोनों हैं। हार्डवेयर प्रोग्रामिंग लैंग्वेज से इंडिपेंडेंट है। ये तो आप तीनों में लिख देना। रिलेशनशिप बिटवीन बिगो ओमेगा एंड थीटा। तो बिगो ऑफ़ अह FN क्या है? मैक्सिमम ग्रोथ रेट। अपर बाउंड दिखाता है। यह मिनिमम ग्रोथ रेट दिखाता है। मतलब यहां पे मैक्सिमम रिसोर्सेज़ आपको कितने लगेंगे? जैसा-जैसा आपका इनपुट ग्रो करेगा। इनपुट ग्रो कितना भी करने दो मैक्सिमम रिसोर्सेज आपको कितने लगने वाले हैं ये पता चलता है। ये अपर बाउंड है। अब आपका जो एल्गोरिदम है इसके ऊपर नहीं जाने वाला। फिर ये बताता है मिनिमम ग्रोथ रेट। मिनिमम रिसोर्सेज इतने लगेंगे। एल्गोरिदम को कितना भी कम इनपुट लेने दो इसके नीचे नहीं जाने वाला। ऐसा आप बताते हो। फिर ये जो है ना एग्जैक्ट ग्रोथ रेट टाइट बाउंड बताता है। अ ऊपर का भी बताता है ये और नीचे का भी दोनों चीजें। तो आप ये दिखा सकते हो। ओमेगा fn जो है सबसे अ लोअर बाउंड बताता है। कम और फिर ये दोनों के बीच में और बिगो ऑफ़ f n जो है ऊपर का बताता है। एग्जांपल देखो। कंसीडर द 1:17:23 फंक्शन fn = 3n² + 5n + 2 फॉर लार्ज वैल्यूज़ ऑफ़ n द डोमिनेंट टर्म इज़ n² इसलिए जो कॉम्प्लेक्सिटी है वो तीनों की है। अभी आप बोलोगे ये तीनों का सेम ही है। क्योंकि रीज़न क्या है? इसको मैक्सिमम रिसोर्सेज या मिनिमम रिसोर्सेज n² ही लगने वाले हैं। तो डोमिनेंट टर्म वही हुआ। तो अभी मैक्सिमम जो रिसोर्सेज इसको लगेंगे वो बिगो ऑफ़ n² लगेंगे। मिनिमम रिसोर्सेज जो लगेंगे वो omegn² लगेंगे। लेकिन आप ऐसा नहीं बोल सकते कि omegn लगेंगे इसको मिनिमम क्योंकि मिनिमम में ही सबसे कम जब इनपुट होगा तब n² भी लग सकता है उसको क्योंकि डोमिनेंट टर्म वहां पे n² है। अगर ऐसा कभी भी फंक्शन आता है ना तो बस आपको डोमिनेंट टर्म देखना पड़ता। यहां पे अगर n होता तो ये तीनों n होते। ठीक है? तो बस आपको एक एग्जांपल ऐसा बता देना एक फंक्शन कि 3n² + 5n + 2 डोमिनेंट टर्म n² है। तो इसकी जो अ मैक्सिमम रिसोर्सेज इसको लगने वाले हैं वो है बिगो ऑफ़ n² मिनिमम रिसोर्सेज इसको लगने वाले हैं omegn² और अ एक एवरेज रिसोर्सेज 1:18:26 टाइट बाउंड में बताना है तो θ n² ऐसा आप दिखा सकते हो। और एक एग्जांपल अच्छा ये तो एग्जाम में आया हुआ क्वेश्चन है। तो इसको आप अच्छे से समझ लो एक बार। कंसीडर टू एल्गोरिदम्स विद देयर टाइम कॉम्प्लेक्सिटीज़ अ बिगो ऑफ़ log n एंड द अदर वन इज़ बिगो ऑफ़ N. वो बोल रहा है कि आइडेंटिफाई करो कौन लीनियर है और कौन नॉन लीनियर है। और बताओ कि इनका परफॉर्मेंस क्या है एल्गोरिदम a और b का और वो स्पेसिफिक परफॉर्मेंस के कुछ एप्लीकेशनेशंस भी बता दो। तो यहां देख के ही आपको समझ में आना चाहिए कि यह वाली जो कॉम्प्लेक्सिटी है यह कौन सी है? यह लीनियर है। बिगो ऑफ़ n लीनियर का मतलब ही होता है जैसा-जैसा इनपुट ग्रो करेगा कॉम्प्लेक्सिटी भी ग्रो करेगी। log n का मतलब क्या होता है? log n का मतलब होता है कि लॉगरिथमिकली ग्रो करेगी। अगर इनपुट आपका एट है तो आपको ऑपरेशंस कितने करने पड़ेंगे? log 8 व्हिच इज़ थ्री। इस तरीके से। लेकिन यहां पे इनपुट एट है तो कितने ऑपरेशंस करने पड़ेंगे? एट ही ऑपरेशंस करने पड़ेंगे। सेम। चलो वन बाय वन देखते हैं। 1:19:28 सबसे पहले अपने को बोला गया था टाइप ऑफ एल्गोरिदम पता करो। तो देखो टाइप ऑफ एल्गोरिदम इसका क्या है? नॉन लीनियर नॉन लीनियर एल्गोरिदम है। लॉगरथमिक कॉम्प्लेक्सिटी है इसकी। एग्जीक्यूशन टाइम जो है इसका वेरी स्लोली इंक्रीस करता है। जैसे-जैसे इनपुट ग्रो करेगा। और ये दूसरा वाला जो है इसकी लीनियर टाइम कॉम्प्लेक्सिटी है। लीनियर कॉम्प्लेक्सिटी है। लीनियर एल्गोरिदम है। इसका जो एग्जीक्यूशन टाइम है सीधा-सीधा इनपुट के साथ ग्रो करेगा। इनपुट जितना उतना एग्जीक्यूशन टाइम। फिर पूछा गया था परफॉर्मेंस बताओ दोनों का। तो पहले बिगो ऑफ लॉग इन का परफॉर्मेंस देख लेते हैं। तो ये रिपीटेडली इनपुट साइज को जो है ना अ कम करते जाएगा उसका ऑपरेशन में। मैं मैंने पहले भी एग्जांपल दिया था आपको। 8 है तो फिर log 8 3 16 है तो log 16 4 32 है तो log 32 5 इस तरीके से देखो 32 अगर इनपुट आ रहा है आपको तो ऑपरेशंस आपको कितने कम करने पड़ रहे हैं सिर्फ 1:20:29 पांच अगर ये 64 होगा तो छह ऑपरेशंस 128 होगा तो सात ऑपरेशंस इस तरीके से कैरेक्टरिस्टिक्स देख लो वेरी फास्ट एंड एफिशिएंट लार्ज डेटा सेट्स के लिए सूटेबल है। एग्जीक्यूशन टाइम वेरी स्लोली इंक्रीस करता है। इसका इनपुट कितना भी लार्ज होने दो, इनपुट बहुत बड़ा भी हो गया तो भी इसका जो ऑपरेशंस है कम ही आपको लगने वाले हैं। और कम ऑपरेशंस लगते हैं कंपेयर टू लीनियर एल्गोरिदम। एग्जांपल वही दे सकते हो आप कि इनपुट साइज़ अगर इसका अट है तो ये थ्री हो जाएगा। log n log 8 इज़ थ्री। फिर उसके बाद 16 है तो ये फोर 32 है तो फाइव 64 है तो सिक्स इस तरीके से ऑपरेशंस आपको कम लगने वाले हैं फिर अब इसके परफॉर्मेंस की बात करें तो ये एल्गोरिदम जो है हर एलिमेंट को एक बार प्रोसेस करता है। हर एलिमेंट को एक बार प्रोसेस इसको करना पड़ता है। इसलिए इसकी कॉम्प्लेक्सिटी बहुत ज्यादा होती है। एग्जीक्यूशन टाइम सीधा-सीधा इनपुट साइज के साथ इंक्रीस करता है। स्मॉल मीडियम साइज डेटा सेट्स के लिए। ठीक है? क्योंकि कम 1:21:30 डेटा है तो कम का कम कर रहे हैं। 10,000 अगर आपको इनपुट दिया जा रहा है तो 10,000 बार अगर उसको ऑपरेशंस करना पड़ रहा है तो कितना काम करना पड़ रहा है आपके एल्गोरििदम को? लेकिन अगर 50 60 ही है तो ठीक है उतना एडजस्ट कर सकते हो। लॉगरिथमिक एल्गोरिदम्स से स्लो है ये लार्ज डेटा सेट्स के लिए। एग्जांपल देख लेते हैं। तो वही एग्जांपल दे देता हूं। चाहे तो आठ इनपुट साइज़ है तो ऑपरेशंस कितने लगेंगे? आठ ही लगेंगे। 16 है तो यहां भी 16 ही लगेंगे। 32 है तो इधर भी 32 लगेंगे। 64 है तो इधर भी 64 ही लगेंगे। वही यहां पे 64 था तो ऑपरेशंस कितने लग रहे थे? छह लग रहे थे सिर्फ। फिर एप्लीकेशनेशंस पूछे गए थे हमको कि उस कॉम्प्लेक्सिटी के क्या एप्लीकेशनेशंस हैं? बाइनरी सर्च। बाइनरी सर्च का ही एग्जांपल देके मैंने वो एक्सप्लेन किया था आपको। फिर उसके बाद सर्चिंग इन बाइनरी सर्च ट्रीज़, एवीएल सर्च ट्री, रेड ब्लैक ट्री सर्च, डिवाइड कॉनकर एल्गोरिदम सब में जो है ना लॉग ऑफ़ n कॉम्प्लेक्सिटी का यूज़ होता है। फिर उसके बाद बिगो ऑफ़ n कॉम्प्लेक्सिटी के कुछ एप्लीकेशनेशंस लीनियर सर्च अरे ट्रेवर्स कर रहे हो तो पूरे आपको एलिमेंट्स को प्रोसेस करना पड़ता है। लिंक लिस्ट 1:22:31 ट्रेवर्स कर रहे हो फिर भी आपको पूरे एलिमेंट्स ट्रेवर्स करना पड़ेगा। मैक्सिमम या मिनिमम निकालना है तो पूरे आपको देखना पड़ेगा। एरे के अंदर के एलिमेंट्स। उसमें से आप मैक्सिमम या मिनिमम निकाल पाओगे। काउंट करना है नंबर ऑफ एलिमेंट्स कलेक्शन में तो उसको भी बिगो ऑफ़ एंड कॉम्प्लेक्सिटी ही लगती है। फिर स्टेप काउंट मेथड का यूज़ करके कॉम्प्लेक्सिटी निकालना। ये बहुत इंपॉर्टेंट टॉपिक है। ये हर पेपर में इसके ऊपर क्वेश्चन आता है। आपको कोड दिया जाता है, एल्गोरिदम दिया जाता है और बोला जाता है कि स्टेप काउंट मेथड से इसकी जो कॉम्प्लेक्सिटी है वो पता करो। तो देखो स्टेप काउंट मेथड क्या है? एक टेक्निक है जिससे आप टाइम कॉम्प्लेक्सिटी पता करते हो एक एल्गोरिदम की बाय काउंटिंग द नंबर ऑफ़ बेसिक ऑपरेशंस एग्जीक्यूटेड। जो जो ऑपरेशंस एग्जीक्यूट हो रहे हैं उनको कितनी अ जो कॉम्प्लेक्सिटी है वो पता करते हो आप और फिर उनका टोटल कर देते हो पूरे जो भी ऑपरेशंस हैं उन सबके कॉम्प्लेक्सिटीज का तो आपको एक फाइनल कॉम्प्लेक्सिटी पता चलती है उसकी। इस मेथड में हर स्टेटमेंट को आप कॉस्ट असाइन करते हो और कितनी बार वो एग्जीक्यूट हुआ उसको आप कैलकुलेट करते हो। फिर सारे ऑपरेशंस का आप जब सम निकालोगे 1:23:33 टोटल करोगे तो स्टेप काउंट उस एल्गोरिदम का आपको अ जो है मिल जाएगा। प्रोसीजर क्या है? सबसे पहले जो भी एग्जीक्यूटेबल स्टेटमेंट्स हैं उनको आइडेंटिफाई करो। सब कुछ जो भी वेरिएबल डिफ़ाइन किए होंगे, इनिशियलाइज़ेशन होगा, लूप का कंडीशन होगी, लूप की स्टेटमेंट होगी, जो भी चीज़ है, सबके लिए आपको उनको पहले आइडेंटिफाई करना है। फिर आपको काउंट करना है कि वो स्टेटमेंट कितनी बार एग्जीक्यूट होता है। फिर उसके बाद आपको एग्जीक्यूशन को मल्टीप्लाई कर देना है उसके कॉस्ट से और पूरे कॉस्ट्स को ऐड करके लास्ट में सब स्टेप काउंट निकालना है। फिर लास्ट में आपको हाईएस्ट ऑर्डर टर्म पता करना है। देखो, आप ना सारे कॉस्ट्स को ऐड करते जाओगे। जैसा मान लो n + n² + 1 + n + 2n + 3n² ऐसा वैसा वैसा आएगा जो भी आएगा टोटल बट इवन देन लास्ट में आपको हाईएस्ट ऑर्डर टर्म देखना है उसमें हाईएस्ट ऑर्डर टर्म क्या है इसमें n² है तो सीधा इसकी कॉम्प्लेक्सिटी आपको पता चलती है बिग वी गो ऑफ़ n² इसको टोटल कर दो आप एग्जाम में बट उसका टोटल करने से कुछ लेना देना नहीं 1:24:34 होता क्योंकि आपको हाईएस्ट ऑर्डर टर्म ही देखना पड़ता है वो बाकी कांस्टेंट की कुछ वैसा भी वैल्यू नहीं है फिर कॉम्प्लेक्सिटी को आप एक्सप्रेस करते हो बिग ओ नोट नोटेशन का यूज़ करके। चलो करते हैं। फिर अभी सबसे बेसिक एग्जांपल दिया हुआ है यहां पे एक कॉन्सेंट कॉम्प्लेक्सिटी का। कॉन्सेंट कॉम्प्लेक्सिटी किसकी होती है? उसकी होती है जिसका इनपुट से कुछ लेना देना नहीं होता। इनपुट अगर यहां पे मैं 100 एलिमेंट्स का भी डाल दूं तो भी ये तो बस इनिशियलाइजेशन है। बस वेरिएबल डिफाइन किया हुआ है। a = b + c इसमें कुछ काम लग रहा है क्या? ये इनपुट से कुछ रिलेशन है क्या? बिल्कुल नहीं। तो जब भी इनिशियलाइजेशन या फिर ऐसा कुछ भी होता है ना वेरिएबल डिफाइन किए हुए तो उसकी फ्रीक्वेंसी सिर्फ वन होती है। ठीक है? ये कांस्टेंट होने की वजह से इसकी जो कॉम्प्लेक्सिटी है वो है बिग O ऑफ़ वन। नेक्स्ट देखते हैं अभी। अब है लीनियर कॉम्प्लेक्सिटी। अब यहां से चीजें चेंज होना चालू होती है। अब देखो अ ये जो एल्गोरिदम है ये लीनियर कॉम्प्लेक्सिटी शो करता है। अब वो कैसे करता है? मैंने आपको बोला था हर 1:25:35 जो भी चीज स्टेटमेंट है इसमें आपको निकालना है और उसकी फ्रीक्वेंसी देखनी है। फिर सबको ऐड करना है। तो देखो सबसे पहले i = 1 इनिशियलाइजेशन है। ये जो लूप है मैं इसको पहले एक्सप्लेन कर देता हूं। ये वाला जो पार्ट होता है ना आपका लूप के अंदर इसको इनिशियलाइजेशन बोलते हैं। क्योंकि आप वैल्यू इनिशियलाइज कर रहे हो उसकी। फिर ये वाला जो पार्ट है ना इसको लूप की कंडीशन बोलते हैं। यह लूप की कंडीशन है। कब तक वो लूप चलने वाला है? iस < = n तब तक i में इंक्रीमेंट करते जाना है जब तक i की वैल्यू n से लेस और इक्वल नहीं हो जाती। जैसा मान लो अगर n की वैल्यू 10 दी हुई है और i शुरू में इनिशियलाइज किया हुआ है वन। तो ये वन से इंक्रीमेंट होते जाएगा जब तक वो 10 के इक्वल नहीं हो जाता। फिर जब वो 11 हो जाएगा ना तब वो लूप रुक जाता है। फिर कंडीशन सेटिस्फाई हो गई। 11 वो उस कंडीशन के अंदर नहीं आता क्योंकि लेस दैन इक्वल टू n बोला है। तो ये कंडीशन है और यहां पे जो पार्ट है ये पार्ट है इंक्रीमेंट का। 1:26:37 अब वहां पे इंक्रिमेंट हो सकता है, डिक्रिमेंट हो सकता है, डिवीज़ मल्टीप्लिकेशन हो सकता है। बट यहां पे प्लस प्लस है तो ये इंक्रिमेंट है। i प्लस प्लस इज़ इंक्रिमेंट बाय वन। तो ये देखो i = 1 इनिशियलाइज़ कर दिया गया। तो मैं स्टेटमेंट लिखता हूं यहां पे। i = 1 अब i = 1 कितनी बार इसमें रन होने वाला है? सोचो आप। वो तो बस इनिशियलाइजेशन है ना। तो एक ही बार रन होगा। बस i = 1 की एक ही फ्रीक्वेंसी होगी। i = 1, i = 1 ऐसा 10 बार क्यों वो एल्गोरिदम करेगा? इनिशियलाइज़ कर दिया। बात खत्म हो गई। अब अगली कंडीशन देखो। i लेस < = m अब ये कंडीशन ना बार-बार चेक की जाएगी। तो यहां पे अब चीज़ चेंज होती है। यहां पे फ्रीक्वेंसी वन नहीं रहने वाली क्योंकि ये कंडीशन बार-बार चेक की जाएगी। कैसे? मैं दिखाता हूं। देखिए i इज़ < = n। सबसे पहले i जो आपको दिया गया था वो वन था। अब ये चेक किया जाएगा कि ये लेस दैन इक्वल टू n है या नहीं है। तो लेट्स जस्ट अस्यूम कि n जो है इनपुट फाइव दिया गया। यूजर ने n डाला फाइव। फिर अब हम चेक करेंगे कि वो लेस दैन इक्वल टू n है क्या? और 1:27:38 इंक्रिमेंट करते जाएंगे। सबसे पहले i = 1 है क्योंकि वही इनिशियलाइज किया था। 1 < = 5 ये कंडीशन चेक की जाएगी। i < = n. i वन है और n जो है फाइव है। 1 < = 5 सही है क्या ये? हां, सही है। फिर इंक्रिमेंट होगा क्योंकि इंक्रिमेंट होना है ना। फिर उसके बाद 2स < = 5 सही है क्या? हां सही है। 3स < = 5 सही है ये भी। 4 < = 5 ये भी सही है। 5 लेस < = 5 ये भी सही है। बिकॉज़ इट इज़ लेस दैन इक्वल टू 8। फिर 6 लेस ैन इक्वल टू 5 ये सही है क्या? नहीं। ये सही नहीं है। फिर इसके आगे वो लूप और ढूंढते नहीं बैठता कि सेवन भी इक्वल है क्या? एट भी क्योंकि ये सिक्स आ गया। बात खत्म हो गई। तो इसको कितने कंडीशंस चेक करना पड़ा? देखो आप यहां पे। 1 2 3 4 5 6 इसको छह कंडीशंस देखना पड़ा। मतलब ये छह बार ये जो चीज है ना एग्जीक्यूट हुई इसको छह बार चेक करना पड़ा। तो छह बार तो आप छह नहीं लिखते वहां पे 1:28:40 क्योंकि अब इनपुट ज्यादा भी हो सकता है ना। इनपुट अगर 10 होगा तो फिर वो 11 बार होगा। तो वो हिसाब से। तो यहां पे आपको ये चीज़ समझ में आती है कि पांच तो n है आपका। तो मतलब n टाइम्स तो एग्जीक्यूट होने ही वाला है। फिर और एक बार होने वाला है लास्ट की फेलियर वाली कंडीशन देखने के लिए। अगर मान लो 10 होता तो ये 10 < इक्व 10 सही हो जाता। फिर 11 < इक्वल टू 10 जो है गलत होता। तो 10 और एक 11 तो इससे ये बात समझ में आती है कि जो i < = n वाली कंडीशन है ना ये एग्जीक्यूट होती है n + 1 टाइम्स। है ना? n टाइम्स हुई मतलब पांच बार और एक बार हुई बस। फिर अब ये i++ वाली कंडीशन कितनी बार रन होने वाली है वो भी देख लो। अब सबसे पहले तो वो वन था। वन के किस में चेंज हुआ? टू में चेंज हुआ। मतलब एक इंक्रीमेंट हुआ। एक बार इंक्रीमेंट हुआ। फिर टू से वो थ्री बना। थ्री से [गला साफ़ करने की आवाज़] फोर बना। फोर से फाइव बना और फाइव से सिक्स बना। तो यहां से देखो कितनी बार वो इंक्रीमेंट वाली स्टेज हुई। 1 2 3 4 5 पांच बार। मतलब 1:29:41 जितना n है उतनी बारी ये इंक्रीमेंट होता है। मतलब ये जो i++ वाली चीज़ है ये तो सिर्फ n बारी चल रही है। ओके? फिर इसके बाद अगला सम = सम + i ये कितनी बार हो रहा है? देखिए मैं इसको मेट देता हूं सर। i + ठीक है? सम = सम + i ये कितनी बार हो रहा है? देखते हैं अभी। तो लेट्स से कि सम जो है शुरुआत में ज़ीरो है। एक्चुअली इनिशलाइज़ करना चाहिए था। सम ज़ीरो यहां पे नहीं किया है बट कोई बात नहीं हम अज़ूम कर लेंगे ज़ीरो है। तो ये कर क्या रहा है एग्जैक्टली ये इनपुट ले रहा है यूजर से और वो जो इनपुट दे रहा है यूजर बस उसमें उसको ऐड करते जा रहा है। जैसा मान लो अगर यूजर ने फाइव लिखा तो वो क्या करेगा? वन से स्टार्ट करेगा वन और फिर नेक्स्ट नंबर लेगा और वो उसमें ऐड करेगा। सबसे पहले मैंने बोला ज़ीरो है। ठीक है? तो 0 + 1 = 1 इस तरीके से। अब मैं अब यहां पे एक्सप्लेन करता हूं। देखो सम = मैंने बोला शुरुआत में 0 है। ठीक है? 0 1:30:42 प्लस और शुरुआत में i क्या है? वन है। वन तो क्या वैल्यू हो गई इसकी? वन। तो अभी आपका सम क्या इनिशियलाइज हो गया? जो पहले ज़ीरो था वो अब वन हो गया। तो अब सम इज़ इक्वल टू सम की वैल्यू क्या हो गई? अब वन हो गई ना? फिर उसके बाद ये i है। अब i में तो एक-एक बार ही इंक्रीमेंट होने वाला है। इसलिए i यहां पे टू होगा। फिर एक बार थ्री होगा, एक बार फोर होगा, एक बार फाइव होगा। उसके बाद वो सिक्स नहीं होने वाला। क्योंकि सिक्स होगा तो आगे लूप चलने ही नहीं वाला। वो सिक्स हो गया तो वहीं ब्रेक हो जाएगा वो लूप। तो ये पांच तक जाने वाला है। तो पहले वन थी 1 + 2 = 3 फिर अब थ्री हो गई उसकी वैल्यू। तो 3 + 3 = 6 अब सम की वैल्यू सिक्स हो गई। तो 6 + 4 = 10 फिर अब 10 हो गई इसकी वैल्यू। तो 10 + 5 = 15 तो इससे ये भी समझ में आ रहा है हमको कि ये कितनी बार एग्जीक्यूट होने वाला है सम वाला ब्लॉक? वैसा तो ये समझने जैसी बात है कि ये जितनी बार रन होगा फॉर लूप उतनी बार ये होगा ना। मतलब अगर फॉर ने 1:31:44 यस बोला तभी ये आगे चलने वाला है। तो फॉर अगर ये पांच बार इंक्रीमेंट हो रहा है तो ये पांच बार ही चलने वाला है। ये कंडीशन जब सेटिस्फाई नहीं होती ना फॉर वाली तो ये अंदर की कंडीशन चलती नहीं है। सम = सम + i होने ही नहीं वाला। अगर यहां पे गलत हो गया तो। तो यहां पे जब सही होगा यहां पे इंक्रीमेंट हो रहा है तभी यहां पे ये होगा। बट फिर भी आप चेक कर लेना जब लिख रहे हो तो ऐसा कोई स्पेसिफिक पैटर्न से याद मत कर लो कि i < = n है तो n + 1 ही आएगा। मान लो अगर i को यहां पे उन्होंने तीन ही इनिशियलाइज़ करके रख दिया शुरू में। तो फिर अगर आप कंडीशन लगाओगे तो i < = n n + 1 नहीं होने वाला। ठीक है? तो ऐसा रट मत लो इज़ व्हाट आई एम ट्राइंग टू से। अ ठीक है? तो इससे ये समझ में आया कि 1 2 3 4 5 ये भी n टाइम्स ही चल रहा है। इसलिए सम = सम + i भी जो है n बार ही चलने वाला है। तो अब पूरे जो भी थे हमने सब चेक कर लिया यहां पे। अब इसको टोटल कर लेते हैं। तो 1 + n + 1 + n + n = 3n + 2 1:32:51 ठीक है? 3n + 2 अब डोमिनेंट टर्म क्या है इसमें? n है तो इसकी जो कॉम्प्लेक्सिटी होने वाली है वो होगी बिगो ऑफ़ n जैसा बोला गया था लीनियर कॉम्प्लेक्सिटी ओके आई होप यू अंडरस्टैंड दिस ठीक है नेक्स्ट देखते हैं अभी क्वाड्रेटिक कॉम्प्लेक्सिटी तो क्वाड्रेटिक कॉम्प्लेक्सिटी जो है इसमें एक ही चीज़ है अ यू नो व्हाट क्वाड्रेटिक कॉम्प्लेक्सिटी बिगो ऑफ़ n² अब क्वाड्रेटिक ऐसा देखो फॉर लूप के अंदर फॉर लूप है इसलिए इसकी कॉम्प्लेक्सिटी क्वाड्रेटिक है। कैसे है मैं बताता हूं। ऊपर वाला जो पार्ट है वो पूरा सेम है जो पहले का है। तो मैंने जो पहले एक्सप्लेन किया था अब मैं सीधा लिख देता हूं वहां से लिख के। i = 1, i = n, i + तो ये 1 n + 1 n था। तो i = 1 तो एक ही बार इनिशियलाइज हो रहा है। इसलिए उसकी फ्रीक्वेंसी एक ही होगी। i = i < = n है तो ये n + 1 होगा और जो इंक्रीमेंट है वो n होगा। अब अब आप जाओगे नेक्स्ट वाले पार्ट पे। फॉर j = 1 अब j = 1 की फ्रीक्वेंसी क्या होगी? सोचो आप। अब 1:33:51 आपको लग सकता है कि j = 1 की फ्रीक्वेंसी वन ही होगी क्योंकि इनिशियलाइजेशन है ना। इनिशियलाइजेशन तो हम एक ही बार करते हैं। तो j = 1 हो गया इनिशलाइज एक ही बार करो। लेकिन इसमें बात क्या है? देखो जब ये लूप एग्जीक्यूट होगा ना एक नंबर के लिए जैसा मान लेते हैं मेरा इनपुट जो है वो है थ्री। मैंने n थ्री दिया। तो सब में पहले i = 1, i < = n, i + ये चलेगा। मतलब i = 1 फिर चेक किया जाएगा कि अह 1 < = 3 और 1 + इंक्रिमेंट हो जाएगा। वो अगले के लिए जो i है वो टू बनेगा। लेकिन जब i = 1 था उसके लिए ये एग्जीक्यूशन होगा ना इसका। मतलब जब i = 1 है उसके लिए इसका एग्जीक्यूशन होगा। फिर जब i = 2 है तो फिर से इसका एग्जीक्यूशन होगा। फिर i = 3 होगा ये इंक्रिमेंट होते जाएगा। तो फिर से तीसरी बार इसका एग्जीक्यूशन होगा। तो इसका मतलब ये इनिशियलाइजेशन ही n नंबर ऑफ टाइम्स 1:34:51 होने वाला है। क्योंकि हर बार जब ये लूप में i चलेगा ना उतनी बार j चलने वाला है। यहां पे आई आई विल मेक यू अंडरस्टैंड अगेन। देखो जब i वन होगा ये कंडीशन सेटिस्फाई होगी और लूप आगे काम करना चालू करेगा। तो ये तब एक बार रन होगा। फिर i = 2 होगा तब फिर से ये कंडीशन सेटिस्फाई होगी और ये फिर से चल चालू होगा। फिर i = 3 होगा। फिर से ये कंडीशन सेटिस्फाई होगी और ये चालू होगा। फिर i = 4 होगा तब कंडीशन सेटिस्फाई नहीं होने वाली है क्योंकि n की वैल्यू मैंने तीन बोली थी। तो 4 < = 3 ये गलत है तो आगे ये जाने नहीं वाला। तो इससे ये समझ में आ रहा है कि ये n नंबर ऑफ़ टाइम्स चलने वाला है। बस इनिशियलाइजेशन तो यही चीज होती है इसमें। अंदर का जो लूप है ना वो n इंटू होता है। n * बाय दिस पार्ट हमेशा नहीं होता। कभी-कभी नहीं भी हो सकता है। अगर कुछ उल्टा दे दिया तो जैसे j = n ही लिख दिया तो वो आगे है। मैं आगे एक्सप्लेन करूंगा। बट इन मोस्ट ऑफ़ द केसेस अगर फॉर लूप के 1:35:51 अंदर फॉर लूप है तो सीधा आपको ये समझ में आ जाना चाहिए कि वो क्वाड्रेटिक कॉम्प्लेक्सिटी है। तो ये पहले तो n मिल गया। अब इसके बाद देखो अगली कंडीशन है jस < = n. अब jस < = n + 1 बार चलने वाला है। है ना? क्योंकि j की वैल्यू वन है। फिर वो चेक किया जाएगा। 1 < = 3 और वो सेटिस्फाई होगी। फिर उसमें इंक्रीमेंट किया जाएगा। फिर आगे 2 < = 3 < = 3 फिर 4 < = 3 ये वाली सेटिस्फाई नहीं होगी। लेकिन कंडीशन तो चार बार हो गए। चार बार मतलब n + 1 है ना? n + 1 हो गया। फिर ये jस < = n जैसा यहां पे i < = n n + 1 है। ये भी n + 1 है। बट द ओनली कैच इज़ दैट ये n + 1 फिर से फिर से चलने वाला है। तीन बार जब i = 1 होगा तब एक बार। जब i = 2 होगा तब एक बार। जब i = 3 होगा तब एक बार। तो मतलब इसको तीन बार चलना है। मतलब n नंबर ऑफ़ टाइम्स चलना है। तो ये n * n + 1 हो गया। ठीक है? फिर इसके 1:36:53 बाद j + j + i + कितना? n नंबर ऑफ़ टाइम्स चलने वाला है। तो j + b n नंबर ऑफ़ टाइम्स चलने वाला है। लेकिन पुराना वाला जो N है उसके हिसाब से क्योंकि ये i1 होगा तब ये चलेगा। i2 होगा तब चलेगा। i3 होगा तब भी चलेगा। ठीक है? नहीं समझ आया तो पीछे आके फिर से देख लो। अ आपको समझ में आ जाएगा। तो अब क्या करोगे आप? इसके बाद इसके बाद बस इसका टोटल कर दो। अ नहीं। अच्छा और एक चीज़ है शायद अंदर। काउंट प्लस प्लस तो ये तो बस ये फॉर लूप के अंदर है और यह उतने ही बार रन होगा जितने बार ये ऊपर की कंडीशन रन हो रही है। मतलब ये जो काउंट प्लस प्लस है ये n * n टाइम्स चलने वाला है। तो चलो इसका टोटल कर लेते हैं। अभी 1 + n + 1 + n + n + n² + n लिख देता हूं सीधा + n² + n² 1 2 3 मतलब 3n² + 1 2 3 4 1:37:56 + 4 + 2 3n² + 4 + 2 आ गया और डोमिनेंट टर्म इसका n² है। इसलिए जो ओवरऑल कॉम्प्लेक्सिटी इसकी आ जाएगी दैट वुड बी बिगो ऑफ़ n² ठीक है? आई होप समझ में आ गया आपको क्वाड्रेटिक कॉम्प्लेक्सिटी। अब नेक्स्ट देखते हैं। चलो ये वाला भी क्वेश्चन देख लेते हैं अभी। तो ये एल्गोरिदम में क्या चेक किया जा रहा है? नंबर प्राइम है या नहीं है? तो इनपुट में एक नंबर आपको दिया जाएगा n और एल्गोरिदम चेक करेगा प्राइम है या नहीं है। तो लेट्स अस्यूम हमको जो इनपुट हम देने वाले हैं वो है फाइव। तो काम कैसे कर रहा है ये एल्गोरिदम? देखो सबसे पहले i = 2 दिया हुआ है यहां पे। तो इनिशियलाइजेशन कहां पे है? टू से। आई टू दिया गया है। क्यों टू दिया गया है? मैं आपको एक्सप्लेन करता हूं। देखो कोई भी प्राइम नंबर खुद से डिविजिबल होता है या तो वन से डिविजिबल होता है। तो देखो अ हमको पता है कि फाइव प्राइम नंबर है क्योंकि वो खुद से डिविज़िबल है और सिर्फ वन से डिविज़िबल है। नंबर्स लाइक 3 5 7 11 ये कोई टेबल में नहीं आते ना। ये खुद के ही टेबल में आते हैं। 11 * 1 = 11, 7 * 1 = 7 इस तरीके से। 1:38:58 तो कोई भी प्राइम नंबर जो है वो या तो सेल्फ अ से डिविजिबल होता है या तो वन से डिविज़िबल होता है। तो ये एल्गोरिदम क्या कर रहा है? ये सेल्फ और वन के बीच में के जितने भी नंबर्स हैं 2 3 4 1 2 3 4 5 राइट? मुझे ऐसे लिखना चाहिए था। सो इज़ियर फॉर यू अंडरस्टैंड वन और ये यहां पे फाइव। ठीक है? या तो वन से डिविज़िबल या तो खुद से डिविज़िबल। बीच में 2 3 4 तो अब ये एल्गोरिदम क्या चेक करता है? ये बीच के नंबर से मोड निकाल के देखता है। वो उस नंबर का आंसर ज़ीरो आ रहा है। क्या अभी मोड क्या होता है? देखो 5 म 2 अगर मुझे निकालना है तो 5 म 2 मतलब आप डिवीज़ करोगे और जो रिमेंडर आएगा ना वो मोड का आंसर होता है। सो दिस विल बी वन। तो इसका आंसर आ जाएगा वन। इस तरीके से। तो यहां पे क्या किया जा रहा है? उस नंबर का मोड लिया जा रहा है बीच के नंबर से जो भी है वन से फाइव के बीच में जितने भी नंबर्स आएंगे सबसे मोड लेंगे। अगर आंसर जीरो आ गया तो इसका मतलब है कि वो नंबर ये दोनों 1:39:59 के अलावा भी बीच में किसी से डिविजिबल है। हमको नहीं चाहिए वो। अगर ऐसा कुछ है अगर मान लो मैं फोर देख रहा हूं तो फोर वन और फोर यहां बीच में कौन-कौन नंबर है? टू और थ्री और ये जब मोड निकाला जाएगा तो मान लो 4 म 2 किया गया तो इसका आंसर तो ज़ीरो आ जाएगा। तो इसका मतलब है कि ये प्राइम नंबर है ही नहीं क्योंकि ये ज़ीरो आ गया। तो ज़ीरो आया तो फॉल्स रिटर्न करने वाला है वो। अगर ज़ीरो नहीं आया तो ट्रू रिटर्न करने वाला है। सो दिस इज़ हाउ दिस एल्गोरिदम वर्क्स। ठीक है? तो ये सबसे चेक करेगा 5 म 2 वगैरह-वगैरह और फिर उसको आंसर मिल जाएगा। चलो स्टेप काउंट देखते हैं। सबसे पहले i = 2 मैंने बोला ही था इनिशियलाइजेशन है तो फ्रीक्वेंसी हमेशा वन होती है। फिर उसके बाद i < n है। अब i < n कैसे आप पता करोगे? देखो i की वैल्यू टू दी गई है। मैंने बोला n हम फाइव ले लेते हैं। सो लेट्स चेक इट। 2 < 5 i < n कंडीशन सही हो गई। फिर उसके बाद इंक्रीमेंट होगा 3 < 5 ये भी सही हो गई। फिर 4 < 5 ये भी सही हो गई। 5 < 5 नहीं ये गलत हो गई। तो 1:41:01 बस ये तीन नंबर्स के लिए ये चेक करने वाला है। ये n म = 0 और फॉल्स या ट्रू रिटर्न करेगा। तो ये कंडीशंस कितने हो गए? लेकिन यहां पे कंडीशंस तो चार हो गए। तो ये i < n चार बार रन करने वाला है। और चार बार होने के लिए कैसे करना पड़ेगा? ये फाइव है तो 5 - 1 इज़ 4 सो इट इज़ n - 1 तो ये n - 1 बार रन होता है। अगर मान लो फाइव की जगह से होता तो सिक्स बार रन होता है। तो फिर i + ये कितनी बार रन होने वाला है? सो दिस इज़ गोइंग टू हां। हां तो इंक्रिमेंट देखना है आपको उसके लिए। तो सबसे पहले टू था टू से वो थ्री हुआ। फिर थ्री से फोर हुआ। फोर से फाइव हुआ। फाइव से सिक्स हुआ क्या? नहीं। फाइव पे जाके रुक गया। तो इंक्रीमेंट तीन बार हो रहा है। सो n - 2 विल बी थ्री। बिकॉज़ 5 - 2 इज़ 3 तो + i का भी हमको पता चल गया। अब इसके बाद ये कितनी बार चलने वाला है? ये उतनी बार चलने वाला है जितनी 1:42:02 बार ये कंडीशन सही हुई थी। देखो n mi = 0 तो n क्या है आपका? i लेस < n है तो सब में पहले ये टू था अह n इज़ 5 म 2 वन आएगा नहीं सॉरी या 5 म 2 वन आएगा 5 म 3 टू आएगा देखो टू फिर थ्री फिर 5 म 4 भी वन आएगा फोर के लिए भी मैंने कर दिया अब 5 म 5 करेंगे क्या नहीं क्योंकि वहां पे कंडीशन सेटिस्फाई हुई नहीं थी हमारी तो ये तीन के लिए हुआ तो ये भी तीन बार हो रहा है देखो तो ये कितने बार एग्जीक्यूट हो रहा है तीन बार तो वो तीन बार एग्जीक्यूट हो रहा है। तो यहां भी हम लिखेंगे अ n i = 0 वाली जो कंडीशन है ये चलेगी n - 2π ठीक है? यहां तक हमने पता कर लिया। अब ये रिटर्न फॉल्स और रिटर्न ट्रू। ये एक ही बार रन होने वाला है। ठीक है? आइदर फॉल्स आएगा या तो ट्रू आएगा। और ये कितनी बार रन होगा? आप अगर सोच सकते हो तो दोनों तो 1:43:03 नहीं होने वाले। और एक बार के एग्जीक्यूशन में वो सिर्फ एक ही बार होने वाला है। तो फॉल्स और ट्रू दोनों में से एक ही बार आएगा। या तो ये ज़ीरो या वन होगा या तो ये ज़ीरो या वन होगा। ठीक है? तो इस तरीके से आप इसका अभी टोटल निकालोगे तो आपको फाइनल आंसर मिल जाएगा। सो लेट्स डू दैट। यही कर लेते हैं। n तीन बार है तो ये 3n हो जाएगा और -5 ये माइनस माइनस प्लस -3 और डोमिनेंट टर्म 2n ओके ये -4 था। ये +1 किया तो -3 और ये तो कट ही हो गया और ये तीन बार n है। तो इस तरीके से जो है हमारी टाइम कॉम्प्लेक्सिटी यहां पे वी गो ऑफ़ n निकल के आती है इस एल्गोरिथम के लिए। चलो अगला देखते हैं। अब ये वाले फंक्शन के लिए भी स्टेप काउंट देखते हैं। सबसे पहले देखो इनिशियलाइजेशन है। इनिशियलाइजेशन के लिए फ्रीक्वेंसी हमेशा वन होती है। फिर उसके 1:44:04 बाद फिर से इनिशियलाइजेशन है तो फिर से फ्रीक्वेंसी वन ही होने वाली है। इनिशियलाइजेशन बेस्ट है। बस आपको वन लिखना है। बात ख़। यह जब भी आ जाती है ना कंडीशन वगैरह तब आपको थोड़ा सा दिमाग लगाना पड़ता है। अभी देखिए यहां पर ना डिवीजन है। यहां पर मल्टीप्लिकेशन है। अब ऐसी चीजें जब आती है ना तब log का आपको यूज़ करना पड़ सकता है। तो या इस क्वेश्चन में आपको अ लॉग यूज़ करना पड़ने वाला है। ये दो से डिवाइड हो रहा है। मतलब उसकी वैल्यू आधी-आधी होती जा रही है हर अ स्टेप पे। सबसे पहले i को n रख दिया गया। तो n आपको कुछ ना कुछ अ्यूम करना पड़ेगा। चलो हम अ्यूम करते हैं यहां पे। n जो है हमारा एट है। ओके? सो अह n एट होने के बाद n अगर एट है तो इस हिसाब से यहां पे i अगर भी i भी अगर n है तो i भी आपका एट ही होने वाला है। तो चलो कंडीशन रखते हुए जाते हैं हम। सबसे पहले 8 > = 1 सही है ये। फिर उसके बाद देखो ये क्या कर रहा है? हाफ कर रहा है उसको। दो से डिवाइड कर रहा है ना। दो से डिवाइड करोगे तो आधा हो जाएगा। फोर ये भी सही है। फिर टू कर 1:45:05 दिया ये भी सही है। वन कर दिया ये भी सही है। ज़ीरो कर दिया अब इस बार। अब आपको लगेगा 0.5 क्यों नहीं किया? देखो अगर वो फ्लोट होते फ्लोट डेटा टाइप होता तो 0.5 होता। हमको पता नहीं तो हम उसको ज़ीरो कर देते। तो ये 0 > इक्वल टू वन गलत है ये। तो ये चार बार जो है सही अह कंडीशन आई एम सॉरी चार बार इंक्री अह ये वाली कंडीशन चल रही है चार बार। और पांच बार कौन चल रहा है? ये i > = 1 चेक किया जा रहा है ना पांच बार पांच बार चेक किया जा रहा है ये और हमारा n जो है आठ है तो अब अगर n आठ है और ये पांच है तो क्या आपको उसमें रिलेशनशिप दिखाई दे रही है आपको ऐसा लग सकता है n - 3 लेकिन आप वैसा नहीं कर सकते क्योंकि अगर मान लो मैं एट की जगह 16 ले लूंगा इसको तो ये तो सिक्स हो जाएगा फिर क्या रिलेशनशिप मैच नहीं हो पा रही ना रिलेशनशिप तो ऐसे केस में आपको log यूज़ करना पड़ता है तो अब log कैसे यूज़ करोगे तो n 8 है ना तो log 8 जो जो है वो होता है थ्री। तो n अगर एट है तो log n जो है 1:46:07 वो है थ्री। log n टू द बेस 2 थ्री है। ओके? तो इस कंडीशन से इससे आप अब रिलेशनशिप बता सकते हो। अगर आपने लिख दिया log n + 2 तो सही हो जाएगा फिर। तो वो वाली जो कंडीशन है i > = 1 उसके लिए आप लिखोगे log n + 2 ओके? log n + 2 कैसे है? क्योंकि log n 3 है और उसमें टू मिला दो बस। अगर यहां पे 16 होता फिर ये सिक्स हो जाता था। तो 16 का log अगर आप करते तो 4 + 2 अ सिक्स हो जाता था। ठीक है? तो उसमें भी वो सेटिस्फाई कर रहा है। चाहे तो आप दो तीन अलग-अलग इनपुट लेके चेक करो कि आप सही लिख रहे हो क्या उसके लिए। फिर log m + 2 यहां पे हो गया। फिर इसके लिए अगर आप कर रहे हो तो ये तो डिवाइड करता जा रहा है। शुरू में हमने एट लिया था। एट से फोर हुआ। फोर से टू हुआ। टू से वन हुआ। वन से ज़ीरो हुआ। मतलब ये कितनी बार हुआ? चार बार। 1 2 3 4 चार बार काम लगा ना चार बार एग्जीक्यूशन हुआ उसका तो चार बार करने के लिए क्या बताओगे आप? log n + 1 तो यहां लिख देते हैं i 1:47:08 log n + 1 ओके तो ये भी मैंने लिख दिया। अब जाते हैं हम j = 1 पे। अब ये कितनी बार हो रहा है? आप दिमाग लगाओ थोड़ा सा। J = 1 अब J = 1 जो है ना ये एक्चुअली अ इनिशियलाइजेशन है। अब इनिशियलाइजेशन जब भी अंदर के लूप में होता है ना तो सिंपल वे में आप ऐसा आप समझ लो कि पिछला वाला जो था मतलब ये जितनी बार रन हुआ ये जितनी बार एग्जीक्यूट होगा ना उतनी बार इसको इनिशियलाइज़ करना पड़ेगा आपको। क्योंकि वो हर बार आप वही कर रहे हो। अगर आप पीछे भी जाके देखोगे तो देखो यहां पे + i की वैल्यू क्या आई n - 2 फिर उसका मतलब है कि ये n - 2 बार चलने वाला है फॉर लूप और वो जब n - 2 बार चलेगा अंदर वाले को भी तो n - 2 बार काम करना पड़ेगा इनिशियलाइजेशन अगर वो भी लूप करने वाला है अ लूप की कंडीशन है तो उसकी कंडीशन को आपको इस इसके साथ मल्टीप्लाई करना पड़ेगा लेकिन इनिशियलाइजेशन तो एक ही बार चलता है 1:48:08 तो ये अगर 10 बार चल रहा है तो ये भी 10 बार चलेगा वैसे वैसी कंडीशन आप समझ सकते हो पिछले वाले में भी आप देख सकते हो चाहे तो यहां यहां पे देखो i + n बार था। फिर उसके बाद सम अंदर वाली कंडीशन कितनी बार इनिशियलाइज हुई वो भी n बार ही हुई। जैसे कि आप यहां पे देख सकते हो। ठीक है? तो यहां पे भी हम वही रूल यूज़ करने वाले हैं। j = 1 इनिशलाइज़ कितनी बार होगा? जितनी बार ये कंडीशन जितनी बार ये लूप चलने वाला है। तो ये भी सेम ही आने वाला है। ओके? अब अब ये कंडीशन में आपको थोड़ा सा सोचना पड़ेगा और प्रॉपर अ जो है लिखना पड़ेगा log की वैल्यूज़ वगैरह। चलो अभी हम क्या करते हैं? यहां पे M दिया गया है। Jस < = M अब M की भी आपको कुछ वैल्यू लेना पड़ेगा। और यहां पे j डबल किया जा रहा है। वहां पे आधा किया जा रहा था। दो से वो डिवाइड हो रहा था। अब ये दो से मल्टीप्लाई हो रहा है। तो क्या होगा? तो j की वैल्यू कुछ अस्यूम कर लेते हैं हम कि 1:49:08 J जो है वो है हमारा नहीं J तो थोड़ी ना अस्यूम करेंगे। M की वैल्यू अस्यूम करना पड़ेगा मुझे। M की वैल्यू अगर हम एट ले लेते हैं। ओके? M की वैल्यू एट ले लेते हैं हम। चलो M की भी हमने एट ली थी। m की भी एट लेते हैं। तो j हमको बोला गया है वन। तो jस < = M. कैसे होगा? Jस < = M. J की वैल्यू वन है और M की वैल्यू क्या है? एट है। 1 < = 8 सही है या गलत है? सही है। फिर इसको डबल किया जा रहा है। देखो दो से मल्टीप्लाई किया जा रहा है ना। तो 2स < = 8 सही है या गलत है? सही है। फिर टू का फोर हो जाएगा। 4 लेस < = 8 ये भी सही है। फिर फोर का एट हो जाएगा। ये भी सही है। फिर एट का 16 हो जाएगा। ये सही नहीं है। ये गलत है। लेकिन ये चल रहा है सेम पांच बार। लेकिन अब यहां पे m है। तो m अगर एट है तो log m क्या होगा? log m भी थ्री होगा। तो इस हिसाब से अगर मैं इसको कंटिन्यू करूं तो jस 1:50:09 < = m विल बी लॉग अ log m 2 + 1 + 1 कितनी बार हो रहा है ये? तीन और 2 पांच हां तो पांच बार तो फिर तो log m + 2 ठीक है? तो यहां पे log m + 2 क्यों यूज़ किया? क्योंकि log m 3 है और ये पांच बार एग्जीक्यूट हो रहा है ना? 1 2 3 4 5 तो फाइव कैसे लाओगे? log m 3 है तो 3 + 2 5 log m + 2 मैंने यहां पे लिख दिया। लेकिन अब इसमें एक कैच ये है कि देखो ये कितनी बार एग्जीक्यूट होगा। ये हर बार एग्जीक्यूट होगा इसके लिए। जब इसकी वैल्यू अ एक से बढ़ेगी तो फिर ये रन किया जाएगा। फिर से ये रन किया जाएगा। फिर से ये लूप रन किया जाएगा। तो ये तो सिर्फ एक के लिए हमने निकाला। तो पिछले वाले से आपको इसको मल्टीप्लाई करना पड़ेगा। व्हिच वाज़ अह दिस log n + 1 ओके इस तरीके से यह मल्टीप्लिकेशन मत भूलना आप। फिर नेक्स्ट कंडीशन क्या है? वो 1:51:11 मल्टीप्लिकेशन वाली कंडीशन है। वो कैसे करोगे आप? तो सबसे पहले तो जो वैल्यू थी वो वन थी। वन से टू हुई, टू से फोर हुई, फोर से 8 हुई, 8 से 16 हुई और 16 पे जाके पता चल गया कि वो वैलिड भी है। तो ये कितने बार हुआ? चार बार। log m + 1 log m + 1 4 होगा। 3 + 1 चार। सो ये वाली जो कंडीशन है दिस विल बी log m + 1 और इसको आपको मल्टीप्लाई करना पड़ेगा log n + 1 से। ओके? log n + 1 से क्यों मल्टीप्लाई करना पड़ रहा है? क्योंकि वो लूप के अंदर लूप है ना इसलिए अभी बस ये लास्ट के दो बचे हुए हैं। तो ये तो इनिशियलाइजेशन वाले ही है। उसके अंदर कुछ लूप वगैरह नहीं है। तो बस आपको पिछली वाली जो कंडीशन थी उसकी वैल्यू लिख देनी है। जब भी इनिशियलाइजेशन है पिछले वाली कंडीशन का डाल। तो ये जो है अ इस कंडीशन का है व्हिच इज़ दिस वन। तो फिर आपको बस 1:52:13 इसी को कॉपी करना है। मतलब फॉर दैट आंसर आएगी नीचे सेम चीज आएगी नीचे और लास्ट वाला जो है प्रिंट आंसर वो ये वाला होगा अ जो इसके अंदर क्योंकि इसकी कंडीशन लोगे ना आप जो इनिश इनिशियल इसके लिए ली थी। इसके लिए जो ली थी आपने वो आपने j = 1 में ली थी। और वही चीज अभी इसमें भी डाल देंगे क्योंकि ये इस लूप को बिलोंग करती है। तो log n द बेस 2 + 1 ठीक है? तो ये सबको आप कैलकुलेट करो जब आप कैलकुलेट करोगे तो जो मेजर टर्म्स आने वाले हैं लास्ट में वो होंगे log m 1:53:15 * log m ठीक है? तो यही आने मतलब बहुत सारा बहुत कुछ आएगा लेकिन मेन टर्म्स जो है उसमें log m और log n है। तो आप लास्ट में जो फाइनल कॉम्प्लेक्सिटी लिख सकते हो वह होगी बिगो ऑफ़ log m * lग m बेस टू लिख देना बेस टू नहीं लिखना सॉरी बेस टू मत लिखना कांस्टेंट्स इसमें आपको नहीं डालना है तो वो बेस वाला काम ही नहीं होता इसमें नेक्स्ट देखते हैं अ स्टेप काउंट फॉर द गिवन कोड ठीक है तो सबसे पहले इनिशियलाइजेशन है तो इनिशियलाइजेशन तो सिंपल है इंट = 0 इसको वन लिख देंगे। फिर i = 0 इसको भी वन लिख देंगे। i < n अब i < n के लिए कैसे करोगे आप? n अ्यूम करते हैं कुछ ना कुछ वैल्यू लेट्स से n हमारी थ्री है। तो थ्री अ 0 < < 3 1 लेस < 3 2 < 3 < 3 1:54:15 यहां पे जाके ये फेल हो गया। तो वो कितने बार चलने वाला है? चार बार। सो चार बार इज एक्चुअली n + 1 फिर अगला है i++ तो i++ कितनी बार होगा? ज़ीरो से वन हुआ, वन से टू हुआ, टू से थ्री हुआ। थ्री पे जाके रुक गया। ये तीन बार था। तीन बार मतलब n बार ही चल रहा है ये। तो शुरू वाला जो पार्ट था वो तो हमने निकाल लिया। अब यहां पे ना चीजें थोड़ी सी अलग है। ये j > i वगैरह लिखा हुआ है। तो i और n के बीच में यहां पे रिलेशनशिप है। तो वो भी कैसे सॉल्व करेंगे? देखो। तो j = n इनिशियलाइजेशन है पहले तो वो तो सिंपल आप क्या करोगे अ ये जितनी बार चलेगा उतनी बार ये चलने वाला है तो ये भी n ही आएगा लेकिन अब यहां पे देखो j > i यहां पे क्या अब j यहां पे n बोल दिया गया है तो n की 1:55:17 वैल्यू क्या है थ्री है तो यहां पे j की जो वैल्यू है हमको थ्री बोलती हुई और कब तक आपको ये चलाते जाना है जब तक j जो है ग्रेटर दैन i रहता है। अब i की वैल्यू तो हमेशा चेंज होती जाएगी ना। पहले जब i की वैल्यू [गला साफ़ करने की आवाज़] ज़ीरो रहेगी तब ये एक बार एग्जीक्यूट होगा। फिर i की वैल्यू वन होगी तब होगा। फिर i की वैल्यू टू होगी तब एक बार होगा। फिर i की वैल्यू थ्री होगी तब नहीं होने वाला है। तो i की वैल्यू जब ज़ीरो है तब ये एक बार चलेगा। तब क्या होगा? देखो जब j की वैल्यू थ्री है तो i की वैल्यू ज़ीरो होगी शुरुआत में। तो आपको J और AI का रिलेशनशिप दिखता है ना। सो 3 > 0 करेक्ट 2 > 0 क्योंकि डिक्रिमेंट करना है अब इस बार 1 इज़ > 0 दिस आल्सो करेक्ट। 0 > 0 नो दिस इज़ रोंग। तो यहां पे हो क्या रहा है? देखो चार बार हो गया ये। तो चार बार मतलब अ n + 1 लेकिन अगर आप दूसरी वैल्यू लेके देखोगे ना तो n + 1 यहां पे एक्चुअली मैच नहीं करता। लेट्स ट्राई दैट आउट अगेन। अभी ना फिर से 1:56:18 देखो। j = 3 वो तो j n है तो j = 3 n थोड़ी ना चेंज होगा। लेकिन एक बार i ज़ीरो था। अब अगली बार i क्या होगा? इंक्रिमेंट होने के बाद वन हो जाएगा वो। अब इस बार i की वैल्यू वन दी गई है। तो अब कैसे चेक करोगे आप? J इज़ > सो 3 > 1 करेक्ट। 2 > 1 इज़ आल्सो करेक्ट। 1 > 1 नो दिस इज़ रोंग। फिर अगले पे भी देख लेते हैं। j = 3 फॉर i = 2 अ 3 > 2 इज़ करेक्ट एंड थ्री नो नो व्हाट एम आई डूइंग 2 > 2 इज़ नॉट करेक्ट। ठीक है? तो यहां पे क्या हो रहा है? यहां पे दो सही आ गए। यहां पे तीन सही आ गए। तो अगर आप ऐसा बोल रहे हो कि n हो रहा है ये तो n नहीं हो रहा क्योंकि यहां पर जाने के बाद n तो थ्री था तो अगर आप बोल रहे हो n - 1 हो रहा है तो वो भी सही नहीं हो रहा क्योंकि 1:57:18 n 3 था तो यहां पे क्यों ये आ गया तो ये एक्चुअली हो क्या रहा है ये हो रहा है n - i n - i + 1 क्योंकि देखिए अगर आप n - i करोगे तो n की वैल्यू क्या है? अह थ्री थ्री में से अगर टू माइनस कर दिया तो 2 + 1 करोगे तो वन n इज़ 3 - i इज़ 2 एंड + 1 सो 3 - 2 इज़ 1 1 + 1 2 देखो टू सेटिस्फाई हो गया। यहां पे दो कंडीशन थे। दो आ गए। यहां पे भी आप वो सेम रूल लगा के देख सकते हो। n - i + 1 वाला n की वैल्यू थ्री है। यहां पे i 1 है। फिर + 1 कर दो तो कितना आएगा? अ -1 + 1 3 तो ये देखो तीन कंडीशन है। तो ये कंडीशन आ रही है n - i + 1 ऐसा आप करोगे ना तभी वो सही हो रहा है। तो यहां पे आएगा n - i + 1 अब ये जो i है वो नहीं लिख सकते आप स्टेप काउंट में तो उसको आपको समेशन करके प्रॉपर्ली लिखना पड़ेगा। सो समेशन ऑफ़ 1:58:20 n - 1 i = 0 n - i + 1 और अगर आप इसको सॉल्व करते हो ना तो इसका जो आंसर आता है दैट इज़ n * n + 3 / तो इस तरीके से ये होगा। i के फॉर्म में नहीं लिख सकते आप इसको यहां पे। सो n दिस विल बी n * n + 3 / 2 n * n + 3 / इस तरीके से ये कंडीशन हो गई। अब डिक्रीमेंट वाली कंडीशन का भी देख लो आप कैसे हो रहा है डिक्रिमेंट। ये थ्री से टू हुआ और फिर टू से वन हुआ और उसके आगे नहीं गया। मतलब ये दो ही बार हुआ। तो यहां पे जो आप +1 कर रहे हो ना वो करने की जरूरत नहीं है। क्योंकि अगर आप +1 नहीं करोगे तो इसका आंसर क्या आएगा? देखो n - i व्हिच विल बी 3 - अ 1 3 - 1 ना क्योंकि i वन है तो ये टू आएगा जो कि वही है। दो ही चाहिए हमको। यहां पे भी देख लो। यहां पे भी वैसे ही कर सकते हो 1:59:20 आप। n - i कर दो वन आएगा क्योंकि एक ही बार चेंज हुआ ना। सिर्फ थ्री से टू चेंज हुआ। टू के बाद तो वो वन पे गया ही नहीं। तो इसलिए ये भी वैसे ही होगा। सो हाउ यू वुड डू इट इज j - माइनस के लिए n - i और अब n - i भी अगर आपको लिखना है तो उसी तरीके से होगा ये समेशन अ n - 1 n - 1 i = 0 n - i और अगर आप इसको सॉल्व करते हो तो ये एक्चुअली बनता है n * n + 1 / 2 ओके सो दिस इज़ इट n * n + 1 / 2 2:00:14 और ये तो इसके ही अंदर है। मतलब ये जितनी बार चलता होगा उतनी ही बार ये चलेगा क्योंकि वो तो बस इनिशियलाइज़ेशन है। तो अंदर वाली वैल्यू भी सेम ही होने वाली है। n * n + 1 / 2 उसके लिए x = x + i + j ठीक है? तो अगर आप ये सबका टोटल करोगे तो यहां पे n² ही आने वाला है। तो कर लो आप इसका टोटल टोटल करने के बाद फाइनल आंसर में जो है वी गो ऑफ़ n² आएगा। सो यू कैन सम प्रॉपर्ली करते जाओ आप। तो थोड़ा सा आपका आंसर बड़ा दिखेगा। बट थोड़ा इधर-उधर भी हुआ तो उसकी एस सच कुछ वैल्यू नहीं है क्योंकि जो भी कास्टेंट वैल्यूस है उसको ऐसा भी कंसीडरेशन में लिया ही नहीं जाता। आप बस डोमिनेंट टर्म देख के आंसर लिखते हो। बस स्टेप काउंट लिखा है इसलिए स्टेप काउंट कर रहे हैं हम। बाकी आपको तो फाइनल आंसर तो सही मिल रहा है। ठीक है? तो आप इसको टोटल कर लेना और आपको पिगो ऑफ़ n² जो है आंसर देख। नेक्स्ट देखते हैं। चलिए, अभी ये लास्ट वाला देख लेते हैं। 2:01:15 फिर इसके बाद स्टेप काउंट के पीवाईक्यूस हो जाएंगे। जितने भी लिए हैं मैंने पीवाईक्यूस ही है सारे। इसलिए आपकी थोड़ी सी क्वालिटी प्रैक्टिस होनी चाहिए। तो वही है। बस यहां पे जो है ना कोड अभी इस बार पython का दिया हुआ है आपको। तो अगर आपको पाइthन आती है तो अच्छा है। नहीं आती तो मैं समझा देता हूं ये कि इन रेंज क्या है? तो सबसे पहले तो n = 100 मतलब इनिशियलाइजेशन ही है। इनिशियलाइजेशन के लिए आप सिंपल एक फ्रीक्वेंसी यूज़ करते हो। फिर उसके बाद फॉर नम इन रेंज वन से लेके n। अब वन से लेके n का मतलब है कि अ i जो है आपका वन है शुरुआत में फिर उसके बाद i < n i + मतलब i < n मतलब i n से एक पहले रुक जाएगा मतलब ये n 100 है आपका लेकिन जो आउटपुट आएगा वो 99 तक ही आने वाला है क्योंकि फॉर नमीन रेंज हमको 1 n दिया होगा इसमें तो उसी तरीके से होने वाला है ये सो लेट्स डू दैट एनी n = 100 फॉर नोमेन रेंज i = 1 तो ये तो फ्रीक्वेंसी है वन क्योंकि बस 2:02:16 इनिशियलाइजेशन था। अब इसके बाद i < n अब i < n क्या है? देख लो i अगर आप लेते हो वन तो वन इज़ लेस < लेट्स अस्यूम n हमारा थ्री है। 100 तो नहीं लेंगे इतना ज्यादा हो जाएगा। जस्ट टू अंडरस्टैंड वन इज़ लेस < 3 करेक्ट। इंक्रिमेंट होगा 2 इज़ < 3 इज़ आल्सो करेक्ट। थ्री इज़ < 3 नो दिस इज़ नॉट। तो ये क्या हो रहा है? n - 1 हो रहा है। अह इंक्रीमेंट n - 1 हो रहा है। और कंडीशन तो n ही हो रही है। क्योंकि तीन बार आपको चेक करना पड़ा ना। तो कंडीशन इसकी n ही आने वाली है। और i अ प्लस प्लस जो है जो इंक्रीमेंट है ये कितनी बार होने वाला है? n - 1 बार। क्यों n - 1 बार? क्योंकि एक बार वन से टू होगा और टू से थ्री होगा। थ्री से फोर तो नहीं हो रहा है ना? ना वो जितना n है उतना ही n है। और फिर उसके बाद अ ये जो वाला ये वाला जो पार्ट है मैंने आपको ऑलरेडी बोला था कि अगर फॉर लूप के अंदर कोई ऐसी चीज आती है जो अ फिर से लूप क्रिएट नहीं कर रही है तो उसको सीधा-सीधा आपने जो ऊपर वाले फॉर लूप को दिया था ना वही दे दो। तो ये जो इफ नम वाला पार्ट है 2:03:17 इफ नम म 2 = 0 तो ये कितनी बार रन होगा? जितनी बार ये i प्लस रन होगा। n - 1 सिंपल। और अब प्रिंट वाला जो बातें हैं ना तो देखो प्रिंट का कैसा है ये या तो ये प्रिंट होगा या तो ये प्रिंट होगा। प्रिंट होना कंफर्म है। ये कर क्या रहा है? 100 n दिया हुआ है तो स्टार्ट कर रहा है वन से। फिर प्रिंट करेगा इस तरीके से। वन इज़ ऑड, टू इज़ इवन, थ्री इज़ ऑड, फोर इज़ इवन। तो हर इनपुट पे प्रिंट दे रहा है आपको कुछ ना कुछ। तो इसलिए जितने भी बार ये इफ वाली केस चलेगी प्रिंट कुछ ना कुछ आने वाला है। अब वो प्रिंट कुछ भी आ सकता है। ऐसा जरूरी नहीं है ऑड है या इवन है। तो प्रिंट ऑड भी आ सकता है या फिर इवन भी आ सकता है। तो दोनों के लिए कंडीशन n - 1 ही है। क्योंकि या तो आप ये प्रिंट करवा रहे हो या ये प्रिंट करवा रहे हो। तो अगर आप इस सबको टोटल कर दोगे तो आपको जो आंसर मिलेगा वो n ही मिलने वाला है बिकॉज़ ऑफ़ n क्योंकि यहां पे कहीं n² तो बन नहीं रहा। ठीक है? तो इसको आप टोटल कर लेना तो प्रॉपर आपको आंसर इसका मिल जाएगा। मैंने फाइनल आंसर आपको बता दिया। बिगो ऑफ़ n इसकी टाइप कंपेसिटी 2:04:19 है। अब देखते हैं एडवांटेजेस क्या है स्टेप काउंट मेथड के। ये एक एग्जैक्ट काउंट ऑफ़ ऑपरेशंस हमें प्रोवाइड करता है। एल्गोरिदम एफिशिएंसी यहां पे कंपेयर होती है अच्छे से। टाइम कॉम्प्लेक्सिटी डिटरमिन करना आसान हो जाता है। और छोटे एल्गोरिदम्स को जो है आप एनालाइज कर सकते हो। छोटे एल्गोरिदम्स ही कर सकते हो। ये बात याद रखो। फिर डिसएडवांटेजेस है लार्ज प्रोग्राम्स नहीं कर सकते। लार्ज प्रोग्राम्स के साथ स्टेप काउंट नहीं खेल सकते आप। वो तीन चार लाइन के लिए हमको इतना ज्यादा टाइम लगता है। डिफरेंट ऑपरेशंस के अलग-अलग एग्जीक्यूशन टाइम्स हो सकते हैं। और ऑपरेशन काउंट के ऊपर ये फोकस करता है रादर दैन एग्जीक्यूशन टाइम। ऑपरेशन काउंट ही देख रहे थे ना कितनी बार वो हो रहा है। टाइम कैसे पता चलेगा? कितने सेकंड्स में हो रहा है। अब एनालिसिस ऑफ़ प्रोग्रामिंग कॉनंस्ट्रक्ट्स। तो देखो प्रोग्रामिंग कॉनंस्ट्रक्ट्स वही है जो कॉम्प्लेक्सिटीज हम देख रहे थे ना वही हमको फिर से देखना है। तो टाइम कॉम्प्लेक्सिटी किसके ऊपर डिपेंड करती है? कितनी बार स्टेटमेंट्स एग्जीक्यूट हुए उसके ऊपर वो टाइम कॉम्प्लेक्सिटी एल्गोरिदम की होती है। इसीलिए हम देख रहे थे ना जितना एग्जीक्यूशन हो रहा था टाइम 2:05:20 कॉम्प्लेक्सिटी बढ़ती जा रही थी। तो अगर आप लूप्स और नेस्टेड लूप्स को डिटरमिन एनालाइज़ करते हो तो फिर कितना टाइम ग्रो होता है इनपुट के हिसाब से हमको समझ में आता है। फिर ये आप एग्जांपल देख सकते हो। पहले भी हमने कई बार देखा। बस यहां पे टाइम और स्पेस कॉम्प्लेक्सिटी दोनों लिख दिए। क्योंकि इन टोटल प्रोग्रामिंग कॉंस्ट्रक्ट्स हमारा एल्गोरिदम का कैसी ग्रोथ है वो देख रहे हैं हम। स्पेस टाइम दोनों भी देखते हैं उसमें हम। ऐसा नहीं कि टाइम कॉम्प्लेक्सिटी वगैरह। तो देखो वही है इनपुट साइज जैसा-जैसा आपका ग्रो होता है कांस्टेंट कॉम्प्लेक्सिटी कांस्टेंट ही रहती है। वो ग्रो नहीं होती। लॉगरिथमिक वो थोड़ी सी ग्रो होती है। थोड़ी सी ग्रो क्यों होती है? और इसका एग्जांपल हमेशा आप बाइनरी सर्च वाला दे सकते हो। और इसका जो एग्जांपल है वो आप दे सकते हो। इंडेक्स के हिसाब से कोई एलिमेंट को सर्च करना। अरे का कोई एलिमेंट उसके इंडेक्स से डायरेक्टली आप सर्च कर सकते हो बिगो ऑफ़ वन टाइम में। फिर ये बाइनरी सर्च है। क्योंकि अ अगर मान लो आपका इनपुट जो है वो है एट लेकिन log 8 तो थ्री ही होता है। ऐसा आप बता सकते हो उसका एग्जांपल। फिर लीनियर 2:06:22 मतलब जितनी जितना इनपुट ग्रो होगा उतना ही ये ग्रो होगा। लीनियर सर्च का यहां पे एग्जांपल दिया जा सकता है। लीनियर सर्च। फिर उसके बाद क्वाड्रेटिक। क्वाड्रेटिक मतलब जितना आप इनपुट देते हो उसका स्क्वायर जो है की ग्रोथ होती है एल्गोरिदम की। इसका आप मैट्रिक्स का एग्जांपल दे सकते हो। उसमें n / n एलिमेंट्स अगर है तो वो क्वाड्रेटिक जो है कॉम्प्लेक्सिटी यूज़ कर लेता है। फिर लास्ट में क्यूबिक है। क्यूबिक तो बहुत ज्यादा ग्रो हो रहा है। जैसा इनपुट साइज़ ग्रो हो रहा है वो उसके क्यूब से ग्रो होगा। तो आपको ये डायग्राम आपको बना देना चाहिए। इसमें आप दिखा सकते हो कि इनपुट के हिसाब से ग्रोथ कैसी होती है। इनकी कॉम्प्लेक्सिटी बढ़ती जाती है क्वाड्रेटिक क्यूबिक वगैरह के लिए। कांस्टेंट कांस्टेंट रहता है। लॉगरथमिक थोड़ा सा बढ़ता है और लीनियर तो जितना इनपुट है वो उतना बढ़ता है। 45° एंगल बता सकते हैं। कांस्टेंट कॉम्प्लेक्सिटी तो वही चीजें हैं जो पहले हमने देखी थी। एल्गोरिदम की कॉन्सेंट कॉम्प्लेक्सिटी कब होती है? जब नंबर ऑफ़ ऑपरेशंस फिक्स्ड रहते हैं रिगार्डलेस ऑफ़ द इनपुट साइज। इनपुट बढ़ाओ, कम करो, जो करना है करो। इसको कुछ फायदा 2:07:23 फर्क नहीं पड़ता। कंडीशन क्या है? ये तब होती है जब फिक्स्ड नंबर ऑफ स्टेटमेंट्स एग्जीक्यूट होते हैं। सिर्फ एक बार। अभी इतने सारे हमने स्टेप काउंट में चीजें देखी। जहां-जहां इनिशियलाइजेशन था उसको हम फ्रीक्वेंसी वन दे रहे थे क्योंकि उनका कुछ लेना देना ही नहीं है ना इनपुट से। इसका एग्जांपल देख सकते हो आप कॉन्स्टेंट कॉम्प्लेक्सिटी एक कोई भी दे सकते हो। इंट सम = a + b बस यही दिखाना है कि इनपुट से कुछ लेना देना नहीं है इसका। प्रिंट f D सम इस तरीके से क्योंकि इसका इनपुट से कुछ लेना देना नहीं है। ये इसके खुद के A + B वेरिएबल्स को ऐड करके प्रिंट कर रहा है। बी गो ऑफ़ वन इसकी कॉम्प्लेक्सिटी होगी। कैरेक्टरिस्टिक्स क्या है? एग्जीक्यूशन टाइम कांस्टेंट होता है। इनपुट साइज़ से परफ़ॉर्मस इफ़ेक्ट नहीं होता। और कॉम्प्लेक्सिटी भी काफ़ी एफिशिएंट होती है। एग्ज़ांपल्स कोई अरे एलिमेंट को इंडेक्स से एक्सेस करना। ये मैंने दिया था आपको एग्जांपल कोई वेरिएबल को वैल्यू असाइन 2:08:24 करना स्टक के पुश और पॉप ऑपरेशंस आइडियल केस में क्योंकि उसमें पुश और पॉप कैसा होता है देखिए ये मान लो स्टक है आपका मैं मुझे अगर कुछ ए पुश करना है उसके अंदर तो बस ए पुश कर दिया बात खत्म और पॉप करना है अगर तो ए पॉप हो जाएगा एक सेकंड में तो ये डायरेक्टली होता है ये तो आइडियल केस का वही बोलना है कि ऊपर वाला अगर आपको अंदर का कोई एलिमेंट पॉप करना है जैसा ए सी डी अगर आपको अब अब ए पॉप करना है तो आप नहीं कर सकते लेकिन पॉप वैसा काम ही नहीं करता। पॉप सिर्फ ऊपर का ही पॉप करता है। वो डायरेक्टली पॉप होगा। जैसे ही आप कोई अरे के एलिमेंट को एक्सेस करते हो बिगो ऑफ़ वन टाइम में वैसे ही आप पुश और पॉप करते हो। फिर लीनियर कॉम्प्लेक्सिटी क्या है? ऐसा एल्गोरिदम जिसमें नंबर ऑफ़ ऑपरेशन इंक्रीस होते हैं। डायरेक्टली प्रोपोर्शनल टू द इनपुट साइज़। इनपुट बढ़ेगा आपके ऑपरेशंस भी उतने ही बढ़ जाएंगे। लूप अगर एग्जीक्यूट होता है n टाइम्स तो। तो तो इसका एग्जांपल भी वैसे ही आप दे सकते हो। लूप का ही देगा देना। फॉर अ इंट i = 0 इतने सारे तो हमने देखे अभी i < i + 2:09:29 इंट f i ऐसा एग्जांपल दे सकते हो आप लीनियर कॉम्प्लेक्सिटी का इसका स्टेप काउंट क्या होगा आप कमेंट सेक्शन में लिखना आपकी प्रैक्टिस हो जाएगी कैरेक्टरिस्टिक्स ऑफ़ लीनियर कॉम्प्लेक्सिटी एग्जीक्यूशन टाइम लीनियरली ग्रो होता है। इनपुट अगर आपने डबल किया तो अप्रोक्सिममेटली जो है एग्जीक्यूशन टाइम भी आपका डबल हो जाता है। एग्जांपल्स देख लो। अरे ट्रेवर्स करना हो गया। मैक्सिमम एलिमेंट ढूंढना है क्योंकि आपको पूरा सर्च करना पड़ेगा तभी आपको मैक्सिमम एलिमेंट मिलेगा। फिर लीनियर सर्च उसमें तो पूरा सर्च करना ही पड़ता है। फिर क्वाड्रेटिक कॉम्प्लेक्सिटी क्या है? एल्गोरिदम उसकी क्वाड्रेटिक कॉम्प्लेक्सिटी तब होती है जब नंबर ऑफ ऑपरेशंस स्क्वायर ऑफ द इनपुट साइज से प्रोपोर्शनल होते हैं। जब दो नेस्टेड लूप्स आपने यूज़ कर लिए उनको एग्ज़क्यूट कर वही वही दिखा देना फ़ इंटीजर i = 0 i m + और इसके अंदर दूसरा 2:10:32 लूप डाल देना है जैसा अभी तक हम देख रहे थे फॉर इंट j = 0 j m j प्लस प्लस इंट 2:10:51 तो ये क्या प्रिंट करेगा? तो देखिए सबसे पहले तो जब i ज़ीरो है। अब आप इनपुट क्या देते हो उसके ऊपर डिपेंड करता है। मान लो मैंने तीन इनपुट दे दिया। इनपुट n मैंने थ्री दे दिया। तो जब i ज़ीरो है तो i 0 लेस ैन थ्री है तो ये अगले इस पे चला जाएगा। फिर उसके लिए ये रन करेगा। तो फिर ये तीन बार यहां पे एग्जीक्यूट होगा। j ज़ीरो है, ज़ीरो < 3 है, 1 लेस < 3 है और 2 < 3 है। तो ऐसा तीन बार होगा ना? तो फिर तीन बार स्टार प्रिंट होंगे। फिर उसके बाद फिर से ये जाएगा। फिर उसके बाद i वन हो जाएगा। फिर से ये अंदर आएगा। J अ जो है 0 1 2 होगा। मतलब वो तीन बार फिर प्रिंट करेगा। फिर उसके बाद ये जो i है वो टू हो जाएगा। फिर से ये चीज़ प्रिंट होने वाली। फिर यह जो i है थ्री होगा लेकिन थ्री पर नहीं होने वाला क्योंकि हमने लेस देन n बोला है तो यह नौ आपको स्टार प्रिंट होते हुए दिखेंगे तो आपको ये समझ में आता है कि जब आप n3 बोल रहे हो तो स्टार कितने प्रिंट हो रहे हैं n मतलब 3 का स्क्वायर 2:11:53 इस तरीके से फिर कैरेक्टरिस्टिक्स ग्रोथ काफी फास्ट रहती है बिगो ऑफ़ n से इनपुट साइज आपने डबल कर दिया अ तो फिर अप्रोक्सिममेटली फोर टाइम्स जो है आपके ऑपरेशंस इनक्रीस हो जाते हैं क्योंकि टू का स्क्वायर 4 है ना वो हिसाब से फिर एग्जांपल्स बबल सॉर्ट सिलेक्शन सॉर्ट हर एलिमेंट को कंपेयर करना है दूसरे एलिमेंट के साथ तो वो बिग ऑफ़ n² हो गया क्यूबिक कॉम्प्लेक्सिटी सेम चीज़ है बस क्यूब है यहां पे एल्गोरिदम की क्यूबिक कॉम्प्लेक्सिटी तब होती है जब ऑपरेशंस प्रोपोर्शनल होते हैं टू द क्यूब ऑफ़ द इनपुट साइड्स। अ जब तीन नस्टेड लूप्स का आप यूज़ कर रहे हो तो तब यहां पे होगा। तो वही चीज है। बस यहां पर आपको तीन नस्टेड ग्रुप्स डाल देने हैं। i = 0 i n y प्लस प्लस बस इसी को रिपीट कर देना और दो बार। 2:12:52 बस आई की जगह जे लिख देंगे यहां पे और यहां पे आई की जगह के लिख देंगे। 2:13:08 इस तरीके से और बस अगर वही प्रिंट f स्टार प्रिंट करेंगे तो आपको दिखाई देगा कि अ आप जितने जितना इनपुट दोगे जैसा अगेन अगर आपने यहां पे n2 दे दिया तो फिर क्या होगा पहले ये अंदर जाएगा फिर आठ स्टार आपको देखने को मिलेंगे कैसे आठ स्टार देखने देखने को मिलेंगे। i ज़ीरो होगा सब में। पहले तो i ज़ीरो होगा। फिर बाद में J के पास जाएगा। J भी ज़ीरो होगा। फिर ये इसके पास आएगा। फिर K रन करेगा जब अ तीनों कंडीशंस के लिए। मतलब जब J 0 है। i ज़ीरो है। फिर K रन करेगा ज़ीरो और वन के लिए। तो दो स्टार प्रिंट हो जाएंगे। फिर उसके बाद जब i ज़ीरो है और J वन है तब K फिर से प्रिंट करेगा। अ और फिर उसके बाद जब i 0 हो जाएगा 0 ही रहेगा j2 नहीं होने वाला फिर क्योंकि j2 2:14:08 इसलिए नहीं होगा क्योंकि n ही टू है ना तो 2 लेस < 2 कैसे होगा 2 लेस < 2 इज़ नॉट राइट फिर ये i वन हो जाएगा और अ j जो है फिर ज़ीरो हो जाएगा फिर जो है यहां पे k फिर से ज़ीरो वन प्रिंट करेगा देन अगेन i वन हो जाएगा जे फिर फिर से वन होगा और K जो है यहां पे 0 1 इस तरीके से। फिर लास्ट में अ i 0 था ये ज़ीरो था। P तो यहां पे आपको दिखाई दे रहा है पहले ज़ीरो वन मतलब यहां दो स्टार प्रिंट होंगे। फिर यहां दो स्टार फिर यहां दो स्टार और यहां दो स्टार। तो 2 का क्यूब 8 तो आठ स्टार यहां पे आपको देखने को मिलेंगे। पहले दो फिर उसके बाद दो फिर उसके बाद दो फिर उसके बाद दो। तो इसका मतलब है कि 2 का क्यूब आपको देखने को मिलेगा। जो आपने इनपुट लिखा था वो हिसाब से कैरेक्टरिस्टिक्स ऑफ क्यूबिक कॉम्प्लेक्सिटी ग्रोथ जो है वेरी रैपिड होती है। इनपुट साइज आपने डबल कर दिया तो अप्रोक्समेटली एट टाइम्स जो है आपके ऑपरेशंस बढ़ जाएंगे। बिकॉज़ टू का क्यूब इज़ 2:15:09 एट। इस तरीके से एग्जांपल्स देख लो। मैट्रिक्स मल्टीप्लिकेशन बेसिक मेथड। फिर कुछ ग्राफ एल्गोरििदम्स थ्री डायमेंशनल डेटा प्रोसेसिंग को इतनी टाइम कॉम्प्लेक्सिटी लगती है। फिर है अपनी लॉगरिथमिक कॉम्प्लेक्सिटी जो बेस्ट है। एकदम बेसिक भी नहीं है और जो है बहुत ज्यादा आपकी मेमोरी भी नहीं यूज़ कर लेती। एल्गोरिथम की लॉगरिथमिक कॉम्प्लेक्सिटी तब होती है जब इनपुट साइज रिपीटेडली रिड्यूस होता है बाय अ कॉन्सेंट फैक्टर। कंडीशन क्या है इसमें? जब इनपुट को आपने दो तीन या फिर कोई कॉन्सेंट वैल्यू से डिवाइड किया तो उसका वो log बन जाएगा। जैसे मान लो अगर आप दो से डिवाइड करते हो तो log टू द बेस 2n हो जाएगा। तीन से डिवाइड कर रहे हो बार-बार तो log 3n हो जाएगा। इस तरीके से। ठीक है? एग्जांपल देख लेते हैं इसका। वही कर देंगे फॉर इंट i = n अ i > 1 i = i राइट प्रिंट f 2:16:12 ठीक है? तो इसका भी स्टेप काउंट जो है आप लिखो नीचे कमेंट बॉक्स में थोड़ी सी आपकी और हो जाएगी। तो ये लॉगरथमिक कॉम्प्लेक्सिटी का एक एग्जांपल था। इसकी ग्रोथ जो है काफी स्लो होती है। ये एफिशिएंट है। इवन फॉर लार्ज इनपुट्स। इनपुट्स अगर बड़े-बड़े भी हैं तो इसका जो इनके जो ऑपरेशंस होते हैं वो कम होते हैं। डबलिंग इनपुट साइज इंक्रीसेस ऑपरेशंस ओनली स्लाइटली। अगर आपने डबल भी कर दिए इनपुट साइज़ को अ तो भी आपके जो ऑपरेशंस हैं वो कम ही रहने वाले हैं। फिर बाइनरी सर्च, एवीएल रिसर्च, रेड ब्लैक रिसर्च ये सब इसके एग्जांपल्स हैं। कंपैरिजन देख लेना है कॉम्प्लेक्सिटीज़ का। तो बिगो ऑफ़ वन मतलब सिंपल स्टेटमेंट इनिशियलाइज़ेशन वगैरह। बिगो ऑफ़ log m लूप डिवाइडिंग इनपुट साइज़। लूप में अगर i अगर आपको दिख गया i = i / 2 तो ये ऐसी कुछ चीजें होंगी तो फिर वो log हो जाएगा। सिंगल लूप अगर है तो बिगो ऑफ़ n दो लूप है तो बिगो ऑफ़ n² तीन लूप है तो बिगो ऑफ़ n एग्जांपल्स देख लो क्यूबिक अच्छा ये तो मैंने अभी अब आते हैं एल्गोरिथमिक स्ट्रेटजीस के ऊपर 2:17:14 काफी सिंपल थ्योरेटिकल टॉपिक है तो आसानी से हो जाएगा। तो एल्गोरिथमिक डिज़ाइन स्ट्रेटजीज़ होते क्या है? तो ये सिस्टमैटिक अप्रोचेस होते हैं जिनका यूज़ करके हम एफिशिएंट एल्गोरिदम्स बना सकते हैं। ठीक है? कंप्यूटेशनल प्रॉब्लम्स को सॉल्व करने के लिए। तो हमारे पास एक मेथड ऑलरेडी दिया हुआ है। स्ट्रेटजीस दी हुई है जिनका यूज़ करके हम एल्गोरिदम्स बनाएंगे। अलग-अलग प्रॉब्लम्स के अलग-अलग कैरेक्टरिस्टिक्स होंगे। तो एक सिंगल मेथड आप हर प्रॉब्लम के लिए यूज़ नहीं कर सकते। ये स्ट्रेटजीस क्या करते हैं? हमें टाइम कॉम्प्लेक्सिटी कम करवाने में हेल्प करते हैं। स्पेस कॉम्प्लेक्सिटी और ओवरऑल कंप्यूटेशनल कॉस्ट ऑफ़ एल्गोरिदम्स। तो ये स्ट्रेटजीज़ का यूज़ करके हम एल्गोरिदम्स डिज़ाइन करेंगे। खुद से डायरेक्टली आप कोई प्रॉब्लम को नहीं सॉल्व करोगे। तो ये स्ट्रेटजीस जहां मैच हो रही है आपके एल्गोरिदम के लिए, आपके प्रॉब्लम के लिए वो स्ट्रेटजी आप यूज़ करना। क्यों यूज करना चाहिए इनको? क्योंकि कॉम्प्लेक्स प्रॉब्लम्स को आप एफिशिएंटली सॉल्व कर पाओगे। परफॉर्मेंस इंप्रूव हो जाएगा आपका। एग्जीक्यूशन टाइम और मेमोरी यूसेज कम होगा और सिस्टमैटिक अप्रोच मिलेगा प्रॉब्लम सॉल्विंग के लिए और ऑप्टिमाइज्ड और 2:18:15 स्केलेबल सशंस जो है बनाने में आपको हेल्प मिलेगी। फिर कैरेक्टरिस्टिक्स अगर देखोगे तो करेक्ट रिजल्ट्स मिलेंगे। एफिशिएंट है ये इन टर्म्स ऑफ़ टाइम एंड मेमोरी। समझना इंप्लीमेंट करना भी आसान है और लार्ज इनपुट्स के लिए स्केलेबल है। अ जो प्रॉब्लम आपको सॉल्व करना है उसके लिए जो सूटेबल स्ट्रेटजी है आप यूज़ कर सकते हैं। कॉमन एल्गोरिदम डिज़ स्ट्रेटजीज़ देख लो। सबसे पहले है ब्रूट फ़ोर्स। ब्रूट फ़ोर्स स्ट्रेटजी में क्या होता है? आपको कैसा तैसा करके वो सॉल्व करना है। बस कुछ ऑप्टिमल स्यूशन चाहिए, अच्छा स्यूशन चाहिए। ऐसा कुछ नहीं। टाइम कॉम्प्लेक्सिटी कम होनी चाहिए। आप आप बोलते हो टाइम कॉम्प्लेक्सिटी गई भाड़ में, स्पेस कॉम्प्लेक्सिटी गई भाड़ में। हमको बस सॉल्व करना है उसको। तो उसको ही बोलते हो आप ब्रूट फोर्स। बस ब्रूट फोर्स लगा के सॉल्व करना है। डिवाइड एंड कॉनकर। डिवाइड एंड कॉनकर में आप क्या करते हो? डिवाइड करते हो एक प्रॉब्लम को और फिर उसको सॉल्व करते हो। मतलब डिवाइड कर देते हो सब प्रॉब्लम्स में। एक सिंगल प्रॉब्लम को और वो सब प्रॉब्लम्स को आप सॉल्व करते हो। 2:19:16 लास्ट में एक फाइनल स्यूशन बन जाता है। फिर ग्रीडी मेथड। ग्रीडी मेथड में आप आगे का नहीं सोचते, पीछे का नहीं सोचते। बस अभी अभी आपको क्या चाहिए? आप उसके लिए ग्रीडी रहते हो। अभी क्या ऑप्टिमल मिल रहा है क्या कुछ उतना ही उठाते हो बस आप। फिर डायनेमिक प्रोग्रामिंग में क्या होता है? अ आप सॉलशंस सेव करके रखते हो। स्टोर करके रखते हो। सेव स्टोर सॉलशंस ताकि अगर बाद में जरूरत पड़े तो आप उन्हें यूज़ कर सको। फिर बैक ट्रैकिंग। बैक ट्रैकिंग में आप पीछे जा सकते हो। मतलब अगर मान लो आप कुछ सॉल्व करने की कोशिश कर रहे हो। सॉल्व करते गए लेकिन कुछ गलत हो गया सॉल्व करते-करते तो आप पीछे के स्टेप पे चले जा सकते हो। उसी को बैक ट्रैकिंग कहा जाता है। फिर ब्रांच एंड बाउंड। इसमें क्या होता है? अलग-अलग जो है आप तरीकों से सॉल्व करते हो। सॉल्व करते-करते अगर आपको लगता है कि ये सॉल्यूशन कुछ गलत नहीं गलत लग रहा है तो आप उसको निकाल दे सकते हो। तो वही ब्रांच अनबाउंड है। ब्रांचेस आप बनाते हो और उन्हें फिर बाउंड कर। एप्लीकेशनेशंस सर्चिंग एंड सॉर्टिंग एल्गोरिदम्स के लिए ग्राफ एल्गोरिदम्स नेटवर्क राउटिंग आर्टिफिशियल इंटेलिजेंस ऑप्टिमाइजेशन 2:20:18 डेटाबेस ये सारी चीजों में एल्गोरिदम डिजाइन स्ट्रेटजीज़ आप यूज़ कर सकते हो। अब आते हैं डिवाइड एंड कॉनकर पे। तो एल्गोरिदम डिज़ाइन स्ट्रेटजी ये कौन सी है? डिवाइड एंड कॉनकर मैंने जस्ट आपको बोला था इसमें आप एक प्रॉब्लम को स्मॉलर सब प्रॉब्लम्स में डिवाइड करते हो और हर सब प्रॉब्लम को इंडिपेंडेंटली आप सॉल्व करते हो। और फिर उसके जो सॉल्यूशन आते हैं उन सबको आप कंबाइन करके एक फाइनल आंसर निकाल देते हो। काफी एफिशिएंट टेक्निक है लार्ज और कॉम्प्लेक्स प्रॉब्लम्स को सॉल्व करने की। ये देखिए एक प्रॉब्लम है वो प्रॉब्लम को जो है अ आप क्या करते हो? सब प्रॉब्लम्स में डिवाइड करते हो। उन सब प्रॉब्लम्स को स्पेसिफिकली सॉल्व करते हो अलग से और फिर उनको मिला के आप सशंस बनाते हो और वो सॉशंस लास्ट में आप डिवाइड करते हो तो आपको आपके एक्चुअल प्रॉब्लम का फाइनल सॉल्यूशन मिलता है। तो प्रॉब्लम से सब प्रॉब्लम बनाओ और सब प्रॉब्लम से उनको उनको सॉल्व करो और फिर सब प्रॉब्लम के आपको सब सॉलशंस मिलेंगे और उनको भी मिक्स करोगे तो फाइनल सॉल्यूशन आपको मिल जाएगा। एग्जांपल देखेंगे तो अच्छे से समझिएगा। 2:21:19 जनरल स्ट्रक्चर क्या है इसका? P को आपके प्रॉब्लम को डिवाइड करना है। अगर प्रॉब्लम ऑलरेडी सॉल्व स्मॉल है तो डायरेक्टली सॉल्व कर दो। अगर नहीं है तो फिर उसको सब प्रॉब्लम्स में डिवाइड करो और हर सब प्रॉब्लम को रिकर्सिवली सॉल्व करते जाओ। लास्ट में सारे सॉलशंस कंबाइन कर देना। एग्जांपल मर्ज सॉर्ट। ठीक है? तो इसका एक एग्जांपल लेते हैं हम। अ 70 30 10 इसको हमको असेंडिंग ऑर्डर में जो है सॉर्ट करना है। ठीक है? तो डिवाइड एंड कॉनकर को कैसे यूज़ करेंगे? इसको हम पहले डिवाइड कर देंगे। 70 30 और 50 10 फिर इसको और फर्दर डिवाइड करेंगे। 70 अलग, 30 अलग। 50 अलग, 10 अलग। ठीक है? तो आपने डिवाइड वाला काम कर दिया। अब डिवाइड करने के बाद आप इतने पार्ट को बस सॉल्व करोगे। तो इतने को आपने अगर 2:22:20 सॉल्व कर दिया तो ये क्या हो जाएगा? 30 और 70 हो जाएगा सॉल्व हो के और ये हो जाएगा अ 10 और 50। ठीक है? फिर इसके बाद अगर आपने इसको और जोड़ दिया साथ में तो आपको जो है फाइनल सॉल्यूशन मिल जाएगा व्हिच इज 10 30 50 70 ओके तो इस तरीके से कुछ डिवाइड एंड कॉनकर का यूज़ किया जाता है। आप बोल सकते हो पहले आप डिवाइड करते हो। डिवाइड करने के बाद आप सॉल्व करते हो और लास्ट में सबको मर्ज कर देते हो। दैट इज़ हाउ डिवाइड एंड कॉनकर वर्क्स। कैरेक्टरिस्टिक्स देखना है तो एक लार्ज प्रॉब्लम को स्मॉलर सब प्रॉब्लम्स में डिवाइड किया जाता है। सब प्रॉब्लम्स रिकर्सिवली सॉल्व होते हैं। कंबाइन होते हैं सॉलशंस टू ऑब्टेन द फाइनल रिजल्ट। इससे टाइम कॉम्प्लेक्सिटी आपकी बहुत ज्यादा कम हो जाती है। और लार्ज डेटा सेट्स के लिए ये काफी सूटेबल है। एडवांटेजेस वही है जो पहले देखे थे। कॉम्प्लेक्स प्रॉब्लम सिंपलीफाई होंगे। 2:23:21 एफिशिएंसी बढ़ेगी। रिकर्सिव इंप्लीमेंटेशन सपोर्ट करता है। रिकर्सिव मतलब अ जो पुराना फंक्शन है वो आप बार-बार यूज़ कर सकते हो। जैसा मर्ज सॉर्ट का जो फंक्शन है वो सीधा-सीधा यहां भी अप्लाई किया जा सकता था। सीधा यहीं पे सॉर्ट कर दो ना। उसके बजाय हम क्या कर रहे हैं? उसको डिवाइड कर रहे हैं। फिर डिवाइड करके वो वाला जो फंक्शन है सॉर्ट वाला वो यहां पे लगा रहे हैं। फिर बाद में डबल से वो सॉर्ट वाला लगा रहे हैं। तो उसी को रिकर्सिव फंक्शन बोला जाता है। जो फंक्शन को आप बार-बार यूज़ करते हो। फिर पैरेलल प्रोसेसिंग होती है। पैरेलल मतलब यहां भी सॉर्ट किया। बाजू में वहां भी सॉर्ट किया। पैरेलल काम कर रहे हो दोनों जगह पे। ऑप्टिमाइज्ड एल्गोरिदम्स यहां पे आपको देखने को मिलते हैं। डिसएडवांटेज है कि बार-बार रिकर्सिव कॉल करने से एक्स्ट्रा मेमोरी लग सकती है। वो फंक्शनंस बार-बार कॉल कर रहे हो ना। फिर सॉलशंस कंबाइन करना थोड़ा कॉस्टली हो सकता है और हर प्रॉब्लम के लिए ये सूटेबल नहीं है। देन एप्लीकेशनेशंस बाइनरी सर्च मर्ज सॉर्ट क्विक सॉर्ट्स स्ट्रेस एंड मैट्रिक्स क्लोजेस्ट पेयर ऑफ़ पॉइंट्स ये सब आप याद कर सकते हो। तो टाइम कॉम्प्लेक्सिटी अगर इसकी देखनी है तो टाइम कॉम्प्लेक्सिटी इसकी होती है डिवाइड एंड 2:24:23 कॉनकर की a t n / b + f यहां पे ये जो a है वो होता है आपका अ नंबर ऑफ सब प्रॉब्लम्स और यह होता है कॉस्ट ऑफ डिवीजन कॉस्ट ऑफ डिवाइडिंग एंड मर्जिंग और ये n / b कॉस्ट होता है ऑफ सॉल्विंग द सब प्रॉब्लम्स। ठीक है? तो ऐसी आप टाइम कॉम्प्लेक्सिटी इसकी बता सकते हो। वैसे स्पेसिफिकली हर एल्गोरिदम की टाइम कॉम्प्लेक्सिटी अलग-अलग होती है। बस अ इस स्ट्रेटजी को आप यूज़ करोगे तो ये कॉम्प्लेक्सिटी आप दिखा सकते हो। अब आते हैं ग्रीडी स्ट्रेटजी। तो ग्रीडी स्ट्रेटजी एक एल्गोरिथम डिजाइन स्ट्रेटजी है जहां पर आप बेस्ट पॉसिबल चॉइस लेते हो हर स्टेप पे विद द होप ऑफ ऑब्टेनिंग एन ऑप्टिमल स्यूशन। ये आपका प्लान होता है कि ऑप्टिमल स्यूशन मिल जाएगा लेकिन मैं हर स्टेप पे ग्रीडी 2:25:24 स्ट्रेटजी लूंगा। हर स्टेप पे मैं ग्रीडी बनूंगा। ये अप्रोच में स्यूशन स्टेप बाय स्टेप बनता है बाय सेलेक्टिंग द लोकली ऑप्टिमल चॉइस एट एव्री स्टेज विदाउट रिकंसीडरिंग प्रीवियस डिसीजंस। ना कि आप प्रीवियस डिसीजंस देखते हो। आगे के देखते हो। अभी अभी ऑप्टिमल क्या है उतना लेते हो बस तो ये आपका प्रॉब्लम है तो वो सब प्रॉब्लम आप उसको सॉल्व करना है तो हर बार आप ग्रीडी चॉइस लेते हुए सॉल्व करते हो सब प्रॉब्लम जो भी है उसके साथ बस आपको एक ग्रीडी चॉइस लेनी है ग्रीडी चॉइस मतलब इन सिंपल वर्ड्स इट इज़ द ऑप्टिमल चॉइस एट दैट मोमेंट ठीक है उस मोमेंट की वो ऑप्टिमल चॉइस होती है इसमें प्रॉब्लम क्या होता है उस मोमेंट पे आप ऑप्टिमल चॉइस ले रहे हो ऐसा आप कुछ नहीं कर रहे कि आपका अच्छा आंसर आएगा आगे का सोच के कुछ कर रहे हो आप उस मोमेंट पे आपको जो अच्छा लग रहा है उतना आप कर लेते हो तो उस मोमेंट के लिए वो ठीक होगा लेकिन आगे जाके शायद आपकी गलत भी स्टेप हुई होगी। ये इसका प्रॉब्लम होता है। कैरेक्टरिस्टिक्स ऑफ़ ग्रीडी एल्गोरििदम लोकली ऑप्टिमल चॉइससेस बना लेता है ये और डिसीजंस इरिवर्सिबल होते हैं। बैक ट्रैकिंग वगैरह नहीं होती कि गलत हो गया पीछे चले जाओ। ऐसा नहीं कर सकते। अ 2:26:26 पॉसिबल सशंस एग्जामिन नहीं करता ये। सिंपल और एफिशिएंट है और हमेशा ये ग्लोबली ऑप्टिमल स्यूशन नहीं देगा क्योंकि आप उस मोमेंट पे देख रहे हो बस कौन सा ऑप्टिमल लग रहा है आपको। आगे का नहीं सोच रहे हैं आप ना कि पीछे का। तो, यह कॉइन चेंज प्रॉब्लम इसका एक एग्ज़ांपल है। जहां पे आपको चार कॉइंस दिए गए हैं और आपको अमाउंट दी गई है। आपको हर स्टेप पे सबसे बड़ा कॉइन चूज़ करना है। यही है उसका। तो, सब में पहले आप 20 यूज़ कर सकते हो क्योंकि 36 है तो 20 कम होंगे तो फिर 16 बचे। फिर नेक्स्ट पॉइंट पे आप 10 यूज़ कर सकते हो। 16 में से 10 चले गए तो फिर अब सिक्स बचे। अब सिक्स बचे तो आप फाइव का कॉइन यूज़ कर सकते हो। तो सिक्स में से फाइव कम कर दो वन बचेगा। फिर लास्ट में वन का कॉइन यूज़ कर लो। सो 1 - 1 इज़ 0. तो इस तरीके से आप यह कॉइंस यूज़ कर सकते हो। हर स्टेप पे मैंने सबसे हाईएस्ट वैल्यू का कॉइन चूज़ किया है यहां पे। तो वही है ग्रीडी स्ट्रेटजी। और एक एग्जांपल है इसका फाइंडिंग द लॉन्गेस्ट रूट इन अ ट्री यूजिंग ग्रीडी स्ट्रेटजी। तो अब इसमें से लॉन्गेस्ट रूट देखना है। तो कैसे लॉन्गेस्ट रूट देखोगे? देखिए स्टार्ट करेंगे रूट नोड से। अभी चेक करेंगे इसके 2:27:28 दोनों चाइल्ड नोड पे। सबसे बड़ा नोड कौन सा है? टू है या थ्री है? कंपेयर किया जाएगा। तो आपको समझ जाएगा कि टू तो छोटा है, थ्री बड़ा है। तो आप इधर चले जाओगे और आप जैसे ही इधर जाओगे ये वाला पाथ आप सेलेक्ट कर लोगे। ठीक है? तो ग्रीडी स्ट्रेटजी क्या कर रहा है? ये मोमेंट पे वो चॉइस देख रहा है। बस टू बड़ा है या थ्री बड़ा है और यहां वो चला गया। लेकिन अगर आप गौर से देखोगे तो ये एक्चुअली लॉन्गेस्ट रूट नहीं है। लॉन्गेस्ट रूट ये वाला है। 20 से टू और फिर यहां पे 10। अगर ये रूट लिया होता तो ये सही होता। लेकिन ग्रेडी स्ट्रेटजी तो आगे का देखता ही नहीं ना। वो बस उस मोमेंट पे देखता है। टू छोटा लग रहा है, थ्री बड़ा है, थ्री की तरफ से चले गए। तो यही एक इसकी लिमिटेशन बताता है कि ये हमेशा ग्लोबल ऑप्टिमल सॉल्यूशन नहीं दे सकता। ये उस मोमेंट पे दे देगा ऑप्टिमल। लेकिन आप ऐसा बोल नहीं सकते कि इससे आपको अ ग्लोबली ऑप्टिमल सॉल्यूशन देखने को मिलेगा। यही एग्जांपल बताना आप कि दो नड्स हैं। उसने वो राइट वाला ले लिया क्योंकि वो बड़ा था लेकिन ये लेफ्ट वाले से यहां पे ज्यादा आपको देखने को मिल रहा था। क्योंकि यहां पे अगर आप देखोगे सो दिस बिकम्स 20 + 2:28:32 3 + 1 व्हिच इज़ 24 और वही अगर हम ये वाला देखेंगे। सो दिस इज़ 20 + 2 22 + 10 32 एंड 32 इज़ ग्रेटर दैन 24. Okay? सो दिस इज़ हाउ इट फेल्स समटाइम्स। एडवांटेजेस है सिंपल और ईजी टू इंप्लीमेंट है। कंप्यूटेशन कम लगता है इसमें। ऑफन प्रोवाइड्स एफिशिएंट सशंस। ऑफन दे देगा ये एफिशिएंट सशंस आपको सूटेबल फॉर ऑप्टिमाइजेशन प्रॉब्लम्स और मेनी एग्जॉस्टिव सर्च मेथड्स से तो फास्ट ही है। डिसएडवांटेज है कि हमेशा गारंटी नहीं दे सकता है ऑप्टिमल सॉल्यूशन की। एक बार डिसीजन आपने बना दिया तो आप चेंज नहीं कर सकते। पीछे जाके वापस चेंज नहीं कर सकते। और ये सारे प्रॉब्लम्स के लिए सूटेबल नहीं है। फिर एप्लीकेशनेशंस ये सब आप याद कर सकते हो। एक्स्ट्रा शॉर्टेस्ट पाथ एल्गिरिदम प्रिंस मिनिमम स्पैनिंग ट्री क्रिसल्स मिनिमम स्पैनिंग ट्री। ये दोनों तो हम आगे सीखेंगे जब हम ट्री एंड ग्राफ वाला चैप्टर देखेंगे। फिर हाफमन कोडिंग, जॉब सीक्वेंसिंग, प्रॉब्लम, एक्टिविटी सेक्शन। बस ये ना थ्योरी के लिए आप याद कर 2:29:34 लेना ताकि आप एप्लीकेशनेशंस लिख पाओगे एग्जाम में। सो थैंक यू सो मच फॉर वाचिंग द वीडियो एंड डू सब्सक्राइब टू द चैनल। बहुत सारे लोग वीडियो देखते हैं, सब्सक्राइब नहीं करते। सो, प्लीज सब्सक्राइब एंड आगे के वीडियोस भी आपको मिलेंगे। नोट्स भी यूज़ करिए। नीचे लिंक है डिस्क्रिप्शन में। वहां से पूरे चैप्टर के आपको प्रॉपर पीडीएफ नोट्स मिल जाएंगे। एंड डू शेयर विद योर फ्रेंड्स एंड लाइक एंड सब्सक्राइब।