क्या 2 ^ n और n * 2 ^ n एक ही समय जटिलता में हैं?


178

समय जटिलता पर मैंने जो संसाधन पाए हैं, वे इस बारे में स्पष्ट नहीं हैं कि समय जटिलता में शब्दों की अनदेखी करना ठीक है, विशेष रूप से गैर-बहुपद उदाहरणों के साथ।

यह मेरे लिए स्पष्ट है कि प्रपत्र n 2 + n + 1 में से कुछ दिया गया है , अंतिम दो शब्द महत्वहीन हैं।

विशेष रूप से, दो वर्गीकरण, 2 n , और n * (2 n ) को देखते हुए, पहले के समान क्रम में दूसरा है? क्या अतिरिक्त n गुणन वहाँ मायने रखता है? आमतौर पर संसाधन बस कहते हैं कि एक्स एन एक घातीय में है और बहुत तेजी से बढ़ता है ... फिर आगे बढ़ते हैं।

मैं समझ सकता हूं कि यह 2 एन के बाद से क्यों नहीं होगा, एन को काफी हद तक समाप्त कर देगा, लेकिन क्योंकि वे एक साथ नहीं जोड़े जा रहे हैं, तो दो समीकरणों की तुलना करते समय यह बहुत मायने रखेगा, वास्तव में उनके बीच का अंतर हमेशा n का कारक होगा। जो कम से कम कहने के लिए महत्वपूर्ण लगता है।


8
मेरी राय में, यह देखते हुए कि एनएलओजीएन को एन की तुलना में कड़ाई से धीमा माना जाता है, लेकिन ज्यादातर लोग वास्तव में कितना ध्यान रखते हैं, यह कहना सुरक्षित नहीं है कि एन 2 ^ एन केवल 2 ^ एन की तुलना में धीमा है, लेकिन लोगों के लिए "धीमा" पर्याप्त नहीं है। देखभाल करने के लिए ..
जैक

@tobias_k, मैं इस बिंदु को समझता हूं, लेकिन O (n!) के उदाहरण पर विचार करता हूं। क्या अतिरिक्त n शब्द वास्तव में अलग होगा? O (n!) को O (n * n) के रूप में O (n * n!) को O ((n + 1)!) उर्फ ​​एक ही ग्राफ में स्थानांतरित कर दिया जाता है। हालांकि वृद्धि समान है ... इस मामले में भले ही कोई सख्ती से बड़ा हो, क्या विकास अलग है? यह क्या समय जटिलता के बारे में परवाह नहीं है?
मैटी-डी

3
@JackWu लेकिन ज्यादातर लोग वास्तव में परवाह नहीं करते हैं कि जब तक आप एन के बजाय nlogn के साथ सैकड़ों लाखों रिकॉर्ड सॉर्ट करना चाहते हैं :)
CB

4
वास्तव में n! = o((n+1)!), यह है कि, यह सख्ती से asymptotically धीमी गति से बढ़ता है।
chepner

16
ध्यान दें कि यह जटिलता सिद्धांत के साथ कुछ भी नहीं है, यह aymptotics के बारे में "बस" है। साथ ही, कंप्यूटर विज्ञान पर इस तरह के सवाल शायद बेहतर हैं ।
राफेल

जवाबों:


231

Oइस प्रश्न का उत्तर देने के लिए आपको बड़े ओ ( ) की औपचारिक परिभाषा पर जाना होगा ।

परिभाषा यह है कि f(x)संबंधित है O(g(x))सीमा यदि और केवल यदि मौजूद है यानी अनंत नहीं है। संक्षेप में इसका मतलब यह है कि एक निरंतर अस्तित्व है , ऐसा मान कभी नहीं से अधिक होता है ।limsupx → ∞ (f(x)/g(x))Mf(x)/g(x)M

अपने प्रश्न के मामले में जाने दो और जाने दो । तो है जो अभी भी असीम बढ़ेगा। इसलिए से संबंधित नहीं है ।f(n) = n ⋅ 2ng(n) = 2nf(n)/g(n)nf(n)O(g(n))


5
परिभाषा को पढ़ने के लिए थोड़ा आसान है, यहाँ
एल्डन

