क्या Big O (logn) लॉग बेस ई है?


96

डेटा संरचनाओं के बाइनरी सर्च ट्री प्रकार के लिए, मुझे लगता है कि बिग ओ नोटेशन को आमतौर पर ओ (लॉगन) के रूप में नोट किया जाता है। लॉग में एक लोअरकेस 'एल' के साथ, यह प्राकृतिक लॉगरिदम द्वारा वर्णित बेस ई (एन) को लॉग करता है? सरल प्रश्न के लिए क्षमा करें, लेकिन मुझे हमेशा विभिन्न निहित लॉगरिदम के बीच अंतर करने में परेशानी होती है।


58
जैसा कि दूसरों ने स्पष्ट रूप से बताया है, इससे कोई फर्क नहीं पड़ता। सभी लॉगरिदम एक दूसरे से भिन्न होते हैं, जिसमें केवल एक आधार शामिल होता है। क्योंकि ये कारक स्थिरांक हैं, वे स्पर्शोन्मुख विश्लेषण के प्रयोजनों के लिए अप्रासंगिक हैं। दूसरा, जहां तक ​​निहित आधार का निर्धारण करना है, यह संदर्भ पर निर्भर करता है। अंगूठे के एक मोटे नियम के रूप में, निम्नलिखित का उपयोग करें: 1. जब एक गणितज्ञ लिखता है log nतो उसका मतलब प्राकृतिक लघुगणक होता है। 2. जब एक कंप्यूटर वैज्ञानिक लिखता है log nतो उसका मतलब बेस-टू होता है। 3. जब कोई इंजीनियर लिखता है log nतो उसका मतलब बेस-टेन होता है। ये आमतौर पर सच होते हैं।
जेसन

4
@ जैसन, एक और सम्मेलन (गणित के भीतर) यह है कि ln n का अर्थ है प्राकृतिक लघुगणक और लॉग n का आधार दस है। थिंक लिन फ्रेंच 'लॉगरिथम नेचरल' के लिए खड़ा है।
इंटरनेट मैन

2
लघुगणक का आधार प्रत्येक नोड वाले बच्चों की संख्या है। यदि यह एक बाइनरी ट्री है तो यह बेस 2 लॉग है।
पॉल

3
मैं आपके जवाब की सराहना करता हूं, जेसन, और यहां कुछ सोचने के बारे में है। जैसा कि मैंने शोध किया है कि लॉग किस आधार पर है (मैंने 2 मान लिया), मैंने एक ही उत्तर देखा है: यह कोई फर्क नहीं पड़ता क्योंकि आप निरंतर, log_10 (2) को समाप्त कर सकते हैं। इसके साथ मेरा मुद्दा यह है कि, उदाहरण के लिए: 5 log_10 (5) <5 जबकि 5 log_2 (5)> 5. मैंने अपनी गणना में जल्दी से प्रवेश किया ताकि ओ (एन लोगन) ओ की तुलना में बेहतर या बदतर रन समय हो। (एन)। आधार पर निर्भर करता है कि यह क्या मायने रखता है। इसलिए, मुझे वास्तव में लगता है कि इसका सही उत्तर यह होना चाहिए कि अधिकांश कंप्यूटर विज्ञान अनुप्रयोगों में लॉग इन का संदर्भ मूल रूप से आधार 2 है।
डग मीड

@ हसन, मैं कहूंगा कि ln (गणितज्ञ की व्याख्या) का उपयोग करना आसान है;)। अन्य दो उदाहरण वाजिब हैं।
घंटाघर

जवाबों:


77

एक बार बड़े-ओ () अंकन में व्यक्त होने के बाद, दोनों सही हैं। हालांकि, ओ की व्युत्पत्ति के दौरान () बहुपद, द्विआधारी खोज के मामले में , केवल 2 लॉग करें सही है। मुझे लगता है कि यह अंतर आपके प्रश्न के साथ शुरू करने के लिए सहज प्रेरणा थी।

इसके अलावा, मेरी राय के अनुसार, ओ (लॉग 2) लिखना एन) आपके उदाहरण के लिए बेहतर है, क्योंकि यह एल्गोरिथम के रन-टाइम की व्युत्पत्ति को बेहतर ढंग से बताता है।

बिग-ओ () संकेतन में, स्थिर कारक हटा दिए जाते हैं। एक लघुगणक आधार से दूसरे में परिवर्तित होने में एक स्थिर कारक द्वारा गुणा करना शामिल है।

