लॉगरिदमिक जटिलता के लिए एल्गोरिथ्म अंतर्ज्ञान


59

मेरा मानना है कि मैं जैसे जटिलताओं का एक उचित समझ होनी O(1) , Θ(n) और Θ(n2)

एक सूची के संदर्भ में, O(1) एक निरंतर खोज है, इसलिए यह केवल सूची का प्रमुख हो रहा है। Θ(n) वह जगह है जहां मैं पूरी सूची को , और n ( n 2 )Θ(n2) सूची में प्रत्येक तत्व के लिए एक बार सूची चला रहा हूं ।

वहाँ काबू करने के लिए एक समान सहज तरीका है Θ(logn) अन्य बस जानते हुए भी की तुलना में यह के बीच कहीं झूठ O(1) और Θ(n) ?


8
log n "खोज" के लिए है: बाइनरी सर्च के बारे में सोचें
सुरेश

2
इस प्रश्न को पूछने के लिए का उपयोग करना Oगलत है, क्योंकि यह केवल एक ऊपरी सीमा को दर्शाता है। उदाहरण के लिए निरंतर समय O(logn)θ अधिक उचित होगा। मेटा प्रश्न देखें: meta.cs.stackexchange.com/questions/182/…
आर्यभट्ट


एक छोटी सी टिप्पणी: शास्त्रीय ट्यूरिंग मशीन सेटिंग्स में, सभी एल्गोरिदम हैं के बाद से वे कम से कम एक बार इनपुट के प्रत्येक प्रतीक पढ़ने की जरूरत है,। बाइनरी खोज ( लॉग एन ) में किया जा सकता है क्योंकि हमारे पास वादा है कि सूची को क्रमबद्ध किया गया है, उदाहरण के लिए। Ω(n)O(logn)
चेज़िसोप

1
एक देर से योगदान: परिभाषा से, आधार किसी संख्या का लघुगणक n आप गुणा समय की बस संख्या है से ही प्राप्त करने के लिए एनबी एल = एनbnbn । उदाहरण के लिए, 2 3 = 8bl=nl=logb(n) । तो अगर आपके पास एक नंबर n है और आप पता लगाना चाहते हैं कि l o g b ( n ) = क्या है? जब तक आप 1 तक नहीं पहुँचते तब तकइसे b से विभाजित करते रहें(मान n n सादगी के लिए b की एक शक्ति है)। विभाजनों की संख्या l o g b ( n ) के बराबर है। इस विभाजन व्यवहार को प्रदर्शित करने वाले एल्गोरिदम( एल जी) में बार चल रहे हैं23=8log2(8)=3nlogb(n)=?b1nblogb(n)O(log(n))
सादतमाे

जवाबों:


53

जटिलता आम तौर पर उप-विभाजन के साथ जुड़ा हुआ है। उदाहरण के रूप में सूचियों का उपयोग करते समय, एक सूची की कल्पना करें जिनके तत्वों को क्रमबद्ध किया गया है। आप इस सूची को O ( लॉग एन ) समय में खोज सकते हैं - आपको सूची के क्रमबद्ध स्वरूप के कारण वास्तव में प्रत्येक तत्व को देखने की आवश्यकता नहीं है।Θ(logn)O(logn)

यदि आप सूची के मध्य में तत्व को देखते हैं और इसकी तुलना उस तत्व से करते हैं जिसे आप खोजते हैं, तो आप तुरंत कह सकते हैं कि यह सरणी के बाएं या दाएं आधे हिस्से में है या नहीं। तब आप इसे केवल एक आधा ले सकते हैं और प्रक्रिया को दोहरा सकते हैं जब तक कि आप इसे नहीं ढूंढते हैं या 1 आइटम के साथ एक सूची तक पहुंचते हैं जिसे आप तुच्छ रूप से तुलना करते हैं।

आप देख सकते हैं कि सूची प्रत्येक चरण को प्रभावी ढंग से रोकती है। इसका मतलब है कि अगर आप लंबाई की एक सूची प्राप्त , अधिकतम चरणों आप की जरूरत तक पहुँचने के लिए एक आइटम सूची है 5 । आप की एक सूची है, तो 128 = 2 7 आइटम, आप केवल जरूरत है 7 की एक सूची के लिए कदम, 1024 = 2 10 आप केवल जरूरत 10 चरणों आदि325128=2771024=21010

आप देख सकते हैं, प्रतिपादक में 2 n हमेशा के लिए आवश्यक कदम की संख्या को दर्शाता है। लॉगरिथम का उपयोग इस एक्सप्रेशन नंबर को बिल्कुल "एक्सट्रैक्ट" करने के लिए किया जाता है, उदाहरण के लिए लॉग 2 2 10 = 10 । यह उन लंबाई को सूचीबद्ध करने के लिए भी सामान्य करता है जो दो लंबे समय की शक्तियां नहीं हैं।n2nlog2210=10


