मैं एक एल्गोरिथ्म प्रश्न हल कर रहा हूं और मेरा विश्लेषण यह है कि यह O (2 ^ sqrt (n)) पर चलेगा। कितना बड़ा है? क्या यह O (2 ^ n) के बराबर है? क्या यह अभी भी गैर-बहुपद समय है?
मैं एक एल्गोरिथ्म प्रश्न हल कर रहा हूं और मेरा विश्लेषण यह है कि यह O (2 ^ sqrt (n)) पर चलेगा। कितना बड़ा है? क्या यह O (2 ^ n) के बराबर है? क्या यह अभी भी गैर-बहुपद समय है?
जवाबों:
यह एक दिलचस्प सवाल है। सौभाग्य से, एक बार जब आप इसे हल करना जानते हैं, तो यह विशेष रूप से कठिन नहीं है।
कार्यों के लिए च : एन → आर + और छ : एन → आर + , हम च ∈ हे ( छ ) यदि और केवल यदि लिम sup n → ∞ च ( एन ) / जी ( एन ) ∈ आर ।
एक समारोह च : एन → आर + एक निरंतर वहां मौजूद सबसे बहुपद विकास में यदि और केवल यदि है कश्मीर ∈ एन ऐसी है कि च ∈ हे ( एन ↦ n कश्मीर )। आइए काम मनमाना लेकिन तय करने के लिए इस बाहर कश्मीर ∈ एन ।
lim sup n → ( 2 ( n 1/2 ) / n k =
lim n → n 2 ( n 1/2 ) / n k =
lim n → n e log (2) n 1/2 / e log ( n ) k =
lim n → log e log (2) n 1/2 - log ( n ) k = n ∞ R
पहली समानता सच है क्योंकि दोनों, नामांकित और भाजक, अखंड रूप से स्थिर कार्य कर रहे हैं। दूसरा समानता पहचान x y = e लॉग ( x ) y का उपयोग करता है । सीमा परिमित नहीं है क्योंकि अंतिम अभिव्यक्ति में प्रतिपादक ऊपर से बंधा हुआ नहीं है। एक औपचारिक प्रमाण दिए बिना, यह माना जा सकता है कि n 1/2 asymptotically लॉग ( n ) पर हावी है। इसलिए, विचाराधीन फ़ंक्शन बहुपद विकास से अधिक है।
हालांकि, इसकी वृद्धि सख्ती से घातीय की तुलना में कम है, जहां घातांक को परिभाषित किया गया है (मेरे द्वारा, इस उद्देश्य के लिए) के रूप में ओ> ( n ( 2 c n ) के लिए c > 0. यह और भी सीधा है।
lim sup n → c 2 c n / 2 ( n 1/2 ) = lim n → → 2 c n - n 1/2 = ∞ ∞ R
किसी निश्चित c > 0. के लिए, इसलिए, बहुपद और घातीय के बीच फ़ंक्शन की जटिलता कहीं न कहीं सही है।
कितना बड़ा है? ठीक है, O (2 ^ sqrt (n)) यह कितना बड़ा है :-(
इसका अर्थ क्या है, इसका अंदाजा लगाने के लिए, आपके एल्गोरिदम की कल्पना सिर्फ O (2 ^ sqrt (n)) नहीं होगी, लेकिन यह वास्तव में आपके कंप्यूटर पर ठीक 2 ^ sqrt (n) नैनोसेकंड लेता है:
n = 100: 2 ^ 10 = 1024 नैनोसेकंड। बिल्कुल समय नहीं। n = 1000: 2 ^ 31.xxx = 2 बिलियन नैनोसेकंड। दो सेकंड, यह ध्यान देने योग्य है। n = 10,000: 2 ^ 100 ^ 10 ^ 30 नैनोसेकेंड = 10 ^ 21 सेकंड = 30 खरब वर्ष।
यह 2 ^ n नैनोसेकंड से बहुत बेहतर है, जहां n = 100 में 30 ट्रिलियन वर्ष लगेंगे, लेकिन फिर भी समस्याओं का आकार जिसे आप हल कर सकते हैं, काफी सीमित है। यदि आप एक समस्या को "हल करने योग्य" मानते हैं यदि आपका कंप्यूटर इसे एक सप्ताह में हल कर सकता है, तो यह लगभग 6 x 10 ^ 14 नैनोसेकंड है, जो n = 2,400 के बारे में है। दूसरी ओर, n = 400 तक एक मिलीसेकंड में हल किया जा सकता है।
(व्यवहार में, n = 10,000 दोनों O (2 ^ sqrt (n)) और O (2 ^ n) के लिए बिल्कुल समान समय लगता है: इसके लिए प्रतीक्षा करने के लिए बहुत लंबा।)
यह किसी भी बहुपद से अधिक है। N ^ 1000 सेकंड के लिए एक और एल्गोरिथ्म लें। जो n = 2 के लिए व्यावहारिक रूप से असाध्य है। यह एल्गोरिथ्म लगभग 885 मिलियन तक n लंबा है। लेकिन वास्तव में, कौन परवाह करता है? उस समय दोनों एल्गोरिदम लेने वाले वर्षों की संख्या 9,000 अंकों की संख्या है।