तो O (लॉग एन) एक स्थिर कारक के कारण O (लॉग 2 एन) के बराबर है ।

हालाँकि, यदि आप आसानी से अपने उत्तर में लॉग 2 एन टाइप कर सकते हैं , तो ऐसा करना अधिक शैक्षणिक है। बाइनरी ट्री सर्चिंग के मामले में, आप सही हैं कि लॉग 2 एन को बड़े-ओ () रनटाइम की व्युत्पत्ति के दौरान पेश किया जाता है।

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


4
लेकिन यह बताते हैं कि करने के लिए बहुत आसान है log_2 nमें है Θ(log_a n)किसी भी आधार के लिए aहै, तो मुझे यकीन है कि मैं नहीं देख सकते कि आधार 2 उपयोग कर रहा है "और अधिक सही" हूँ।
bcat

1
Kinopkio और bcat, इसे उपयोगी बनने के लिए धन्यवाद। यह पहली बार में बहुत अच्छी तरह से नहीं लिखा गया था। :)
हीथ हुननिकट

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

11
"द्विआधारी खोज के मामले में ओ () बहुपद की व्युत्पत्ति के दौरान, केवल लॉग 2 सही है।" -1 खराब गणित के लिए। X (n) ~ O (f (n)) की परिभाषा यह कहती है कि सभी c> n_0 के लिए एक स्थिर c मौजूद है जैसे c * (f (n)) <x (n)। इस प्रकार विश्लेषण के दौरान निरंतर गुणांक पूरी तरह से अप्रासंगिक है।
आरएलबोंड

3
चूंकि log2 (x) log10 (x) / log10 (2) के बराबर है, आप इसे किसी भी तरह से प्राप्त कर सकते हैं। लॉग किसी भी बिंदु पर सख्ती से आधार 2 नहीं है।
rlbond

80

बिग ओ नोटेशन लॉगरिदमिक आधार से प्रभावित नहीं है, क्योंकि विभिन्न आधारों में सभी लॉगरिदम एक स्थिर कारक से संबंधित हैं , O(ln n)के बराबर है O(log n)

यहां छवि विवरण दर्ज करें


2
ग्राफिक्स साफ-सुथरे हैं लेकिन O () - बहुपद ... O () लागू होने से पहले की व्युत्पत्ति के बारे में सोचते हैं, केवल लॉग-बेस -2 बाइनरी सर्च के लिए सही है।
हीथ हुननिकट

1
@ हनीटैन्ट के नीचे: कोई भी स्वतंत्र आधार के लिए एक स्थिर कारक log_2 xसे भिन्न नहीं है । log_b xc(b)bx
जेसन

4
लेकिन आप उस बारे में क्यों बात कर रहे हैं, जब यह सवाल का कोई संबंध नहीं रखता है और केवल भ्रमित करने का काम करता है।
हॉब्स

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

4
@ हनीटोन्ट: यदि आप स्पर्शोन्मुख विश्लेषण कर रहे हैं, तो कोई बात नहीं। कि आप आखिरी मिनट तक इंतजार करते हैं कि कुछ बड़े-ओ को फेंकने के लिए इस तथ्य को नहीं बदलता है कि मैं अपने सभी लॉगरिदम को कुछ मूर्खतापूर्ण रूप से गुणा और विभाजित कर सकता हूं और सभी चरणों में आधार बदल सकता हूं। यही है, अगर मेरे पास कुछ विश्लेषण है जिसमें log_2 nमैं शामिल हूं, तो मैं बस में जा सकता हूं और log_2 nहर जगह बदल सकता हूं log_pi 2 * log_2 n / log_pi 2और फिर बस एक विश्लेषण के साथ समाप्त हो सकता है जो log_pi 2 * log_pi nहर जगह है। अब मेरा विश्लेषण इसके संदर्भ में है log_pi n
जेसन

9

यह वास्तव में कोई फर्क नहीं पड़ता कि यह किस आधार पर है, क्योंकि बड़े-ओ संकेतन को आमतौर पर केवल asymptotically उच्चतम आदेश दिखाते हुए लिखा जाता है n, इसलिए निरंतर गुणांक दूर हो जाएंगे। चूंकि एक अलग लॉगरिदम का आधार एक निरंतर गुणांक के बराबर है, इसलिए यह शानदार है।

उस ने कहा, मैं शायद लॉग बेस 2 मानूंगा।


