कैसे पता चलता है कि समय जटिलता विश्लेषण का उपयोग करने के लिए कौन सा अंकन है।


90

अधिकांश परिचयात्मक एल्गोरिथ्म कक्षाओं में, (बिग ओ) और जैसी पेश की जाती हैं, और एक छात्र आमतौर पर समय जटिलता को खोजने के लिए इनमें से एक का उपयोग करना सीखता है।OΘ

हालांकि, वहाँ इस तरह के रूप में अन्य अंकन, कर रहे हैं , और । क्या कोई विशिष्ट परिदृश्य हैं जहां एक संकेतन दूसरे के लिए बेहतर होगा?oΩω


2
इसके लागू होने के रूप में बहुत बेहतर नहीं है ...
16

जवाबों:


76

आप Landau संकेतन का उल्लेख कर रहे हैं । वे एक ही चीज़ के लिए अलग प्रतीक नहीं हैं, लेकिन पूरी तरह से अलग अर्थ हैं। कौन सा "बेहतर" है, पूरी तरह से वांछित कथन पर निर्भर करता है।

fO(g) अर्थ है कि , , asymptotically और स्थिर कारक तक तेजी से बढ़ता है; इसे एक रूप में सोचें । कठोर रूप है, अर्थात ।fgfo(g)<

fΩ(g) का सममित अर्थ है: कम से कम जितना तेज़ है । इसकी सख्त चचेरी बहन है। आप देख सकते हैं कि बराबर है ।fgωfΩ(g)gO(f)

fΘ(g) अर्थ है कि जितना तेजी से बारे में बढ़ता है ; औपचारिक रूप । (asymptotic समानता) इसका मजबूत रूप है। हम अक्सर मतलब जब हम का उपयोग ।fgfO(g)Ω(g)fgΘO

ध्यान दें कि कैसे और उसके भाई-बहन फ़ंक्शन क्लास हैं । यह और उनकी सटीक परिभाषाओं के बारे में बहुत जागरूक होना महत्वपूर्ण है - जो कि उनके साथ "अंकगणित" करते समय यह निर्भर कर सकता है कि कौन किसके साथ बात कर रहा है।O(g)

चीजों को साबित करते समय, अपनी सटीक परिभाषा के साथ काम करने का ध्यान रखें। Landau प्रतीकों के लिए कई परिभाषाएँ हैं (सभी एक ही मूल अंतर्ज्ञान के साथ), जिनमें से कुछ कार्यों पर कुछ सेट पर समान हैं लेकिन दूसरों पर नहीं।

सुझाए गए पढ़ने:

यदि आप लैंडौ संकेतन का उपयोग कठोर और ध्वनि तरीके से करने में रुचि रखते हैं, तो आप रूटन एट अल द्वारा हाल के काम में दिलचस्पी ले सकते हैं। [1]। वे स्पर्शोन्मुख संकेतन के लिए आवश्यक और पर्याप्त मानदंड तैयार करते हैं जैसा कि हम उन्हें एल्गोरिथम में उपयोग करते हैं, यह दर्शाता है कि आम परिभाषा उन्हें पूरा करने में विफल रहती है और (वास्तव में) काम करने योग्य परिभाषा प्रदान करती है।


  1. के । रतनन एट अल द्वारा एल्गोरिथ्म विश्लेषण के लिए ओ-नोटेशन की एक सामान्य परिभाषा । (2015)

5
मैं केवल यह चाहता हूं कि यद्यपि तरह काम करता है और तरह कार्य करता है , इसमें अंतर होते हैं; यह काम करता है खोजने के लिए मुश्किल नहीं है और ऐसी है कि और । Ω ग्राम हे ( जी ) Ω ( )OΩgffO(g)fΩ(g)
जैच लैंगली

1
फ़ंक्शन कक्षाओं के उल्लेख के लिए +1। और जैसे सामान कागज और पुस्तकों में हर जगह दिखाई देते हैं, जो पहली बार इन नोटेशन का सामना कर रहे लोगों के लिए भ्रमित हो सकते हैं। Ω ( 2 n )o(1)Ω(2n)
जनमो

7
@ZachLangley आप जो कहते हैं वह बहुत सच है। यहां कुल आदेश नहीं है। यह संभव है कि सभी में अप लाना खतरनाक है , लेकिन मुझे लगता है कि यह अंतर्ज्ञान निर्माण के उद्देश्य को पूरा करता है।
राफेल

42

बिग ओ: अपर बाउंड

