हां, मैं कहूंगा कि कम्प्यूटेशनल जटिलता के बारे में कुछ जानना किसी भी गंभीर प्रोग्रामर के लिए जरूरी है। जब तक आप विशाल डेटा सेट के साथ काम नहीं कर रहे हैं तब तक आप जटिलता को नहीं जानते हुए भी ठीक रहेंगे, लेकिन यदि आप एक ऐसा प्रोग्राम लिखना चाहते हैं जो आपको गंभीर समस्याओं से निपटने की आवश्यकता है।
आपके विशिष्ट मामले में, कनेक्टेड घटकों को खोजने के आपके उदाहरण ने नोड्स तक के ग्राफ़ के लिए काम किया होगा । हालाँकि, यदि आपने नोड्स के साथ एक ग्राफ की कोशिश की, तो आपके लेक्चरर का एल्गोरिथ्म संभवत: 1 सेकंड में प्रबंधित हो जाएगा, जबकि आपके एल्गोरिथ्म में (जटिलता कितनी खराब है इसके आधार पर) 1 घंटा, 1 दिन, या शायद 1 अनंत काल भी लिया गया होगा।100.000100100,000
हमारे एल्गोरिदम पाठ्यक्रम में छात्रों की कुछ सामान्य गलती इस तरह से एक सरणी पर पुनरावृति करना है:
while array not empty
examine first element of array
remove first element from array
यह सबसे सुंदर कोड नहीं हो सकता है, लेकिन एक जटिल कार्यक्रम में प्रोग्रामर को इसके बारे में पता चले बिना ऐसा कुछ दिखाई दे सकता है। अब, इस कार्यक्रम में क्या समस्या है?
मान लीजिए कि हम इसे तत्वों के डेटा सेट पर चलाते हैं। निम्नलिखित कार्यक्रम की तुलना में, पूर्व कार्यक्रम धीमी गति से चलेगा ।50.000100,00050.000
while array not empty
examine last element of array
remove last element from array
मुझे आशा है कि आप इस बात से सहमत होंगे कि आपके कार्यक्रम को गुना तेज करने के लिए ज्ञान होना शायद एक प्रोग्रामर के लिए एक महत्वपूर्ण बात है। दो कार्यक्रमों के बीच अंतर को समझने के लिए जटिलता सिद्धांत के बारे में कुछ बुनियादी ज्ञान और उस भाषा के विवरण के बारे में कुछ ज्ञान की आवश्यकता होती है जिसे आप प्रोग्रामिंग कर रहे हैं।50.000
मेरी छद्मकोड भाषा में, "किसी तत्व को एक सरणी से हटाने" से सभी तत्व तत्व के दाईं ओर शिफ्ट हो जाते हैं और बाईं ओर से एक स्थिति को हटा दिया जाता है। यह अंतिम तत्व ऑपरेशन को हटा देता है क्योंकि ऐसा करने के लिए हमें केवल 1 तत्व के साथ बातचीत करने की आवश्यकता होती है। पहले तत्व को हटाना O ( n ) है क्योंकि पहले तत्व को निकालने के लिए हमें अन्य सभी n - 1 तत्वों को बाईं ओर एक स्थिति में स्थानांतरित करना होगा।ओ ( 1 )ओ ( एन )एन - 1
जटिलता में एक बहुत ही बुनियादी अभ्यास यह साबित करना है कि पहला कार्यक्रम 1 करेगाऑपरेशन जबकि दूसरा प्रोग्राम केवलएनऑपरेशनका उपयोग करता है। यदि आपn=100.000में प्लग करते हैं, तो आपदेखेंगे कि एक प्रोग्राम दूसरे की तुलना में बहुत अधिक कुशल है।12n2nn = 100.000
यह सिर्फ एक खिलौना उदाहरण है, लेकिन पहले से ही इसे दो कार्यक्रमों के बीच अंतर बताने के लिए जटिलता की एक बुनियादी समझ की आवश्यकता है, और यदि आप वास्तव में एक अधिक जटिल कार्यक्रम को डीबग / ऑप्टिमाइज़ करने की कोशिश कर रहे हैं, तो यह गलती है इसे खोजने के लिए और भी अधिक समझ में आता है। जहां बग है। क्योंकि इस तरह से एलीमेंट में एलीमेंट से एलिमेंट को हटाने जैसी गलती को कोड में एब्स्ट्रैक्ट द्वारा बहुत अच्छे से छिपाया जा सकता है।
एक समस्या को हल करने के लिए दो दृष्टिकोणों की तुलना करते समय जटिलता की अच्छी समझ होना भी मदद करता है। मान लीजिए कि आप अपने आप में जुड़े घटकों की समस्या को हल करने के लिए दो अलग-अलग दृष्टिकोणों के साथ आए थे: उनके बीच निर्णय लेने के लिए यह बहुत उपयोगी होगा यदि आप उनकी जटिलता का अनुमान लगा सकते हैं (बेहतर)।