बबल सॉर्ट की तुलना में चयन प्रकार तेजी से क्यों होता है?


28

विकीपीडिया पर लिखा है कि "... चयन प्रकार लगभग हमेशा आउटपरफॉर्म बबल सॉर्ट और सूक्ति सॉर्ट करता है।" क्या कोई मुझे यह समझा सकता है कि चयन क्रम को बुलबुले की तुलना में तेजी से क्यों माना जाता है, भले ही उन दोनों के पास है:

  1. सबसे खराब स्थिति समय जटिलता :O(n2)

  2. तुलनाओं की संख्या : O(n2)

  3. सबसे अच्छा मामला समय जटिलता :

    • बबल सॉर्ट:O(n)
    • चयन प्रकार:O(n2)
  4. औसत केस टाइम जटिलता :

    • बबल सॉर्ट:O(n2)
    • चयन प्रकार:O(n2)

जवाबों:


32

आपके द्वारा प्रदान की गई सभी जटिलताएं सच हैं, हालांकि वे बिग ओ नोटेशन में दिए गए हैं , इसलिए सभी additive मान और स्थिरांक को छोड़ दिया गया है।

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

तुलनाओं की औसत संख्या:

  • बबल सॉर्ट :12(N2NlnN(γ+ln21)N)+O(N)
  • सम्मिलन :14(N2N)+NHN
  • चयन प्रकार :(N+1)HN2N

अब, यदि आप उन कार्यों को प्लॉट करते हैं, तो आपको कुछ इस तरह मिलेगा: भूखंड plot2

जैसा कि आप देख सकते हैं, तत्वों की संख्या बढ़ने के साथ बुलबुला छंटनी बहुत खराब है, भले ही दोनों छंटाई विधियों में एक ही तरह की विषम जटिलता हो।

यह विश्लेषण इस धारणा पर आधारित है कि इनपुट यादृच्छिक है - जो हर समय सच नहीं हो सकता है। हालाँकि, इससे पहले कि हम छँटाई शुरू करें हम औसत मामले को प्राप्त करने के लिए यादृच्छिक रूप से इनपुट अनुक्रम (किसी भी विधि का उपयोग करके) को अनुमति दे सकते हैं।

मैंने समय जटिलता विश्लेषण को छोड़ दिया क्योंकि यह कार्यान्वयन पर निर्भर करता है, लेकिन इसी तरह के तरीकों का उपयोग किया जा सकता है।


मुझे समस्या है कि "हम एवरेज केस प्राप्त करने के लिए इनपुट अनुक्रम को बेतरतीब ढंग से परमिट कर सकते हैं"। क्यों छँटाई करने के लिए आवश्यक समय से अधिक तेजी से किया जा सकता है?
साशो निकोलोव

1
आप संख्याओं के किसी भी क्रम की अनुमति दे सकते हैं यह समय लेगा जहां अनुक्रम लंबाई है। यह स्पष्ट है कि किसी भी तुलना आधारित सॉर्टिंग एल्गोरिथ्म में कम से कम जटिलता होनी चाहिए, भले ही आप इसमें को जटिलता में जोड़ दें, लेकिन इसे इतना नहीं बदला जाएगा। वैसे भी हम तुलना के बारे में नहीं समय के बारे में बात कर रहे हैं, समय की जटिलता कार्यान्वयन और चलने वाली मशीन पर निर्भर करती है, जैसा कि मैंने जवाब में उल्लेख किया है। NNO(NlogN)N
बार्टोज़ प्रेज़ीबेल्स्की

मुझे लगता है कि मैं नींद में था, आप सही हैं, अनुक्रम को रैखिक समय में अनुमति दी जा सकती है।
साशो निकोलेव

चूंकि , क्या आपकी तुलना चयन प्रकार के लिए सही है? ऐसा लगता है कि आप अनुमान लगा रहे हैं कि यह ओ (एन लॉग एन) की तुलना औसतन करता है। HN=Θ(logN)
templatetypedef

गामा = 0.577216 यूलर-मस्चेरोनी का स्थिरांक है। प्रासंगिक अध्याय "प्रोग्रामिंग की कला" खंड 3 खंड 5.2.2 पेज है। 109 और 129. आपने विशेष रूप से O (sqrt (N)) अवधि में बबल सॉर्ट केस की साजिश कैसे की? क्या आपने इसकी उपेक्षा की?
mxmlnkn

11

स्पर्शोन्मुख लागत, या -notation, एक फ़ंक्शन के सीमित व्यवहार का वर्णन करता है क्योंकि इसका तर्क अनंत, अर्थात इसकी विकास दर को दर्शाता है।O

