नहीं, आपके कोड के समय जटिलता है O(2^|<DeltaTime>|)
,
वर्तमान समय की एक उचित कोडिंग के लिए।
कृपया, मुझे पहले मेरी अंग्रेजी के लिए माफी माँगने दें।
सीएस में बिग ओ क्या काम करता है और कैसे करता है
बिग ओ नोटेशन का उपयोग किसी प्रोग्राम के इनपुट को उसके रनिंग टाइम के साथ टाई करने के लिए नहीं किया जाता है ।
बिग ओ नोटेशन को पीछे छोड़ते हुए, दो मात्राओं के विषम अनुपात को व्यक्त करने का एक तरीका है ।
एल्गोरिथम विश्लेषण के मामले में ये दो मात्राएं इनपुट नहीं हैं (जिसके लिए पहले "माप" फ़ंक्शन होना चाहिए) और चलने का समय।
वे समस्या 1 के उदाहरण के कोडिंग की लंबाई और ब्याज की एक मीट्रिक हैं।
आमतौर पर इस्तेमाल होने वाले मेट्रिक्स होते हैं
- गणना के दिए गए मॉडल में एल्गोरिथ्म को पूरा करने के लिए आवश्यक चरणों की संख्या।
- गणना के मॉडल द्वारा, यदि कोई ऐसी अवधारणा मौजूद है, तो अंतरिक्ष की आवश्यकता है।
कथित तौर पर एक टीएम को मॉडल के रूप में माना जाता है ताकि पहला बिंदु संक्रमण 2 फ़ंक्शन के अनुप्रयोगों की संख्या का अनुवाद करता है , अर्थात "चरण", और दूसरा एक कम से कम एक बार लिखे गए विभिन्न टेप कोशिकाओं की संख्या का अनुवाद करता है ।
क्या यह भी अक्सर माना जाता है कि हम मूल एक के बजाय एक बहुपद से संबंधित एन्कोडिंग का उपयोग कर सकते हैं, उदाहरण के लिए एक फ़ंक्शन जो शुरू से अंत तक एक सरणी की खोज करता है, O(n)
इस तथ्य के बावजूद कि इस तरह के सरणी के एक उदाहरण की कोडिंग लंबाई होनी चाहिए। प्रत्येक तत्व के प्रतीकों की (स्थिर) संख्या n*b+(n-1)
कहां b
है। ऐसा इसलिए है क्योंकि b
गणना मॉडल का एक निरंतर माना जाता है और इसलिए ऊपर की अभिव्यक्ति और n
समान रूप से समान हैं।
यह भी बताता है कि क्यों एक एल्गोरिथ्म जैसे ट्रायल डिवीजन अनिवार्य रूप से एक एल्गोरिथ्म 3 होने के बावजूद एक घातीय एल्गोरिथ्म है ।for(i=2; i<=sqr(N); i++)
देखें इस ।
इसका अर्थ यह भी है कि बड़े ओ नोटेशन का उपयोग कई मापदंडों के रूप में किया जा सकता है जो समस्या का वर्णन करने की आवश्यकता हो सकती है, क्या कुछ एल्गोरिदम के लिए k पैरामीटर होना असामान्य नहीं है।
तो यह "इनपुट" के बारे में नहीं है या कि "कोई इनपुट नहीं है"।
अब केस का अध्ययन
बिग ओ नोटेशन आपके एल्गोरिथ्म पर सवाल नहीं उठाता है, यह मानता है कि आप जानते हैं कि आप क्या कर रहे हैं। यह अनिवार्य रूप से एक उपकरण है जो हर जगह लागू होता है, यहां तक कि एल्गोरिथ्म तक जो जानबूझकर मुश्किल हो सकता है (जैसे आपका)।
अपनी समस्या को हल करने के लिए आपने वर्तमान तिथि और भविष्य की तारीख का उपयोग किया है, इसलिए उन्हें किसी तरह समस्या का हिस्सा होना चाहिए; सीधे शब्दों में कहें: वे समस्या के उदाहरण का हिस्सा हैं।
विशेष रूप से उदाहरण है:
<DeltaTime>
जहां <>
किसी भी तरह का, गैर-पैथोलॉजिकल, पसंद का कोडिंग होता है।
बहुत महत्वपूर्ण स्पष्टीकरण के लिए नीचे देखें ।
तो आपका बड़ा ओ जटिलता समय बस है O(2^|<DeltaTime>|)
, क्योंकि आप कई पुनरावृत्ति करते हैं जो वर्तमान समय के मूल्य पर निर्भर करता है। अन्य संख्यात्मक स्थिरांक लगाने का कोई मतलब नहीं है क्योंकि एसिम्प्टोटिक संकेतन उपयोगी है क्योंकि यह स्थिरांक को समाप्त करता है (इसलिए उदाहरण के लिए उपयोग O(10^|<DeltaTime>|*any_time_unit)
निरर्थक है)।
जहां मुश्किल हिस्सा है
हमने ऊपर एक महत्वपूर्ण धारणा बनाई: कि गणना का मॉडल 5 बार प्रमाण पत्र देता है , और समय के साथ मेरा मतलब है (वास्तविक!) भौतिक समय। मानक कम्प्यूटेशनल मॉडल में ऐसी कोई अवधारणा नहीं है, एक टीएम को समय नहीं पता है, हम समय को चरणों की संख्या के साथ जोड़ते हैं क्योंकि यह हमारी वास्तविकता 4 है ।
हालांकि आपके मॉडल में समय गणना का हिस्सा है, आप यह कहकर कार्यात्मक लोगों की शब्दावली का उपयोग कर सकते हैं कि मेन शुद्ध नहीं है, लेकिन अवधारणा समान है।
इसे समझने के लिए ध्यान रखना चाहिए कि कुछ भी फ्रेमवर्क उस नकली समय का उपयोग करने से नहीं रोकता है जो उस भौतिक समय में दो बार, पांच, दस गुना तेजी से चलता है। इस तरह आपका कोड "आधा", "एक पांचवा", "एक दसवां" "समय" में चलेगा।
यह प्रतिबिंब एन्कोडिंग को चुनने के लिए महत्वपूर्ण है <DeltaTime>
, यह अनिवार्य रूप से लेखन का एक घनीभूत तरीका है <(करंट टाइम, टाइमइनफॉवेल)>। चूंकि समय मठ में मौजूद नहीं है, मौजूदा समय की कोडिंग बहुत अच्छी तरह से शब्द हो सकता है अब (या किसी अन्य विकल्प) एक दिन पहले के रूप में कोडित किया जा सकता है कल , वहाँ इस धारणा को तोड़ कर कि कोडिंग की लंबाई वृद्धि शारीरिक समय के रूप में आगे बढ़ता है (और डेल्टाटाइम में से एक घटता है)
हमें कुछ उपयोगी कार्य करने के लिए अपने कम्प्यूटेशनल मॉडल में ठीक से समय देना होगा।
एकमात्र सुरक्षित विकल्प जो हम कर सकते हैं वह है टाइमस्टैम्प्स को बढ़ती हुई लंबाई के साथ सांकेतिक शब्दों में बदलना (लेकिन अभी भी unary का उपयोग नहीं करना) क्योंकि भौतिक समय आगे बढ़ता है। यह उस समय की एकमात्र सच्ची संपत्ति है जिसकी हमें आवश्यकता है और एन्कोडिंग को पकड़ने की आवश्यकता है। क्या यह केवल इस प्रकार के एन्कोडिंग के साथ है कि आपके एल्गोरिथ्म ने शायद एक समय जटिलता दी है।
आपका भ्रम, यदि कोई है, तो इस तथ्य से उत्पन्न होता है कि वाक्यांशों में शब्द का समय 'इसकी समय जटिलता क्या है ?' और 'कितना समय लगेगा?' बहुत अलग चीजों का मतलब है
काश, शब्दावली समान शब्दों का उपयोग करती है, लेकिन आप अपने सिर में "कदम जटिलता" का उपयोग करने की कोशिश कर सकते हैं और अपने आप से अपना प्रश्न पूछ सकते हैं, मुझे आशा है कि आपको उत्तर को समझने में मदद मिलेगी ^ _ ^
1 यह भी एक स्पर्शोन्मुख दृष्टिकोण की आवश्यकता के रूप में बताता है क्योंकि प्रत्येक उदाहरण में एक अलग है, फिर भी मनमाना नहीं है, लंबाई है।
2 मुझे उम्मीद है कि मैं यहाँ सही अंग्रेजी शब्द का उपयोग कर रहा हूँ।
3 इसके अलावा, हम अक्सर log(log(n))
गणित में शब्द ढूंढते हैं।
4 आईडी एस्ट, एक कदम को कुछ परिमित पर कब्जा करना चाहिए, लेकिन शून्य नहीं, न ही जुड़ा हुआ, समय का अंतराल।
5 इसका मतलब यह है कि कम्प्यूटेशनल मोड में भौतिक समय के ज्ञान के रूप में, जो इसे अपनी शर्तों के साथ व्यक्त कर सकता है। एक समानता यह है कि .NET फ्रेमवर्क में जेनरिक कैसे काम करते हैं।
O(N)
जटिलता नहीं हैO(1)