3
औपचारिक रूप से, आप की सीमा नहीं ले सकते हैं O(f(x)/g(x)); बड़े-ओ अधिसूचना कार्यों के एक सेट के लिए आशुलिपि है, एक भी फ़ंक्शन नहीं जिसका मूल्य आप सीमित कर सकते हैं। हालाँकि, मुझे लगता है कि यह सच है कि आप दिखा सकते हैं कि f(x) = O(g(x))यदि lim(x->infinity) f(x)/g(x)मौजूद है।
चेपनर

44
सीमा का अस्तित्व नहीं है; अनुपात केवल पर्याप्त रूप से बड़े एक्स के लिए एक निरंतर द्वारा ऊपर से घिरा होना है। उदाहरण के लिए, 2 + पाप (x) O (1) में है, लेकिन (2 + sin (x)) / 1 x-> अनंत के रूप में एक सीमा तक नहीं आता है।
user2357112

2
इसके lim supबजाय परिभाषा सही होगी lim
डेविड एसेनस्टेट

11
@IvayloStrandjev कृपया ध्यान दें कि आपका संक्षिप्त विवरण गलत है। यह पर्याप्त रूप से बड़े के लिए सही होना चाहिए x, सभी मूल्यों के लिए नहीं x
K.Steff

85

यह देखने का एक त्वरित तरीका है कि n⋅2ⁿपरिवर्तनशील परिवर्तन करना है। चलो m = 2ⁿ। तब n⋅2ⁿ = ( log₂m )⋅m(बेस -2 लॉगरिदम को m = 2ⁿदेता है n = log₂m) के दोनों तरफ ), और आप आसानी से दिखा सकते हैं कि m log₂mतेजी से बढ़ता है m


3
धन्यवाद! मेरी राय में यह सबसे अच्छा जवाब है। औपचारिक परिभाषाओं के आधार पर सबूत सही हैं, लेकिन यदि आपके पास किसी तरह की ठोकर खाने के लिए है, तो एक बहुत ही आरामदायक और परिचित सादृश्य काम को सबसे अच्छा और सबसे तेज़ करेगा।
जॉन पी

1
मूर्खतापूर्ण सवाल, क्या है lg? आधार 2 में लघुगणक?
पियरे अरलाउड

3
यह एक आलसी संक्षिप्त नाम है। कंप्यूटर विज्ञान में, इसका मतलब आधार 2 होता है क्योंकि यह ज्यादातर विभाजन और जीत की रणनीतियों से उत्पन्न होता है। बिग-ओ नोटेशन में, यह कुछ भी प्रतिनिधित्व कर सकता है, क्योंकि किसी संख्या का बेस-एक्स लघुगणक अपने बेस-वाई लॉगरिथम से केवल एक स्थिर कारक द्वारा भिन्न होता है, एक्स और वाई की परवाह किए बिना।
चेपनर

3
मुझे पूर्वव्यापी lgभाग समय की चर्चा करते समय आधार-अज्ञेय के उपयोग के बजाय बेस -10 लॉगरिदम के लिए आईएसओ संकेतन पर ध्यान देना चाहिए । देखें en.wikipedia.org/wiki/Logarithm#Particular_bases
chepner

ठीक है, यकीन है, लेकिन मुझे नहीं पता कि यह अधिक स्पष्ट क्यों है कि मी लॉग मी मी की तुलना में तेजी से बढ़ता है, यह है कि n 2 ^ n 2 ^ n से अधिक तेजी से बढ़ता है।
djechlin

10

मैं मानता हूं कि इसमें n⋅2ⁿनहीं है O(2ⁿ), लेकिन मुझे लगा कि यह अधिक स्पष्ट होना चाहिए क्योंकि सीमा श्रेष्ठ उपयोग हमेशा पकड़ में नहीं आता है।

: बिग-ओ की औपचारिक परिभाषा के अनुसार f(n)में है O(g(n))अगर वहाँ स्थिरांक मौजूद c > 0और n₀ ≥ 0इस तरह के सभी के लिए है कि n ≥ n₀हमारे पास f(n) ≤ c⋅g(n)। यह आसानी से दिखाया जा सकता है कि इस तरह के कोई स्थिरांक मौजूद नहीं हैं f(n) = n⋅2ⁿऔर g(n) = 2ⁿ। हालाँकि, यह दिखाया जा सकता है कि g(n)अंदर है O(f(n))