4
यह ध्यान दिया जाना चाहिए कि यह तभी है O(log n)जब सूची में निरंतर समय यादृच्छिक अभिगम है। अधिक विशिष्ट सूची कार्यान्वयन (लिंक्ड सूची) पर यह हैO(n log n)
asm

1
बिंदुओं की कमी के लिए बाइनरी खोज सूचियों पर काम नहीं करती है; यह आमतौर पर सरणियों पर किया जाता है।
राफेल

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

@AndrewMyers एक लिंक की गई सूची को खोजना अधिक सटीक है O(n)
phant0m

1
@ phant0m हाँ, मुझे यह पता लगाने के लिए थोड़ा सा लगा कि यह मान कर चल रहे हैं कि आप हर बार शुरुआत से ट्रैवर्स करने के बजाय वर्तमान स्थिति से आगे बढ़ रहे हैं।
asm

38

(संतुलित) पेड़ों के संदर्भ में (कहें, बाइनरी ट्री, इसलिए सभी बेस 2 हैं):log

  • पेड़ की जड़ मिल रही हैΘ(1)
  • जड़ से पत्ती तक एक चलना हैΘ(logn)
  • पेड़ के सभी नोड्स का पता लगा रहा हैΘ(n)
  • सभी सबसेट पर पेड़ के दो नोड्स पर कार्रवाई करता है, उदाहरण के लिए, किसी भी दो नोड्स के बीच अलग-अलग रास्तों की संख्या।Θ(n2)
  • - में से किसी सबसेट के लिए ऊपर का सामान्यीकरण कश्मीर नोड्स (एक निरंतर के लिए कश्मीर )Θ(nk)kk
  • नोड्स के सभी संभावित सबसेट (सभी संभावित आकारों के सबसेट, यानी के = 1 , 2 , , एन ।)पर क्रियाएं हैं। उदाहरण के लिए,पेड़केविभिन्नउप-पेड़ोंकीसंख्या।Θ(2n)k=1,2,,n

5
के लिए यह, अंतर्ज्ञान में जोड़ने के लिए दो बातें से आता है: 1.) पुनरावृत्ति टी ( एन ) = टी ( Θ(loglogn)और 2.) आकार के कुछ चीज़ों पर द्विआधारी खोजlog(n)अर्थात वृक्ष की ऊँचाई पर एक द्विआधारी खोज। T(n)=T((n))+1log(n)
मॉर्कले

17

के लिए संभव हो सकता है, तो आप नीचे समस्या आकार आनुपातिक कुछ मनमाना राशि से सम्मान के साथ करने के लिए कटौती करने के लिए सक्षम होना चाहिए n एक निरंतर समय ऑपरेशन के साथ।O(logn)n

उदाहरण के लिए, द्विआधारी खोज के मामले में, आप प्रत्येक तुलना ऑपरेशन के साथ समस्या का आकार आधा घटा सकते हैं।

अब, क्या आपको समस्या के आकार को आधे से कम करना है, वास्तव में नहीं। एल्गोरिथ्म भले ही यह समस्या खोज स्थान को 0.0001% तक कम कर सकता है, जब तक कि समस्या के आकार को कम करने के लिए प्रतिशत और ऑपरेशन का उपयोग निरंतर रहता है, यह एक ( लॉग एन ) एल्गोरिदम है, यह एक तेज़ एल्गोरिथम नहीं होगा, लेकिन यह अभी भी O ( लॉग एन ) एक बहुत बड़े स्थिरांक के साथ है। (मान लें कि हम आधार 2 लॉग के साथ लॉग एन के बारे में बात कर रहे हैं )O(logn)O(logn)O(logn)logn


1
अगर 'डाउन कटिंग अमाउंट' स्थिर नहीं होता तो क्या होता?
शविश

@Svish यदि आप समस्या को सकारात्मक दर से कम कर सकते हैं, तो यह अभी भी एक एल्गोरिथ्म होगा, हालांकि यह अब एक तंग बाध्य नहीं होगा। नकारात्मक दर कहना मुश्किल है। इस मामले में उत्तर को सरल बनाने के लिए धारणा बनाई गई थी, क्योंकि इस प्रश्न की अपनी योग्यता है, आप इसे अपने आप में एक प्रश्न के रूप में पूछने के लिए स्वागत से अधिक हैं। O(logn)
केन ली

