क्या आपने कभी सोचा है कि आपने जो कार्यक्रम लिखा था, उसे चलाने में इतना समय क्यों लगा? शायद आप जानना चाहेंगे कि क्या आप अपने कोड को अधिक कुशल बना सकते हैं। यह समझते हुए कि कैसे कोड रन आपके कोड को अगले स्तर पर ला सकता है। बिग-ओ नोटेशन आपके कोड को वास्तव में कितना कुशल है, इसकी गणना करने के लिए एक आसान उपकरण है।
बिग-ओ नोटेशन क्या है?
बिग-ओ नोटेशन आपको यह गणना करने का एक तरीका देता है कि आपके कोड को चलाने में कितना समय लगेगा। आप शारीरिक रूप से समय निकाल सकते हैं कि आपका कोड चलने में कितना समय लगता है, लेकिन उस पद्धति के साथ, छोटे समय के अंतर को पकड़ना कठिन है। उदाहरण के लिए, कोड के 20 और 50 लाइनों को चलाने के बीच का समय बहुत छोटा है। हालांकि, एक बड़े कार्यक्रम में, उन अक्षमताओं को जोड़ सकते हैं।
बिग-ओ नोटेशन मायने रखता है कि एक एल्गोरिथ्म को अपनी दक्षता को गेज करने के लिए कितने चरणों को अंजाम देना चाहिए। यदि आप दक्षता बढ़ाने के लिए अपने कोड को ट्यून करने की आवश्यकता है तो इस तरह से अपने कोड का अनुमोदन करना बहुत प्रभावी हो सकता है। बिग-ओ नोटेशन आपको अलग-अलग एल्गोरिदम को मापने के लिए सक्षम करेगा, इसके लिए चरणों की संख्या और एल्गोरिदम की दक्षता की तुलना करना आवश्यक है।
आप बिग-ओ नोटेशन की गणना कैसे करते हैं
आइए दो कार्यों पर विचार करें जो गणना करते हैं कि एक दराज में कितने व्यक्तिगत मोज़े हैं। प्रत्येक फ़ंक्शन मोज़े के जोड़े की संख्या लेता है और व्यक्तिगत मोज़े की संख्या देता है। कोड पायथन में लिखा गया है, लेकिन यह प्रभावित नहीं करता है कि हम चरणों की संख्या की गणना कैसे करेंगे।
एल्गोरिथम 1:
डीओ सीकाउंटर
व्यक्तिशोक = 0
एक्स के लिए रेंज (संख्याओफेयर):
individualSocks = individualSocks + 2
अलग-अलग लौटें
एल्गोरिथम 2:
डीओ सीकाउंटर
वापसी संख्याओ * जोड़े * 2
यह एक मूर्खतापूर्ण उदाहरण है, और आपको आसानी से यह बताने में सक्षम होना चाहिए कि कौन सा एल्गोरिथ्म अधिक कुशल है। लेकिन अभ्यास के लिए, आइए प्रत्येक के माध्यम से चलें।
सम्बंधित: प्रोग्रामिंग में एक समारोह क्या है?
यदि आप सीख रहे हैं कि अपना कोड कैसे प्रोग्राम करें, तो आपको यह समझना होगा कि क्या कार्य हैं।
एल्गोरिथम 1 के कई चरण हैं:
- यह वैरिएबल इंडिविजुअल को शून्य का मान प्रदान करता है।
- यह वैरिएबल i के लिए एक का मान प्रदान करता है।
- यह i के मान की तुलना numberOfPairs से करता है।
- यह दो व्यक्तियों को जोड़ता है।
- यह खुद को individualSocks का बढ़ा हुआ मूल्य प्रदान करता है।
- यह एक के बाद एक बढ़ाता है।
- यह तब चरण 3 से 6 के माध्यम से समान संख्या में (indiviualSocks - 1) के लिए वापस लूप करता है।
एल्गोरिथ्म के लिए हमें जितने चरण पूरे करने होंगे, उन्हें निम्न के रूप में व्यक्त किया जा सकता है:
4n + 2
चार चरण हैं जिन्हें हमें n बार पूरा करना है। इस स्थिति में, n संख्या संख्या के मान के बराबर होगा। 2 चरण भी हैं जो एक बार पूरे हो जाते हैं।
तुलना में, एल्गोरिथ्म 2 में सिर्फ एक कदम है। NumberOfPairs का मान दो से गुणा किया जाता है। हम इसे व्यक्त करेंगे:
1
यदि यह पहले से ही स्पष्ट नहीं था, तो अब हम आसानी से देख सकते हैं कि एल्गोरिथ्म 2 काफी अधिक कुशल है।
बिग-ओ विश्लेषण
आम तौर पर, जब आप एल्गोरिथ्म के बिग-ओ नोटेशन में रुचि रखते हैं, तो आप समग्र दक्षता में अधिक रुचि रखते हैं और चरणों की संख्या के ठीक-ठीक विश्लेषण में कम होते हैं। संकेतन को सरल बनाने के लिए, हम दक्षता के परिमाण को बता सकते हैं।
उपरोक्त उदाहरणों में, एल्गोरिथम 2 को एक के रूप में व्यक्त किया जाएगा:
ओ (1)
लेकिन एल्गोरिथ्म 1 को सरल बनाया जाएगा:
पर)
यह त्वरित स्नैपशॉट हमें बताता है कि एल्गोरिथ्म की दक्षता एन के मूल्य से कैसे जुड़ी है। एल्गोरिथ्म को पूरा करने के लिए जितने अधिक चरणों की आवश्यकता होगी उतनी बड़ी संख्या होगी।
रैखिक कोड
क्योंकि हम n के मूल्य को नहीं जानते हैं, यह सोचना अधिक सहायक है कि n का मूल्य उस कोड की मात्रा को कैसे प्रभावित करता है जिसे चलाने की आवश्यकता है। एल्गोरिथ्म 1 में हम कह सकते हैं कि संबंध रैखिक है। यदि आप चरणों की संख्या बनाम n का मान आपको एक सीधी रेखा मिलता है जो ऊपर जाती है।
द्विघात कोड
सभी रिश्ते रैखिक उदाहरण के रूप में सरल नहीं हैं। कल्पना कीजिए कि आपके पास 2 डी सरणी है और आप सरणी में मान खोजना चाहेंगे। आप इस तरह एक एल्गोरिथ्म बना सकते हैं:
डीईएफ़ सर्चवैल्यू (टारगेटवैल्यू, एरेसोक्ड):
फाउंडटार्ग = मिथ्या
एक्स के लिए में खोजा गया:
x में y के लिए:
अगर (y == targetValue):
फाउंडटार्ग = सत्य
वापसी
इस उदाहरण में, चरणों की संख्या, सरणी में सरणियों की संख्या और प्रत्येक सरणी में मानों की संख्या पर निर्भर करती है। तो, चरणों की सरलीकृत संख्या n * n या n number होगी।
यह संबंध एक द्विघात संबंध है, जिसका अर्थ है कि हमारे एल्गोरिथ्म में चरणों की संख्या n के साथ तेजी से बढ़ती है। बिग-ओ नोटेशन में, आप इसे इस प्रकार लिखेंगे:
O (n²)
सम्बंधित: सीएसएस फाइलों की जांच, सफाई और अनुकूलन के लिए उपयोगी उपकरण
लॉगरिदमिक कोड
हालाँकि और भी कई रिश्ते हैं, लेकिन हम जिस आखिरी रिश्ते को देखेंगे, वह है लॉगरिदमिक रिश्ते। अपनी मेमोरी को रीफ्रेश करने के लिए, एक नंबर का लॉग एक एक्सपोनेंट वैल्यू है, जो किसी आधार पर दिए गए नंबर तक पहुंचने के लिए आवश्यक है। उदाहरण के लिए:
log 2 (8) = 3
लॉग तीन के बराबर होता है क्योंकि यदि हमारा आधार 2 था, तो हमें नंबर 8 पर पहुंचने के लिए 3 के घातांक मान की आवश्यकता होगी।
तो, एक लघुगणक समारोह का संबंध एक घातीय संबंध के विपरीत है। जैसे ही n बढ़ता है, एल्गोरिथम को चलाने के लिए कम नए चरणों की आवश्यकता होती है।
पहली नज़र में, यह जवाबी सहज ज्ञान युक्त लगता है। एक एल्गोरिथ्म के कदम n की तुलना में धीमा कैसे बढ़ सकते हैं? इसका एक अच्छा उदाहरण द्विआधारी खोज है। आइए अनूठे मूल्यों की एक सरणी में संख्या की खोज करने के लिए एक एल्गोरिथ्म पर विचार करें।
- हम खोज करने के लिए एक सरणी से शुरू करेंगे जो सबसे छोटी से सबसे बड़ी तक क्रम में है।
- अगला, हम एरे के मध्य में मान की जाँच करेंगे।
- यदि आपकी संख्या अधिक है, तो हम अपनी खोज में निम्न संख्याओं को बाहर करेंगे और यदि संख्या कम थी, तो हम उच्च संख्याओं को बाहर कर देंगे।
- अब, हम शेष संख्याओं के मध्य संख्या को देखेंगे।
- फिर से, हम इस आधार पर आधी संख्या को छोड़ देंगे कि हमारा लक्ष्य मान मध्य मूल्य से अधिक है या कम है।
- हम इस प्रक्रिया को तब तक जारी रखेंगे जब तक हम अपना लक्ष्य नहीं खोज लेते, या यह निर्धारित नहीं कर लेते कि यह सूची में नहीं है।
जैसा कि आप देख सकते हैं, क्योंकि बाइनरी सर्च हर पास के संभावित मानों में से आधे को खत्म कर देता है, जैसा कि n बड़ा हो जाता है, जितनी बार हम चेक करते हैं उतने समय पर प्रभाव बमुश्किल प्रभावित होता है। बिग-ओ संकेतन में इसे व्यक्त करने के लिए, हम लिखेंगे:
O (लॉग (n))
बिग-ओ नोटेशन का महत्व
बिग-ओ राष्ट्र आपको एक त्वरित और आसान तरीका बताता है कि एक एल्गोरिथ्म कितना कुशल है। इससे विभिन्न एल्गोरिदम के बीच निर्णय लेना आसान हो जाता है। यह विशेष रूप से उपयोगी हो सकता है यदि आप किसी लाइब्रेरी से एल्गोरिथ्म का उपयोग कर रहे हैं और जरूरी नहीं कि यह पता हो कि कोड कैसा दिखता है।
जब आप पहली बार कोड करना सीखते हैं, तो आप रैखिक कार्यों से शुरू करते हैं। जैसा कि आप ऊपर दिए गए ग्राफ से देख सकते हैं, यह आपको बहुत दूर तक ले जाएगा। लेकिन जैसा कि आप अधिक अनुभवी हो जाते हैं और अधिक जटिल कोड बनाने लगते हैं, दक्षता एक समस्या बनने लगती है। अपने कोड की दक्षता को कैसे निर्धारित किया जाए, इसकी समझ आपको उन उपकरणों को देगी जो आपको दक्षता के लिए ट्यूनिंग शुरू करने और एल्गोरिदम के पेशेवरों और विपक्षों को तौलना चाहिए।
कोडिंग की गलतियों के कारण बहुत सारी समस्याएं हो सकती हैं। ये युक्तियां आपको प्रोग्रामिंग गलतियों से बचने और अपने कोड को सार्थक रखने में मदद करेंगी।
- प्रोग्रामिंग
- प्रोग्रामिंग
जे। सीटन एक विज्ञान लेखक है जो जटिल विषयों को तोड़ने में माहिर है। उन्होंने सस्काचेवान विश्वविद्यालय से पीएचडी की है; उनके शोध ने छात्र सगाई ऑनलाइन बढ़ाने के लिए खेल-आधारित शिक्षा का उपयोग करने पर ध्यान केंद्रित किया। जब वह काम नहीं कर रही है, तो आप उसे उसके पढ़ने, वीडियो गेम खेलने या बागवानी के साथ पाएंगे।
हमारे न्यूज़लेटर की सदस्यता लें
टेक टिप्स, रिव्यू, फ्री ईबुक और एक्सक्लूसिव डील्स के लिए हमारे न्यूज़लेटर से जुड़ें!
एक और कदम…!
कृपया हमें आपके द्वारा भेजे गए ईमेल में अपने ईमेल पते की पुष्टि करें।