"बिग ओ" ( ) अब तक का सबसे आम है। जब आप एक एल्गोरिथ्म की जटिलता का विश्लेषण करते हैं, तो अधिकांश समय, यह मायने रखता है कि इनपुट के आकार बढ़ने पर रन टाइम कितना बढ़ता है, इस पर कुछ ऊपरी बाध्यता है। मूल रूप से हम यह जानना चाहते हैं कि एल्गोरिथ्म को चलाने के लिए "बहुत लंबा" नहीं है। हम इसे वास्तविक समय इकाइयों (सेकंड) में व्यक्त नहीं कर सकते, क्योंकि यह सटीक कार्यान्वयन पर निर्भर करेगा (जिस तरह से प्रोग्राम लिखा गया है, कंपाइलर कितना अच्छा है, मशीन का प्रोसेसर कितना तेज़ है ...)। इसलिए हम मूल्यांकन करते हैं कि ऐसे विवरणों पर क्या निर्भर नहीं करता है, जो कि एल्गोरिथ्म को चलाने में कितना समय लगता है जब हम इसे बड़ा इनपुट देते हैं। और हम मुख्य रूप से परवाह करते हैं जब हम यह सुनिश्चित कर सकते हैं कि कार्यक्रम किया जाता है, इसलिए हम आम तौर पर जानना चाहते हैं कि इस तरह की-और इस तरह की मात्रा में समय लगेगा या कम।O

यह कहने के लिए कि एल्गोरिथ्म में इनपुट आकार लिए का रन टाइम है, इसका मतलब है कि कुछ निरंतर मौजूद है जैसे कि एल्गोरिथ्म सबसे चरणों में पूरा होता है, अर्थात रनिंग टाइम एल्गोरिथ्म रूप में उपवास के रूप में तेजी से बढ़ता है (एक स्केलिंग कारक तक)। नोटिंग इनपुट आकार , के लिए एल्गोरिदम का रन समय अनौपचारिक रूप से इसका मतलब है कि कुछ स्केलिंग कारक तक।n K KO(f(n))nKटी ( एन ) एन हे ( एन ) टी ( एन ) ( एन )Kf(n)fT(n)nO(n)T(n)f(n)

निम्न परिबंध

कभी-कभी, ऊपरी सीमा से अधिक जानकारी होना उपयोगी होता है। का काव्य है : यह व्यक्त करता है कि एक फंक्शन कम से कम उतनी ही तेजी से बढ़ता है। अर्थ है कि कुछ स्थिर , या इसे अनौपचारिक रूप से डालने के लिए, up कुछ स्केलिंग कारक के लिए।ΩOT(n)=Ω(g(n))T(N)Kg(n)KT(n)g(n)

जब एल्गोरिथ्म के चलने का समय ठीक से निर्धारित किया जा सकता है, तो और को जोड़ता है : यह व्यक्त करता है कि एक फ़ंक्शन के विकास की दर एक स्केलिंग कारक तक ज्ञात है। अर्थ है कि कुछ स्थिरांक और । अनौपचारिक रूप से, कुछ स्केलिंग कारक तक ।ΘOΩT(n)=Θ(h(n))Kh(n)T(n)Kh(n)KKT(n)h(n)

आगे के विचार

"छोटे" और का उपयोग जटिलता विश्लेषण में बहुत कम बार किया जाता है। लिटिल बड़ा तुलना में मजबूत है ; जहाँ एक ऐसी वृद्धि को इंगित करता है जो तेज़ नहीं है, इंगित करता है कि विकास सख्ती से धीमा है। इसके विपरीत, सख्ती से तेज विकास को इंगित करता है।oωoOOoω

मैं ऊपर चर्चा में थोड़ा अनौपचारिक रहा हूं। विकिपीडिया की औपचारिक परिभाषाएँ और अधिक गणितीय दृष्टिकोण है।

ध्यान रखें कि और समान में समान चिह्न का उपयोग एक मिथ्या नाम है। सख्ती से बोलना, चर के कार्यों का एक समूह है , और हमें लिखना चाहिए ।T(n)=O(f(n))O(f(n))nTO(f)

उदाहरण: कुछ सॉर्टिंग एल्गोरिदम

जैसा कि यह सूखा है, मैं एक उदाहरण देता हूं। अधिकांश सॉर्टिंग एल्गोरिदम में द्विघात सबसे खराब स्थिति होती है, अर्थात आकार इनपुट के लिए , एल्गोरिथम का रन समय । उदाहरण के लिए, चयन प्रकार में रन समय होता है, क्योंकि तत्व का चयन करने लिए कुल तुलनाओं के लिए तुलनाओं की आवश्यकता होती है । वास्तव में, तुलनाओं की संख्या हमेशा होती है, जो रूप में बढ़ती है । इसलिए हम चयन प्रकार की समय जटिलता के बारे में अधिक सटीक हो सकते हैं: यह ।nO(n2)O(n2)knkn(n1)/2n(n1)/2n2Θ(n2)