@Kinopiko: वास्तव में इसके बारे में क्या गलत है? अधिक सटीक रूप से, मेरा उत्तर तथ्यात्मक रूप से आपके और यहां के अन्य लोगों से कैसे भिन्न है?
डैनियल प्राइडेन

आह, शायद "गुणांक" के उपयोग में मेरी गलती है। मैं स्पष्ट करने के लिए संपादित करूंगा।
डैनियल प्राइडेन

आपके उत्तर के साथ यह मेरा मुख्य मुद्दा था। इसके अलावा, यह थोड़ा अस्पष्ट है कि आप "वे अभी भी कुछ प्रभाव डालेंगे" से क्या मतलब है। किस पर कुछ असर?
bcat

1
आपका जवाब उच्चतम आदेश गुणांक पर चर्चा करता है। आपने जो कहा वह सही है जहां तक ​​यह जाता है, लेकिन यह कारण नहीं है कि लघुगणक आधार अप्रासंगिक है। कारण यह है कि विभिन्न आधार लघुगणक के बीच अंतर एक स्थिर है जो ओ () द्वारा अवशोषित होता है।

1
@Kinopiko: ठीक है। मुझे लगता है कि हम वही बात कह रहे हैं। मैं O (100) = O (1) कहूंगा क्योंकि O (100) = O (100 * 1) = O (C * 1) = O (1)। निरंतर भावों के अतिरेक से मेरा मतलब है। यही कारण है, आदेश के किसी भी निरंतर 1. है
डैनियल Pryden

7

दोनों सही हैं। इसके बारे में सोचें

log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))

2

हां, जब बड़े-ओ नोटेशन के बारे में बात करते हैं, तो आधार कोई फर्क नहीं पड़ता। हालांकि, कम्प्यूटेशनल रूप से जब वास्तविक खोज समस्या का सामना करना पड़ता है तो यह मायने रखता है।

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

का आनंद लें!

पॉल


आपके कहने का मतलब यह है कि एक बाइनरी ट्री की ऊँचाई लॉग एन है, एन लॉग एन नहीं, है ना?
सेल

1

तकनीकी रूप से आधार कोई मायने नहीं रखता है, लेकिन आप आमतौर पर इसे आधार -2 के रूप में सोच सकते हैं।


1

पहले आपको यह समझना चाहिए कि फ़ंक्शन के लिए इसका क्या मतलब है (n) O (g (n)) होना।

औपचारिक परिभाषा है: * A फ़ंक्शन f (n) को O (g (n)) iff कहा जाता है। f (n) | <= C * | g (n) | जब भी n> k, जहां C और k स्थिरांक होते हैं। *

so let f (n) = log base of a, जहाँ a> 1 और g (n) = log base b of n, जहाँ b> 1

नोट: इसका मतलब है कि मान 1 और b का मान 1 से अधिक हो सकता है, उदाहरण के लिए a = 100 और b = 3

अब हम निम्नलिखित प्राप्त करते हैं: लॉग आधार का n को O कहा जाता है (log base b n का) iff | log आधार n का n <= C * | लॉग आधार b का n | जब भी n> के

K = 0 चुनें, और C = b का लॉग आधार।

अब हमारा समीकरण निम्न प्रकार दिखता है: | log base a n | <= log आधार a का b * | लॉग आधार b का n | जब भी n> 0

दाहिने हाथ की ओर ध्यान दें, हम समीकरण में फेरबदल कर सकते हैं: = log base a a b * | log base b of n | = | लॉग आधार n का n | * लॉग बेस ऑफ ए बी = | लॉग बेस ए ऑफ बी ^ (लॉग बेस बी ऑफ एन) = | लॉग आधार n की |

अब हमारा समीकरण निम्न प्रकार दिखता है: | log base a n | <= | लॉग आधार a n | जब भी n> 0

समीकरण हमेशा सही होता है चाहे कोई भी मूल्य, n, b या a हो, उनके प्रतिबंधों के अलावा अन्य a, b> 1 और n> 0 होता है। तो लॉग आधार n का O है (n का लॉग बेस b) और a से, b कोई फर्क नहीं पड़ता कि हम बस उन्हें छोड़ सकते हैं।

आप यहाँ पर एक YouTube वीडियो देख सकते हैं: https://www.youtube.com/watch?v=MY-VCrQCaVw

आप इस पर एक लेख यहाँ पढ़ सकते हैं: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca

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