मुझे लगता है कि इस समस्या के बारे में ध्यान देने वाली पहली बात यह है कि, संख्याओं को क्रमबद्ध करने में 4 मिनट लग गए, n
काफी बड़ा होना चाहिए। उदाहरण के लिए, मैंने अपने कंप्यूटर पर एक बिलियन नंबरों को सॉर्ट करने के लिए क्विकॉर्ट का उपयोग किया, और इसमें केवल 3 मिनट लग गए। तो n
शायद लगभग 1 बिलियन है (परिमाण का आदेश दें या लें)।
यह देखते हुए कि n
बहुत बड़ा है, यह कुछ निरंतर c
के लिए c*n*lg(n)
के रूप में इस क्रम अनुमान लगाने के लिए, के बाद से क्रम विस्तार के निचले क्रम के मामले इतनी बड़ी n
के लिए भी प्रासंगिक नहीं होने चाहिए संभावना उचित है। हम दोगुना n
, तो हम मूल क्रम की तुलना में क्रम के निम्नलिखित गुणक मिलती है:
[Runtime(2n)]/[Runtime(n)]
[c * (2n) * lg(2n)]/[c * n * lg(n)]
2 * lg(2n)/lg(n)
2 * log_n(2n)
2 * (1 + log_n(2))
यहाँ, lg()
एक मनमाना आधार के नीचे लघुगणक है और log_n()
लॉग आधार n
है।
सबसे पहले, क्योंकि हम मान लिया n
बड़ी है, आगे बढ़ने के लिए एक संभव तरीके से 0 के रूप में log_n(2)
अनुमान लगाने के लिए है, इसलिए क्रम गुणक 2 के रूप में अनुमानित किया जाएगा और कुल रनटाइम 8 मिनट के रूप में अनुमान लगाया जा होगा।
- तो
n
= 100 मिलियन है, तो हम अनुमान लगा होगा: वैकल्पिक रूप से, क्योंकि हम शायद परिमाण के एक आदेश के भीतर करने के लिए n
पता है, एक और संभावना n
की संभावना मूल्य के लिए गुणक अनुमान लगाने के लिए किया जाएगा 2.075 के रूप में गुणक और कुल रनटाइम 8.30 मिनट के रूप में।
- यदि
n
= 1 बिलियन, तो हम गुणक को 2.067 के रूप में अनुमानित करेंगे और कुल रनटाइम 8.27 मिनट के रूप में अनुमानित करेंगे।
- यदि
n
= 10 बिलियन, तो हम गुणक को 2.060 के रूप में अनुमानित करेंगे और कुल रनटाइम 8.24 मिनट के रूप में अनुमानित करेंगे।
यहां ध्यान दें कि n
के हमारे अनुमान में भारी परिवर्तन कुल रनटाइम के अनुमान में बहुत छोटे बदलाव उत्पन्न करते हैं।
यह ध्यान देने योग्य है कि, यह कागज पर अच्छा लग रहा है, प्रैक्टिस में आर्किटेक्चरल विचारों से वास्तविक जीवन रनटाइम उन लोगों से बहुत अलग हो सकते हैं जिनकी हमने गणना की है। उदाहरण के लिए, यदि एल्गोरिदम डेटा आकार को दोगुना करने के बाद पेजिंग का एक गुच्छा लाता है, तो रनटाइम बहुत अधिक हो सकता है, जो हमने अनुमानित ~ 8 मिनट से कहीं अधिक है।
वास्तव में quicksort ओ (एन^2) नाम सिर्फ भ्रमित है – Pooya
@pseudoDust: उसकी धारणा गलत हो सकती है। यदि आप समस्या को देखते हैं तो उसने कुछ ऐसा माना जो उसके समाधान को प्रभावित कर सकता है – Pooya
@Pooya "मुझे ** दिया गया ** है कि एक क्विक्सोर्ट एल्गोरिदम में ओ (नलॉग (एन)) की समय जटिलता है" – pseudoDust