हां, मेरा मतलब था कि समस्या की खोज की जगह हमेशा कम हुई, लेकिन जरूरी नहीं कि स्थिर दर पर हो। क्या आपके "के रूप में लंबे समय के रूप में प्रतिशत और समस्या आकार में कटौती करने के लिए ऑपरेशन का उपयोग करता है के बारे में सोच रहा था स्थिर रहता है, यह एक हे (लॉग एन) एल्गोरिथ्म" है; यदि यह एक अलग नाम था अगर प्रतिशत स्थिर नहीं था।
शविश

8

दशमलव संख्या को बाइनरी में बदलने के लिए एल्गोरिथ्म के बारे में सोचेंn

while n != 0:
   print n%2, 
   n = n/2

यह whileलूप बार चलाता है ।log(n)


1
निश्चित रूप से यह प्रोग्राम बार करता है, लेकिन आम तौर पर जब हम O ( f ( s ) ) जटिलता के बारे में बात करते हैं , तो s आपके इनपुट का आकार होता है। यहाँ अपने इनपुट के आकार पहले से ही है एस = लॉग इन करें n , तो मैं कहूंगा कि इस कार्यक्रम केवल रैखिक (में है हे ( रों ) )lognO(f(s))ss=lognO(s)
jmad

@ जमद सही। लेकिन यह उदाहरण आपको लॉग (n) में अंतर्ज्ञान देता है।
प्रतीक देवघर

@jmad मैं यादृच्छिक संख्याओं को उत्पन्न करने के लिए एल्गोरिथ्म का उपयोग कर सकता था, लेकिन मैं इसे यथासंभव सरल चाहता था।
प्रतिक देवघर

8

हां, 1 और एन के बीच है , लेकिन यह एन की तुलना में 1 के करीब है । लॉग ( n ) क्या है ? लॉग फ़ंक्शन घातांक का व्युत्क्रम फलन है। मुझे घातांक से शुरू करना चाहिए और आपको एक बेहतर विचार प्राप्त करना चाहिए कि लघुगणक क्या है।log(n)1n1nlog(n)

दो संख्याओं पर विचार करें, और 2 1002 100 है 2 के साथ ही गुणा 100 बार। आप कुछ प्रयासों के साथ 100 नंबर की गिनती कर सकते हैं, लेकिन क्या आप 2 100 की गिनती कर सकते हैं ? मुझे यकीन है आप नहीं कर सकते। क्यों? 2 100 इतनी बड़ी संख्या है कि यह ब्रह्मांड में सभी परमाणुओं की संख्या से अधिक है। एक पल के लिए उस पर प्रतिबिंबित करें। यह इतनी बड़ी संख्या है, कि यह आपको प्रत्येक परमाणु को एक नाम (संख्या) देने की अनुमति देता है। और आपकी उंगली के नाखून में परमाणुओं की संख्या संभवतः अरबों के क्रम में है। 2 100 किसी के लिए पर्याप्त होना चाहिए (वाक्य का इरादा :))।100210021002100100210021002100

अब, दो संख्याओं के बीच, और 2 100 , 100 2 100 (आधार 2 में ) का लघुगणक है । 100 तुलनात्मक रूप से 2 100 की तुलना में इतनी छोटी संख्या है । किसी को भी अपने घर में 100 अलग-अलग वस्तुओं का होना चाहिए । लेकिन, 2 100 ब्रह्मांड के लिए काफी अच्छा है। लॉग ( n ) और n के बारे में सोचते समय घर बनाम ब्रह्मांड के बारे में सोचें ।10021001002100210021001002100log(n)n

प्रतिपादक और लघुगणक कहां से आते हैं? कंप्यूटर विज्ञान में उनकी इतनी रुचि क्यों है? आप नोटिस नहीं कर सकते हैं, लेकिन हर जगह घातांक है। क्या आपने क्रेडिट कार्ड पर ब्याज दिया था? आपने बस अपने घर के लिए एक ब्रह्मांड का भुगतान किया (इतना बुरा नहीं है, लेकिन वक्र फिट बैठता है)। मुझे लगता है कि प्रतिपादक उत्पाद नियम से आता है, लेकिन अन्य उदाहरण देने के लिए स्वागत है। उत्पाद नियम क्या है, आप पूछ सकते हैं; और मैं जवाब दूंगा।

