द्विआधारी खोज O(n log n)
साथ है O(n log n)
हे रूप में ही है O(log n)
के रूप में एक औसत मामले प्रदर्शन और त्वरित क्रमबद्ध है (एन) + O (लॉग एन)आप ओ (लॉग एन) और ओ (एन लॉग एन) के बीच अंतर कैसे देखते हैं?
उत्तर
दुनिया के हर व्यक्ति के साथ डेटाबेस की कल्पना करें। यह 6.7 अरब प्रविष्टियां है। ओ (लॉग एन) एक अनुक्रमित कॉलम (उदा। प्राथमिक कुंजी) पर एक लुकअप है। ओ (एन लॉग एन) पूरी आबादी को एक अनदेखा कॉलम पर क्रमबद्ध क्रम में वापस कर रहा है।
- ओ (लॉग एन) उस वाक्य के पहले शब्द को पढ़ने से पहले समाप्त हो गया था।
- O (n n लॉग इन करें) अभी भी गणना कर रहा है ...
एक और तरीका यह कल्पना करना:
log n
n में अंकों की संख्या के लिए आनुपातिक है।
n log n
एन गुना अधिक है।
एक बार बनाम एक बार लिखने के बाद 1000
नंबर लिखने का प्रयास करें। पहले ओ (लॉग एन) समय लेता है, दूसरा ओ (एन लॉग एन) समय लेता है।
अब 6700000000
के साथ फिर से प्रयास करें। इसे एक बार लिखना अभी भी छोटा है। अब इसे 6.7 अरब बार लिखने का प्रयास करें। भले ही आप प्रति सेकंड एक बार लिख सकें, आप समाप्त होने से पहले मर जाएंगे।
नहीं है, O(n log n)
= O(n) * O(log n)
गणित में, जब आपके पास एक अभिव्यक्ति (यानी ई = एमसी^2), यदि कोई ऑपरेटर नहीं है, तो आप गुणा करते हैं।
आम तौर पर ओ (एन लॉग एन) को देखने का तरीका "कुछ ऐसा करें जो log n
कंप्यूटेशंस n
बार लेता है।"
आप एक एल्गोरिथ्म जो पहली सूची पर दोहराया था, तो एक द्विआधारी उस सूची की खोज (जो N + log N
होगा) आप व्यक्त कर सकते हैं बस के रूप में O(n)
कि क्योंकि n
n
के बड़े मूल्यों के लिए log n
बौने किया
तुम एक साजिश में यह कल्पना कर सकता है, उदाहरण के लिए here देखें:
विज़ुअलाइज़ करने का सबसे अच्छा तरीका दृष्टि का उपयोग करना है। बहुत बढ़िया। –
बहुत बढ़िया। इस संसाधन को इंगित करने के लिए धन्यवाद। मैंने हार्वर्ड के सीएस 50 पाठ्यक्रम के सप्ताह 3 में चर्चा की गई कम्प्यूटेशनल कॉम्प्लेक्सिटी के 4 सामान्य प्रकारों की साजिश करने के लिए वोल्फ्राम का इस्तेमाल किया। http://www.wolframalpha.com/input/?i=plot+log(n)+vs+n+vs+n%2Alog(n)+vs+n%5E2+from+1+to+10 https: //www.youtube.com/embed/IM9sHGlYV5A – squarecandy
एक (log n)
साजिश बढ़ जाती है, लेकिन अवतल नीचे है, जिसका अर्थ है:
- यह बढ़ जाती है जब n हो जाता है बड़ा
- यह बढ़ने की दर घटता है जब n मिलता है s बड़ा
एक (n log n)
साजिश बढ़ जाती है, और है (थोड़ा) अवतल ऊपर की ओर, जिसका अर्थ है:
- यह बढ़ जाती है जब n हो जाता है बड़ा
- यह (थोड़ा) बढ़ जाती है में वृद्धि की दर है जब n बड़ा हो जाता है
इस पर निर्भर करता है कि क्या आप n
को कंक्रीट वीए के रूप में देखना चाहते हैं या नहीं लुए।
आप एक ठोस मूल्य होने के रूप में n
कल्पना करने के लिए जाते हैं, और f(n)
की इकाइयां हैं समय या निर्देश, तो O(log n)
आकार n
के दिए गए कार्य के लिए O(n log n)
से n
गुना तेजी से है। मेमोरी या स्पेस इकाइयों के लिए, O(log n)
n
आकार n
के दिए गए कार्य के लिए छोटे से छोटा है। इस मामले में, आप कुछ ज्ञात n
के लिए f(n)
के कोडोमेन पर ध्यान केंद्रित कर रहे हैं। आप इस सवाल के जवाबों को देख रहे हैं कि कितना समय लगेगा या यह ऑपरेशन कितनी मेमोरी का उपभोग करेगा।
यदि आप किसी भी मान वाले पैरामीटर के रूप में n
को विज़ुअलाइज़ करते हैं, तो O(log n)
n
गुना अधिक स्केलेबल है। O(log n)
n
आकार n
के आकार के कई कार्यों को पूरा कर सकता है। इस मामले में, आप f(n)
के डोमेन पर केंद्रित हैं। आप n
कितने बड़े हो सकते हैं, या f(n)
के कितने उदाहरण आप समानांतर में चला सकते हैं, इस बारे में प्रश्नों के उत्तर देख रहे हैं।
न तो परिप्रेक्ष्य दूसरे की तुलना में बेहतर है। एक विशिष्ट समस्या को हल करने के लिए दृष्टिकोण की तुलना करने के लिए पूर्व का उपयोग किया जा सकता है। उत्तरार्द्ध का उपयोग दिए गए दृष्टिकोण की व्यावहारिक सीमाओं की तुलना करने के लिए किया जा सकता है।
+1 अच्छा उदाहरण कहकर मेरा "उन्हें एक साथ गुणा करना"। – tster