बिग ओ में लगातार कारकों की उपेक्षा के लिए औचित्य


20

कई बार यदि जटिलताएं 3n जैसे स्थिरांक हैं, तो हम इस स्थिरांक की उपेक्षा करते हैं और कहते हैं कि O (n) और O (3n) नहीं। मैं यह समझने में असमर्थ हूं कि हम ऐसे तीन गुना बदलाव की उपेक्षा कैसे कर सकते हैं? कुछ बात अन्य की तुलना में 3 गुना अधिक तेजी से भिन्न हो रही है! हम इस तथ्य की उपेक्षा क्यों करते हैं?


"कैन" के शब्दार्थ महत्वपूर्ण हैं। व्यवहार में, हम आमतौर पर ऐसे परिवर्तनों की उपेक्षा नहीं कर सकते हैं , लेकिन यह (अर्थात वास्तविक दुनिया में एल्गोरिदम के प्रदर्शन का वर्णन करना) वह नहीं है, जिसके लिए लैंडौ संकेतन बनाया गया है। अधिक सटीक formalisms कर अस्तित्व।
राफेल

जवाबों:


22

यह स्पष्ट करने के लिए कि कैसे स्पर्शोन्मुख संकेतन निरंतर कारकों को अनदेखा करते हैं, मैं आमतौर पर इस तरह से सोचता हूं: असममित जटिलता विभिन्न एल्गोरिदम के प्रदर्शन की तुलना करने के लिए नहीं है, यह समझने के लिए है कि इनपुट आकार के संबंध में व्यक्तिगत एल्गोरिदम का प्रदर्शन कैसा है।

उदाहरण के लिए, हम कहते हैं कि एक फ़ंक्शन जो कदम उठाता है, वह है , क्योंकि, मोटे तौर पर बड़े इनपुट के लिए, इनपुट आकार को दोगुना करना, उठाए गए कदमों की संख्या से दोगुना नहीं होगा। इसी तरह, मतलब है कि इनपुट आकार को दोगुना करना कदमों की संख्या को चौगुना कर देगा, और मतलब है कि इनपुट आकार को दोगुना करने से कुछ स्थिर कदमों की संख्या बढ़ जाएगी।( एन ) ( एन 2 ) ( लॉग एन )3nO(n)O(n2)O(logn)

यह कहने के लिए एक उपकरण है कि कौन सा एल्गोरिदम बेहतर पैमाने पर है, न कि जो बिल्कुल तेज हैं।


11

पहले, जैसा कि अन्य उत्तर पहले ही चुके हैं, , या इसे शब्दों में कहें, तो एक फ़ंक्शन यदि और केवल यदि यह । अर्थ है कि एक बिंदु और एक कारक जैसे कि सभी , । अब : सभी , , इसलिए । आक्षेप का प्रमाण समान है।( 3 एन ) हे ( एन ) = हे ( 3 एन ) एन सी 3 एन एन एफ ( एन ) सी 33 एन सी 1 = 3 सी 3 एन एन एफ ( एन ) सी 1n O(3n)=O(n)O(3n)O(n)f=O(3n)NC3nNf(n)C33nC1=3C3nNf(n)C1nf=O(n)

अब इस कारण पर कि यह सही उपकरण है। गौर करें कि जब हम एक एल्गोरिथ्म की जटिलता को मापते हैं, तो हम एक इकाई नहीं देते हैं। हम कुछ सेकंड या मशीन निर्देशों की गणना नहीं करते हैं: हम कुछ अनिर्दिष्ट प्राथमिक चरणों की गणना करते हैं जो प्रत्येक एक बंधे हुए समय को लेते हैं। हम ऐसा इसलिए करते हैं क्योंकि एक अलग मशीन पर एक ही एल्गोरिथ्म को निष्पादित करने से निर्देश के अनुसार आवश्यक समय बदल जाएगा - घड़ी की आवृत्ति गुणा करें और निष्पादन समय से । यदि हम एक ही एल्गोरिथ्म को एक अलग भाषा में, या एक अलग प्रणाली पर लागू करते हैं, तो प्रत्येक प्रारंभिक कदम द्वारा लिया गया समय अलग हो सकता है, लेकिन फिर से यह बहुत अधिक विस्तार से है: हम शायद ही कभी ऐसे मतभेदों की परवाह करते हैं।3f(n)f(n)/3