मान लें कि आपके पास दो शहर और B हैं , और उनके बीच जाने के दो रास्ते हैं। उनके बीच पथों की संख्या कितनी है? दो। यह तुच्छ है। अब कहते हैं, एक और शहर सी है , और आप तीन तरीकों से बी से सी पर जा सकते हैं । A और C के बीच अब कितने पथ हैं ? छह, सही? आपने उसे कैसे प्राप्त किए? क्या आपने उन्हें गिना? या आपने उन्हें गुणा किया? किसी भी तरह से, यह देखना आसान है कि दोनों तरीके समान परिणाम देते हैं। अब यदि आप एक शहर D जोड़ते हैं जो C से चार तरीकों से पहुँचा जा सकता है, तो A और D के बीच कितने रास्ते हैंABCBCACDCAD? अगर तुम मुझे विश्वास नहीं करते गणना, लेकिन यह के बराबर है जो है 24 । अब, अगर दस शहर हैं और एक शहर से दूसरे शहर तक दो रास्ते हैं, और उन्हें ऐसे व्यवस्थित किया जाता है जैसे वे एक सीधी रेखा पर हों। शुरू से अंत तक कितने रास्ते हैं? यदि आप मुझ पर भरोसा नहीं करते हैं, तो उन्हें गुणा करें, लेकिन मैं आपको बताऊंगा कि 2 10 हैं , जो कि 1024 है । देखें कि 2 10 के घातीय परिणाम है 10 , और 10 का लघुगणक है 2 101024 की तुलना में 10 एक छोटी संख्या है ।2342421010242101010210101024

लघुगणक समारोह के लिए है n क्या n है 2 n (ध्यान दें कि 2 लघुगणक का आधार है)। यदि आप लॉग बी ( एन ) को अपने साथ बी बार गुणा करते हैं (ध्यान दें कि बी लॉगरिदम का आधार है) आपको एन मिलता है । लॉग इन करें ( n ) इतना छोटा, के साथ तुलना में इतना छोटा है n , कि यह अपने घर के आकार जहां है n ब्रह्मांड के आकार है।log2(n)nn2n2logb(n)bbnlog(n)nn

एक व्यावहारिक नोट पर, फ़ंक्शन निरंतर कार्यों के समान हैं। वे n के साथ बढ़ते हैं , लेकिन वे बहुत धीरे-धीरे बढ़ते हैं। यदि आप लॉगरिदमिक समय में चलने के लिए एक कार्यक्रम को अनुकूलित करते हैं जो एक दिन पहले ले रहा था, तो आप शायद इसे मिनटों के क्रम में चलाएंगे। प्रोजेक्ट यूलर पर समस्याओं के साथ अपने लिए जांचें।log(n)n


3
अच्छी तरह से लिखे जाने के दौरान, इस उत्तर में " वास्तव में छोटा है" के अलावा कोई जानकारी नहीं है। log(n)
राफेल

3
मैं कितना छोटा है, इसके लिए एक अंतर्ज्ञान देने की कोशिश कर रहा था।
रवि

5

अपनी थीम को जारी रखने के लिए, बार-बार अनुमान लगाने जैसा है कि x सूची में कहां है और "उच्च" या "निचला" (सूचकांक के संदर्भ में) बताया जा रहा है।O(logn)x

यह अभी भी सूची के आकार पर आधारित है, लेकिन आपको केवल तत्वों के एक अंश पर जाने की आवश्यकता है।


4

यदि हमारे पास डिवाइड और जीत एल्गोरिथ्म है , और हम एक उपप्रकार के लिए केवल एक पुनरावर्ती कॉल करते हैं, और यह मास्टर प्रमेय में दूसरा मामला है , यानी गैर-पुनरावर्ती भाग की समय जटिलता , तो एल्गोरिथ्म की जटिलता Θ ( lg k + 1 n ) होगीΘ(lgkn)Θ(lgk+1n)

दूसरे शब्दों में, जब हमारे पास एक विभाजन होता है और एक पुनरावर्ती कॉल के साथ एल्गोरिथ्म को जीतता है, तो वर्तमान समस्या का एक स्थिर कारक होता है, और गैर-पुनरावर्ती भाग में समय (स्थिर) होता है, तब एल्गोरिथ्म का चल रहा समय lg n होने जा रहा है ।Θ(1)lgn

द्विआधारी खोज एल्गोरिथ्म शास्त्रीय उदाहरण है।


1

अंतर्ज्ञान यह है कि आप कितनी बार किसी संख्या को आधा कर सकते हैं, n कह सकते हैं, इससे पहले कि यह 1 हो जाए ओ (lg n)।

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

2^0+2^1+...+2^h = n

साइट पर आपका स्वागत है! आप जो कहते हैं, वह सच है, लेकिन मैं यह नहीं देखता कि यह मौजूदा उत्तरों में क्या जोड़ता है। कई उत्तर पहले से ही कहते हैं कि लघुगणक वह संख्या है जिसे आप 1 मारने से पहले दो से विभाजित कर सकते हैं, और रैन का उत्तर पहले से ही कहता है कि एक बाइनरी ट्री की ऊँचाई n पत्तियों के साथ है । lognn
डेविड रिचेर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.