मैंने जो देखा है, उससे ऐसा लगता है कि औपचारिक कंप्यूटर विज्ञान शिक्षा में बिग-ओ अंकन और समय और मेमोरी जटिलता पर बहुत अधिक जोर दिया जाता है ... हालांकि स्वयं-सिखाया जा रहा है, यह धारणा सुनने और पढ़ने पर आधारित है कि ऐसे लोगों के साथ क्या है कहाेे और लिखो।
हालांकि मेरा मानना है कि सामान्य विचार और अवधारणाएं महत्वपूर्ण हैं, मुझे विश्वास नहीं है कि संचार के उद्देश्यों को छोड़कर, इसके बारे में औपचारिकता (जैसे कि बड़े-ओ संकेतन और विभिन्न शब्दावली) मायने रखती है। सिर्फ इसलिए कि कोई औपचारिक संकेतन और शब्दावली से परिचित नहीं है, इसका मतलब यह नहीं है कि वे यह नहीं देख सकते हैं कि एक विशेष मामले में एक एल्गोरिथ्म दूसरे से कैसे और क्यों तेज होगा। लोग देख सकते हैं कि एक संतुलित बाइनरी ट्री की खोज में लगने वाला समय किसी भी औपचारिक अर्थ में जटिलता सिद्धांत के बारे में सीखे बिना नोड्स की संख्या के आधार -2 लघुगणक से संबंधित है, अगर वे समझते हैं कि पेड़ कैसे काम करता है और उच्च का एक उचित समझ है स्कूल का गणित। यह जानना महत्वपूर्ण है कि जटिलता और स्मृति उपयोग पर कब ध्यान देना है, और विशिष्ट और सबसे खराब मामलों पर विचार करना है, हालांकि ... लेकिन कुछ लोग नहीं करते हैं।
संकेतन और शब्दावली संचार के लिए महत्वपूर्ण हो जाते हैं। वे एक एल्गोरिथ्म के प्रदर्शन की मात्रा को किसी और को व्यक्त करने का एक अच्छा तरीका देते हैं। क्योंकि यह बार-बार कागजात और स्पष्टीकरण में आता है, इसलिए कम से कम इसकी अस्पष्ट समझ होना उपयोगी है ताकि उनका अनुसरण करना आसान हो।
तो हाँ, अवधारणाएँ महत्वपूर्ण हैं (हालांकि तब कम है जब संसाधन और समय पर्याप्त हैं लेकिन डेटा नहीं है)। लेकिन हालांकि अवधारणाएं महत्वपूर्ण हैं, उनमें से औपचारिककरण अक्सर इतना महत्वपूर्ण नहीं होता है - और किसी को यह याद रखने की आवश्यकता है कि धारणा और शब्दावली स्वयं अवधारणाओं के समान नहीं हैं।
संपादित करें:
मैं उन अवधारणाओं को समझने का दावा नहीं करूंगा जो किसी ने औपचारिक रूप से अध्ययन किए हैं, लेकिन बहुत सारे सामान्य विचार सिर्फ समझ में आते हैं। मुझे लगता है कि औपचारिक रूप से इसका अध्ययन करने में कोई मूल्य नहीं है, लेकिन इसके कुछ मूल्य अभी भी मौजूद हैं।
जैसा कि अवधारणाओं (औपचारिक अध्ययन के बाहर) को शुरू करने के लिए, मुझे लगता है कि एक अच्छी शुरुआत लोगों को यह सोचने के लिए प्रोत्साहित करना है कि डेटा संरचनाओं में कितनी मेमोरी ओवरहेड है, एल्गोरिदम में क्या कदम शामिल हैं, और ये चीजें अलग-अलग डेटा के साथ कैसे बदलती हैं।
यह काल्पनिक स्थितियों और परिवर्तनों पर विचार करने में भी मदद करता है, जैसे विचार करना कि क्या होता है यदि एक पेड़ संतुलित है या क्या होता है यदि यह संभव के रूप में असंतुलित होता है, या पेड़ में कितने स्तर होते हैं, तो अधिकांश नोड्स या कितने अधिक नोड्स हो सकते हैं। पकड़ अगर गहराई एक स्तर बढ़ जाती है। सोचने का यह तरीका आम तौर पर वैसे भी प्रोग्रामर के लिए उपयोगी है, न कि केवल जटिलता को देखते हुए; और अगर यह सोचने के लिए लागू किया जाए कि अलग-अलग परिस्थितियों में एल्गोरिदम और डेटा संरचनाएं कैसे प्रदर्शन करती हैं, तो यह स्वाभाविक रूप से एक ही दिशा में इंगित करता है क्योंकि जटिलता की अधिक औपचारिक परीक्षा होगी।
O(n^2)
इसका क्या मतलब है।