अब मर्ज सॉर्ट लें । मर्ज सॉर्ट भी द्विघात ( ) है। यह सच है, लेकिन बहुत सटीक नहीं है। वास्तव में मर्ज सॉर्ट में सबसे खराब स्थिति में का समय चल रहा है । चयन प्रकार की तरह, मर्ज सॉर्ट का कार्य प्रवाह अनिवार्य रूप से इनपुट के आकार से स्वतंत्र होता है, और इसका चलने का समय हमेशा होता है, जो एक स्थिर गुणन कारक तक होता है, अर्थात यह ।O(n2)O(nlg(n))nlg(n)Θ(nlg(n))

अगला, क्विकॉर्ट पर विचार करें । क्विकॉर्ट अधिक जटिल है। यह निश्चित रूप से । इसके अलावा, quicksort की सबसे खराब स्थिति द्विघात है: सबसे खराब स्थिति है । हालांकि, क्विकसॉर्ट का सबसे अच्छा मामला (जब इनपुट पहले से ही सॉर्ट किया गया है) रैखिक है: सबसे अच्छा हम सामान्य रूप से क्विकॉर्ट के लिए कम बाध्यता के लिए कह सकते हैं । मैं यहाँ प्रमाण नहीं दुहराऊँगा, लेकिन क्विकसॉर्ट की औसत जटिलता (इनपुट के सभी संभावित क्रमों पर लिया गया औसत) ।O(n2)Θ(n2)Ω(n)Θ(nlg(n))

सामान्य सेटिंग्स में एल्गोरिदम को सॉर्ट करने की जटिलता पर सामान्य परिणाम हैं। मान लें कि एक सॉर्टिंग एल्गोरिथ्म एक समय में केवल दो तत्वों की तुलना कर सकता है, हां-या-कोई परिणाम नहीं (या तो या )। फिर यह स्पष्ट है कि किसी भी छंटाई एल्गोरिथ्म का चलने का समय हमेशा (जहाँ को क्रमबद्ध करने के लिए तत्वों की संख्या होती है), क्योंकि एल्गोरिथ्म को हर तत्व की तुलना करने के लिए कम से कम एक बार यह जानना होगा कि वह कहाँ फिट होगा। इस निचले बाउंड को पूरा किया जा सकता है, उदाहरण के लिए, यदि इनपुट पहले से ही सॉर्ट किया गया है और एल्गोरिथ्म केवल प्रत्येक तत्व की अगले एक के साथ तुलना करता है और उन्हें क्रम में रखता है (यह तुलना है)। क्या कम स्पष्ट है कि अधिकतम चलने का समय आवश्यक हैxyx>yΩ(n)nn1Ω(nlg(n)) । यह संभव है कि एल्गोरिथ्म कभी-कभी कम तुलना करेगा, लेकिन कुछ निरंतर होना चाहिए जैसे कि किसी भी इनपुट आकार , कम से कम एक इनपुट होता है जिस पर एल्गोरिथ्म तुलना। प्रमाण का विचार एल्गोरिथ्म के निर्णय वृक्ष का निर्माण करना है, अर्थात एल्गोरिथ्म प्रत्येक निर्णयों के परिणाम से होने वाले निर्णयों का पालन करता है। चूँकि प्रत्येक तुलना हाँ-या-नहीं का परिणाम देती है, इसलिए निर्णय वृक्ष एक द्विआधारी वृक्ष है। वहाँइनपुट के संभावित क्रमांकन, और एल्गोरिथ्म को उन सभी के बीच अंतर करने की आवश्यकता है, इसलिए निर्णय पेड़ का आकारKnKnlg(n)n!n!। चूंकि पेड़ एक द्विआधारी पेड़ है, इसलिए इन सभी नोड्स को फिट करने के लिए गहराई लगती है । गहराई एल्गोरिदम को ले जाने वाले निर्णयों की अधिकतम संख्या है, इसलिए एल्गोरिथ्म को चलाने में कम से कम यह कई तुलनाएं शामिल हैं: अधिकतम चलने का समय ।Θ(lg(n!))=Θ(nlg(n))Ω(nlg(n))

¹ या अन्य संसाधन खपत जैसे मेमोरी स्पेस। इस उत्तर में, मैं केवल समय चलाने पर विचार करता हूं।


1
"हालांकि, क्विकसॉर्ट का सबसे अच्छा मामला (जब इनपुट पहले से ही सॉर्ट किया गया है) रैखिक है" यह सबसे खराब मामला है !!
user5507

