ठीक है, मैं जानता हूँ कि Mergesort थीटा की एक सबसे खराब स्थिति समय (NlogN) है, लेकिन इसकी ऊपरी अधिक है और प्रत्यावर्तन पेड़ जहां मर्ज के बने होते हैं के नीचे स्थित प्रकट करती है। किसी ने प्रस्तावित किया कि आकार के पहुंचने के बाद हम रिकर्सन को रोक दें और उस बिंदु पर सम्मिलन प्रकार पर स्विच करें। मुझे यह साबित करने की आवश्यकता है कि इस संशोधित पुनरावृत्ति संबंध का चलने का समय थाटा (एनके + एनएलओएल (एन/के)) है? मैं कैसे इस समस्या दृष्टिकोण के रूप में रिक्त कर रहा हूँ ..अनुकूलित विलय का चलने का समय थाटा (एनके + एनएलओएल (एन/के)) है?
उत्तर
हो सकता है कि एक अच्छी शुरुआत इस समस्या के लिए आवर्ती संबंध को देखने के लिए। मैं ठेठ mergesort के लिए कल्पना यह कुछ इस तरह दिखेगा:
T(N) = 2 * T(N/2) + N
यानी आप आधे आकार के 2 subproblems में समस्या विभाजित कर रहे हैं, और उसके बाद एन काम (मर्ज) का प्रदर्शन किया। हमारे पास एक आधारभूत मामला है जो निरंतर समय लेता है।
एक पेड़ हमारे पास के रूप में इस मॉडलिंग:
T(N) = N -> T(N/2)
-> T(N/2)
= N -> (N/2) -> T(N/4)
-> T(N/4)
-> (N/2) -> T(N/4)
-> T(N/4)
यह तो सच में हम सिर्फ यह कितना गहरा हो जाता है देखने की जरूरत
T(N) = N + 2N/2 + 4N/4 + ...
= N + N + N ...
का एक विस्तार देता है। हम जानते हैं कि i
वें स्तर आकार में subproblems N/2^i
पर संचालित होता है। इसलिए हमारे पत्र-गांठ (T(1)
) स्तर L
जहां N/2^L = 1
पर पाए जाते हैं:
N/2^L = 1
N = 2^L
log N = log(2^L)
log N = L
इसलिए हमारे क्रम N log N
है।
अब हम प्रविष्टि प्रकार का परिचय। हमारे पेड़ इस
T(N) = ... -> I(K)
-> I(K)
...x N/K
दूसरे शब्दों में कुछ ऐसी दिखाई देगी, हम कुछ स्तर L
पर होगा आकार K
की N/K
प्रविष्टि प्रकार की समस्याओं को हल करने के लिए है। सम्मिलन क्रम में K^2
का सबसे खराब-केस रनटाइम है। तो पत्तियों पर हम कुल में इतना काम है:
(N/K) * I(K)
= (N/K) * K * K
= N * K
लेकिन हम भी पहले की तरह समझाया N
पेड़ के स्तर प्रति की लागत से के रूप में अच्छी तरह से करने के लिए, विलय का एक समूह है। वापस हमारे पिछले विधि के लिए जा रहे है, चलो L
लगता है (स्तरों की संख्या इससे पहले कि हम आकार K
की subproblems तक पहुँचने और इस प्रकार प्रविष्टि करने के लिए स्विच) करते हैं:
N/2^L = K
N/K = 2^L
L = log (N/K)
तो कुल में हमारे पास
O(N) = N * K + N * log (N/K)
यह हो गया है बहुत लंबा है क्योंकि मैंने आपको सबूत स्केच देने के लिए एल्गोरिदम लिया था, लेकिन इसे आपके न्यूरॉन्स फायरिंग मिलनी चाहिए।
- 1. हैश टकराव रैखिक जांच चलने का समय
- 2. लिंक्ड सूची प्रविष्टि चलने का समय भ्रम की स्थिति
- 3. क्विकॉर्ट और सम्मिलन सॉर्ट हाइब्रिड अपेक्षित चलने का समय
- 4. लंबे समय से चलने वाले ओरेकल डीबी क्वेरी का सिमुलेशन
- 5. नियमित अभिव्यक्तियों का घातीय चलने का समय क्यों हो सकता है?
- 6. एक्सएमएल दस्तावेजों का विलय
- 7. शाखा से विलय करने का प्रयास करते समय एसवीएन त्रुटि
- 8. आईफ़ोन एप्लिकेशन लॉन्च करने का समय अनुकूलित करना
- 9. विलय में विलय विलय विलय में एक समस्या है?
- 10. svn - अंतिम विलय से समय
- 11. लंबे समय से चलने वाले यूनिट परीक्षण
- 12. पाइथन प्रोग्राम कब तक चलने में कितना समय लगता है?
- 13. अनुकूलित जेवीएम रनटाइम का स्नैपशॉट लेना
- 14. केवल एक फ़ाइल का पुन: विलय
- 15. समय जटिलता और चलने के समय के बीच अंतर
- 16. विंडोज फॉर्म लोड समय अनुकूलित करें
- 17. एसवीएन - शाखा में ट्रंक का स्वचालित विलय
- 18. एसवीएन शाखा/विलय गतिविधि का ग्राफिकल प्रतिनिधित्व
- 19. असेंबली विलय और आंतरिक कीवर्ड का उपयोग
- 20. दृश्य विलय उपकरण का उपयोग कैसे करें?
- 21. क्यों JMP का उपयोग कर अनुकूलित संस्करण
- 22. तालिका का विश्लेषण, तालिका अनुकूलित, कितनी बार?
- 23. symfony2 अनुकूलित करें विकल्प का चयन करें
- 24. एक्लिप्स में सबवर्सन विलय करने का उचित तरीका क्या है?
- 25. विलय नदी के ऊपर Git परिवर्तन का अनुरोध करता है
- 26. कभी भी लंबे समय तक चलने वाली प्रक्रिया के लिए RabbitMQ और Node.js का उपयोग करें?
- 27. डीजेगो सेलेरी: लंबे समय तक चलने वाली प्रक्रिया का केवल एक उदाहरण निष्पादित करें
- 28. विलय सूचियों के लिए विलय बेहतर क्यों है?
- 29. सॉर्ट किए गए सरणी विलय, इष्टतम समय जटिलता क्या है?
- 30. किस मामले में IENumerable <T> है। अनुकूलित अनुकूलित?