फ़ंक्शन ही, उदाहरण के लिए तुलना और / या स्वैप की संख्या, एक ही स्पर्शोन्मुख लागत के साथ दो एल्गोरिदम के लिए भिन्न हो सकती है, बशर्ते वे एक ही दर से बढ़ें।

अधिक विशेष रूप से, बबल प्रकार की आवश्यकता होती है, औसतन प्रति प्रविष्टि स्वैप (प्रत्येक प्रविष्टि को प्रारंभिक स्थिति से तत्व-वार अपनी अंतिम स्थिति में ले जाया जाता है, और प्रत्येक स्वैप में दो प्रविष्टियाँ शामिल होती हैं), जबकि चयन क्रम केवल (एक बार आवश्यक होता है) न्यूनतम / अधिकतम पाया गया है, यह सरणी के अंत में एक बार स्वैप किया जाता है)।n/41

तुलनाओं की संख्या के संदर्भ में, बबल सॉर्ट के लिए तुलनाओं की आवश्यकता होती है , जहां एक प्रविष्टि की प्रारंभिक स्थिति और इसकी अंतिम स्थिति के बीच अधिकतम दूरी है, जो आमतौर पर समान रूप से वितरित प्रारंभिक मूल्यों के लिए से बड़ा है । चयन प्रकार, हालांकि, हमेशा तुलना की आवश्यकता होती है।k×nkn/2(n1)×(n2)/2

सारांश में, स्पर्शोन्मुख सीमा आपको एक अच्छा अनुभव देती है कि एल्गोरिथ्म की लागत इनपुट आकार के संबंध में कैसे बढ़ती है, लेकिन एक ही सेट के भीतर विभिन्न एल्गोरिदम के सापेक्ष प्रदर्शन के बारे में कुछ नहीं कहता है।


1
यह बहुत अच्छा जवाब है
बृजेश चौहान

आप कौन सी पुस्तक पसंद करते हैं?
बृजेश चौहान

@ बृजेशचौहान: किताबें स्वाद का विषय हैं, इसलिए नमक के दाने के साथ कोई भी सलाह लें। मुझे व्यक्तिगत रूप से कॉर्मेन, लीसेरसन और रिवेस्ट का "एल्गोरिदम का परिचय" पसंद है, जो कई विषयों पर एक अच्छा अवलोकन देता है, और यदि आप किसी विशिष्ट विषय पर अधिक / सभी विवरणों की आवश्यकता है, तो नुथ की "द आर्ट ऑफ कंप्यूटर प्रोग्रामिंग" श्रृंखला। आप यह जांचना चाहते हैं कि क्या पुस्तकों का प्रश्न यहाँ पहले पूछा गया है, या उस प्रश्न को पोस्ट करें यदि यह नहीं है।
पेड्रो

मेरे लिए, आपके उत्तर में तीसरा पैरा वास्तविक उत्तर है। बड़े इनपुट के लिए ग्राफ नहीं, अन्य उत्तर में दिए गए।
ओवरएक्सचेंज

3

बबल सॉर्ट अधिक स्वैप समय का उपयोग करता है, जबकि चयन सॉर्ट इससे बचता है।

सॉर्टिंग का उपयोग करते nसमय यह सबसे अधिक बार स्वैप करता है । लेकिन बबल सॉर्ट का उपयोग करते समय, यह लगभग स्वैप हो जाता है n*(n-1)। और जाहिर है कि पढ़ने का समय भी स्मृति में लिखने के समय से कम है। तुलना समय और अन्य चल रहे समय को नजरअंदाज किया जा सकता है। इसलिए स्वैप समय समस्या की महत्वपूर्ण अड़चन है।


मुझे लगता है कि बार्टेक का अन्य उत्तर अधिक उचित है, लेकिन मैं वोट नहीं कर सकता या टिप्पणी नहीं कर सकता ... BTW मुझे अभी भी लगता है कि लेखन का समय अधिक प्रभावित होता है और आशा है कि वह इस पर विचार कर सकते हैं यदि वह इसे देखते हैं और सहमत होते हैं।
सिमोनमिसुन

आप बस तुलना की संख्या को नजरअंदाज नहीं कर सकते हैं, क्योंकि ऐसे मामले हैं जहां दो वस्तुओं की तुलना करने के लिए खर्च किया गया समय दो वस्तुओं को स्वैप करने के लिए खर्च किए गए समय से अधिक हो सकता है। अत्यंत लंबी स्ट्रिंग्स (प्रत्येक 100k वर्ण कहते हैं) की एक लिंक की गई सूची पर विचार करें। प्रत्येक स्ट्रिंग में पढ़ने से सूचक पुनर्मूल्यांकन करने में अधिक समय लगेगा।
इरविन लिम

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