@ user5507: वास्तव में, यह धुरी रणनीति पर निर्भर करता है। यदि पहला (या अंतिम) तत्व धुरी के रूप में चुना जाता है, तो आप सही हैं; लेकिन यदि आप मध्य तत्व, या प्रथम, मध्य, अंतिम के मध्य का चयन करते हैं, तो क्रमबद्ध इनपुट सबसे अच्छा मामला है।
चिरलू

"छोटे ओ और ω का उपयोग जटिलता विश्लेषण में बहुत कम बार किया जाता है।" यह अंतरिक्ष जटिलता विश्लेषण में सच नहीं है। समय जटिलता विश्लेषण में, आप आमतौर पर ओ और, का उपयोग करते हैं जब आप विशिष्ट ऑपरेशन (तुलना, डिस्क खोज, कैश मिस, आपके पास क्या है) की गिनती कर रहे हैं। लेकिन जब से आप हमेशा इंतजार कर सकते हैं और एक तेज कंप्यूटर खरीद सकते हैं, तो "दीवार का समय" हमेशा "एक स्थिर कारक तक" होता है, इसलिए बड़ा-ओ कहीं अधिक सामान्य है। अंतरिक्ष विश्लेषण में, सूचना सिद्धांत के कारण अक्सर कठिन निचले हिस्से होते हैं, इसलिए रिपोर्ट किए गए आकार को "f (n) + o (f (n)) बिट्स" के रूप में देखा जाना बेहद आम है, जहां f (n) निचली सीमा है।
छद्म नाम

जबकि मैं इसके बारे में सोचता हूं: यदि f (n) कुछ डेटा संरचना के आकार पर एक सैद्धांतिक निचली सीमा है, तो वह जो f (n) + O (1) (निरंतर ओवरहेड) का उपयोग करता है, उसे "निहित" कहा जाता है, जो उपयोग करता है f (n) + O (f (n)) (निरंतर सापेक्ष ओवरहेड) को "कॉम्पैक्ट" कहा जाता है, और वह जो f (n) + o (f (n)) का उपयोग करता है (सापेक्ष ओवरहेड अंतत: निरर्थक हो जाता है) को "succinct" कहा जाता है। "। यह जानने के लिए अच्छा शब्द है कि क्या आपको कभी उस स्थान पर काम करने की आवश्यकता है।
छद्म नाम

17

आमतौर पर का उपयोग ऊपरी सीमा (ऊपर से एक अनुमान) के लिए किया जाता है , जबकि का उपयोग निचले-सीमा (नीचे से एक अनुमान) के लिए किया जाता है , और जब वे मिलान करते हैं, तो का उपयोग किया जाता है, जिस स्थिति में आप उपयोग कर सकते हैं परिणाम बताने के लिए उनके (आमतौर पर) स्थान पर।OΩΘΘ


3
"आमतौर पर"? उनका इस्तेमाल किसी और चीज के लिए किया जा सकता है?
svick

1
@svick, हाँ, उदा जो एक ऊपरी-बाध्य कथन नहीं है। एक ऊपरी बाध्य बयान से मेरा मतलब है की तरह कुछ जो एक पर ऊपरी बाध्य व्यक्त करता है । P=DTime(nO(1))f=O(g)f
केव

4
दरअसल, केवह, यह एक ऊपरी बाध्य कथन है। " " का प्रचारक अंग्रेजी अनुवाद " उन समस्याओं का समुच्चय है, जिन्हें AT MOST एक बहुपद संख्याओं के प्रयोग से हल किया जा सकता है"। यदि आपका मतलब "सबसे ज्यादा" नहीं है, तो आपको चाहिए था । (दोनों कथन सही हैं, निश्चित रूप से।)P=DTime(nO(1))P=DTime(nΘ(1))
जेफई

@ जेफ़े, मैं इसे फ़ंक्शंस के सेट के बीच एक समानता के रूप में मानता हूं, लेकिन आप सही हैं, कोई इसे अधिक सामान्य अर्थों में एक ऊपरी बाध्यता के रूप में भी सोच सकता है।
केव

@JeffE वास्तव में, , जब से लेकिन । डी टी मैं एम ( Θ ( n लॉग इन करें n ) ) पी डी टी मैं एम ( Θ ( n लॉग इन करें n ) ) डी टी मैं एम ( n Θ ( 1 ) ) = PDTIME(nΘ(1))DTIME(Θ(nlogn))PDTIME(Θ(nlogn))DTIME(nΘ(1))=
डेविड रिचेर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.