जब आप सटीक समय के बारे में परवाह करते हैं, तो स्पर्शोन्मुख जटिलता प्रासंगिक नहीं होती है: स्पर्शोन्मुख जटिलता आपको बताती है कि बहुत बड़े इनपुट आकारों के लिए क्या होता है, जो आपके द्वारा व्यवहार किए जाने वाले वास्तविक इनपुट आकार हो सकते हैं या नहीं भी हो सकते हैं।


o(g)limng(n)T(n)=1

2
@vonbrand क्या सिडगविक वास्तव में ऐसा कहता है? की सामान्य परिभाषा है कि (यानी, अंश को दूसरे तरीके से और सीमा शून्य है, एकता नहीं)T(n)o(g(n)limn(T(n)/g(n))=0
डेविड रिचरबी

3

Big-O की परिभाषा याद करें:

iff वहां मौजूद> 0 ऐसी है कि( एन ) सी जी ( एन ) सभी के लिए एनf(n)O(g(n))c>0f(n)cg(n)n

इस परिभाषा के तहत, हम है कि है हर निरंतर के लिए O अंकन का उद्देश्य इस तरीके से अभिव्यक्ति को सरल बनाना है। दरअसल, 3 एन जितनी जल्दी 3 बार बढ़ता है n , लेकिन वे दोनों रैखिक हैं। यह उचित है या नहीं - यह संदर्भ पर निर्भर करता है। लेकिन अगर आप O अंकन का उपयोग करने के लिए सहमत हैं , तो परिभाषा के अनुसार यह धारण करता है।dnO(n)dO3nnO


2
यह बिग-ओ का एक शानदार विवरण प्रदान करता है, लेकिन हम इस परिभाषा का उपयोग क्यों नहीं करते हैं।
jmite

जैसा कि मैंने लिखा - उद्देश्य हमारे जीवन को सरल बनाना है। ऐसा इसलिए है क्योंकि हम एक परमाणु ऑपरेशन की सही लागत नहीं जानते हैं, या इसलिए कि हम स्पर्शोन्मुख संकेतन के बारे में परवाह करते हैं। मुझे WHY एक दिलचस्प गणितीय सवाल नहीं है, बल्कि एक दार्शनिक है। हम, तकनीकी रूप से, इसके बिना कर सकते थे। यह सिर्फ चीजों को वास्तव में बदसूरत बना देगा और उनके साथ काम करना मुश्किल होगा।
शाऊल

3

बिग ओ अंकन प्रदर्शन भिन्नता को मापने के लिए एक इकाई मुक्त साधन है, इस प्रकार कम्प्यूटेशनल प्राइमेटिव की सापेक्ष लागतों के लिए अभेद्य है।

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

पहली टिप्पणी यह ​​है कि आपका प्रश्न काफी सटीक नहीं है। जब आप लगातार 3 एन में उपेक्षा करते हैं , तो वास्तव में "तीन गुना परिवर्तन" होता है, लेकिन दोनों एक ही दर से भिन्न होते हैं, और आप यह दावा नहीं कर सकते हैं कि "[एक] चीज अन्य की तुलना में 3 गुना अधिक तेजी से भिन्न हो रही है"।33n

Landau संकेतन में निरंतरता को नजरअंदाज करने का एक अच्छा कारण यह है कि हमारे पास कोई इकाई नहीं है जिस पर हम भरोसा कर सकें। जब कोई कहता है कि A, B से दो गुना दूर है, तो इसका मतलब किसी भी इकाई से स्वतंत्र रूप से है। हम इस पर सहमत हो सकते हैं भले ही आप इंच में दूरी मापते हैं जबकि मैं इसे प्रकाश-वर्ष में करता हूं। लेकिन पूर्ण दूरी माप के लिए निर्दिष्ट इकाइयों की आवश्यकता होती है, और इसका संख्यात्मक सूत्रीकरण चुने हुए इकाई पर निर्भर करता है।

एक एल्गोरिथ्म द्वारा लिया गया वास्तविक समय प्राथमिक कार्यों के निष्पादन समय पर निर्भर करता है, जो बहुत मशीन पर निर्भर है। आप प्राथमिक कार्यों की संख्या की गणना कर सकते हैं, लेकिन यह विश्वास करने का कोई कारण नहीं है कि वे सभी एक ही समय लेते हैं, और हमेशा कई ऑपरेशनों को एक ही में संयोजित करना संभव होता है, या छोटे रूप में एक ऑपरेशन को विघटित करते हैं, ताकि संख्या जब तक आप एक संदर्भ वर्चुअल मशीन पर सहमत नहीं होते हैं तब तक संचालन वास्तव में सार्थक नहीं है। संदर्भ स्वतंत्र होने का एक फायदा है।

दृष्टिकोण के लाभ का एक और दृष्टिकोण यह है कि विश्लेषण में आप सभी को ध्यान में रखते हुए प्रारंभिक संचालन की संख्या की गिनती कर रहे हैं, जब तक कि उनकी लागत में एक ऊपरी सीमा होती है और एक सकारात्मक निचली सीमा होती है। आपको व्यक्तिगत लागत के बारे में चिंता करने की आवश्यकता नहीं है।

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

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

O(n6)एमएल के लिए उपयोग किया जाने वाला एल्गोरिदम, जिसमें घातीय सबसे खराब स्थिति है। लेकिन यह एमएल उपयोगकर्ताओं को परेशान करने, या एमएल में बहुत बड़े कार्यक्रमों के लेखन को रोकने के लिए नहीं लगता है। स्थिर से अधिक है जो मायने रखता है। दरअसल, स्पर्शोन्मुख विश्लेषण इनपुट की जटिलता के कुछ माप के लिए एक संगणना की लागत से संबंधित है। लेकिन कच्चा आकार सही उपाय नहीं हो सकता है।

जटिलता निर्णायकता की तरह है, यह सैद्धांतिक रूप से खराब हो सकता है, लेकिन यह अधिकांश डेटा स्थान के लिए अप्रासंगिक हो सकता है ... कभी-कभी। एसिम्प्टोटिक जटिलता विश्लेषण एक अच्छा और अच्छी तरह से डिज़ाइन किया गया उपकरण है, इसके फायदे और इसकी सीमाएँ, सभी उपकरणों की तरह। स्थिरांक की खोज के साथ या उसके बिना, जो अर्थहीन हो सकता है, निर्णय का उपयोग करना आवश्यक है।


2

O(n)=O(3n)

n3n

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

अन्य मुख्य कारण यह है कि ये माप स्वतंत्र हैं। विभिन्न कंपाइलर और आर्किटेक्चर समान कोड को निर्देशों के बहुत अलग सेट में बदल देंगे। हालांकि, अगर हम जानते हैं कि निर्देशों की संख्या रैखिक, घातीय है, आदि, तो हमारे पास एल्गोरिदम की गति का एक विचार है, जो वास्तविक कंप्यूटर की परवाह किए बिना कि हम इसे संकलित या चलाते हैं।


1

f(n)=O(g(n))lim supnf(n)g(n)<+

g(n)=ng(n)=3n

O(n2)=O(.00005321n2+1000000000n+1046803)f=


2
=O(...)

fO(g)fO(nn2)f(x)=h(x)xx=n=
यो '

f(n)f

मैं आमतौर पर ऐसा ही करता हूं, यह जानते हुए भी कि यह निषेध का दुरुपयोग है;)
यो '

-1

मैं आपको बस समझाता हूं। हमें n = 100000 लेते हैं अब, 3n क्या है? यह 300000 है ( हाँ, यह n की 3 तह है ) लेकिन n ^ 2 क्या है ? 10000000000 । ( यह n का 1 लाख गुना है ) n n 2 की तुलना n के साथ करें। 3 नगण्य है जब हम 1 लाख से तुलना करते हैं। इसलिए, हम इसे हटा सकते हैं।

सोचो अगर n कुछ बिलियन या ट्रिलियन है। इस मामले में, फिर से हम कुछ बिलियन या ट्रिलियन के साथ 3 की तुलना करने जा रहे हैं। अब, आप जानते हैं कि हम 3 की उपेक्षा क्यों कर सकते हैं।


2
तीन साल अभी भी एक साल से अधिक का समय है।
युवल फिल्मस

मैं यह नहीं देखता कि यह किसी भी सहायक तरीके से प्रश्न का उत्तर कैसे देता है। यह निश्चित रूप से मौजूदा, वर्षों पुराने उत्तरों पर कुछ भी नहीं जोड़ता है।
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.