दूसरे शब्दों में, n⋅2ⁿनिम्न से घिरा हुआ है 2ⁿ। यह सहज है। यद्यपि वे दोनों घातीय हैं और इस प्रकार अधिकांश व्यावहारिक परिस्थितियों में समान रूप से उपयोग किए जाने की संभावना नहीं है, हम यह नहीं कह सकते हैं कि वे एक ही क्रम के हैं क्योंकि 2ⁿआवश्यक रूप से धीमी गति से बढ़ता है n⋅2ⁿ


f(n) = 2*2^nमुझे लगता है कि आपका मतलब है n*2^n?
Tobias_k

4

मैं अन्य उत्तरों के साथ बहस नहीं करता हूं जो कहते हैं कि n⋅2ⁿतेजी से बढ़ता है 2ⁿ। परंतुn⋅2ⁿ बढ़ता है अभी भी केवल घातीय है।

जब हम एल्गोरिदम के बारे में बात करते हैं, तो हम अक्सर कहते हैं कि समय की जटिलता बढ़ती है। तो, हम पर विचार 2ⁿ, 3ⁿ, eⁿ, 2.000001ⁿ, या हमारेn⋅2ⁿ जटिलता के एक ही समूह घातीय के साथ बढ़ता है किया जाना है।

इसे थोड़ा गणितीय अर्थ देने के लिए, हम एक फंक्शन f(x)को विकसित करने के लिए विचार करते हैं (तेजी से नहीं) अगर तेजी से ऐसा मौजूद है c > 1, तोf(x) = O(cx)

के लिए n⋅2ⁿलगातार cकी तुलना में किसी भी संख्या अधिक से अधिक हो सकता है 2, आइए ले 3। फिर:

n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿऔर यह 1किसी के लिए कम है n

तो 2ⁿकी तुलना में धीमी गति से बढ़ता है n⋅2ⁿ, पिछले की तुलना में धीमी गति से बढ़ता है 2.000001ⁿ। लेकिन वे तीनों तेजी से बढ़ते हैं।


अंतिम उदाहरण में, n * 2 ^ n 2.000001 ^ n से n = 34,726,000 से अधिक है। उस बिंदु पर 2 ^ n 10 मिलियन से अधिक अंकों के साथ एक संख्या है, इसलिए यह वास्तव में कोई फर्क नहीं पड़ता ...
gnasher729

1
@ gnasher729 यह केवल एक स्थिरांक है जिसे हम f (n) के रूप में छोड़ सकते हैं और c * f (n) बड़े-हे के संदर्भ में समान जटिलता है। उदा। 40'000'000 * 2.000001 ^ n अभी n * 2 ^ n से बड़ा है। लेकिन आप सही हैं, यह वास्तव में कोई फर्क नहीं पड़ता, मैं कहूंगा कि यह वास्तव में मायने नहीं रखता है जब हम एक बार घातीय बढ़ता है (जब तक कि हमें केवल एन के छोटे मूल्य नहीं मिलते हैं)।
एंड्रे

2

आपने पूछा "क्या पहले के समान क्रम में दूसरा है? क्या अतिरिक्त n गुणन में कोई फर्क पड़ता है?" ये दो अलग-अलग प्रश्न हैं जिनके दो अलग-अलग उत्तर हैं।

n 2 ^ n विषमतापूर्वक 2 ^ n से अधिक तेजी से बढ़ता है। यही प्रश्न का उत्तर है।

लेकिन आप पूछ सकते हैं "अगर एल्गोरिथ्म ए में 2 ^ एन नैनोसेकंड लगते हैं, और एल्गोरिथ्म बी में एन 2 ^ एन नैनोसेकंड लगते हैं, तो सबसे बड़ा एन क्या है जहां मैं दूसरे / मिनट / घंटे / दिन / महीने / वर्ष में समाधान पा सकता हूं? और वर्ष?" उत्तर n = 29/35/41/46/51/54 बनाम 25/30/36/40/45/49 हैं। व्यवहार में बहुत अंतर नहीं है।

सबसे बड़ी समस्या का आकार जिसे समय टी में हल किया जा सकता है वह है ओ (एलएन टी) दोनों मामलों में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.