Quicksort और परेशान मत करो?


9

खासतौर पर 'स्टैंडर्ड' (नॉन-एचपीसी) एप्लीकेशन लिखते समय, क्या आप इस बात पर विचार करते हैं कि किस एल्गोरिथ्म को चुनना है, या सिर्फ क्विकसॉर्ट (जिसे ज्यादातर लाइब्रेरी सिर्फ कॉल सॉर्ट कहती हैं) के साथ सुलझाते हैं? कुछ हद तक यह विशिष्ट स्थितियों में लाभदायक हो सकता है, लेकिन दूसरी ओर उचित अनुकूलन से समस्या का विश्लेषण करने और बेंचमार्क बनाने के लिए कुछ समय की आवश्यकता होती है।

जवाबों:


12

सामान्य तौर पर, डिफ़ॉल्ट विधियों का उपयोग करते हुए जब तक कि कुछ और अधिक विशिष्ट करने की कोई विशिष्ट आवश्यकता नहीं होती है, तब तक सड़क के आरएचओ के नीचे सब कुछ बहुत अधिक पठनीय / समझने योग्य होता है।

यदि आप अनुभव करते हैं (या कुछ मामलों में, दृढ़ता से संदेह करते हैं) कि आपके पास एक प्रदर्शन समस्या है जो जटिलता को जोड़ने का समय है।

दूसरी ओर, यदि आप एक कम पर्याप्त भाषा का उपयोग कर रहे हैं, तो उस तरह की वस्तुओं के लिए एक अंतर्निहित सॉर्ट नहीं है जिसे आपको सॉर्ट करने की आवश्यकता है एक या दो को चुनने की कोशिश करें जो आपके सभी ठिकानों को कवर करें और उन पर अमल करें।


6

हमेशा दी गई लाइब्रेरी रूटीन को कॉल करें, जब तक कि आपके पास ऐसा करने के लिए बहुत अच्छा कारण नहीं है, (और आपको ऐसा करने के लिए दस्तावेज़ की आवश्यकता क्यों है)।

ऐसा इसलिए है क्योंकि एल्गोरिदम को छांटना बिल्कुल सही पाने के लिए कठिन है। बहुत बड़े डेटासेट के साथ जावा क्विकॉर्ट में एक बग था, जिसे सूर्य द्वारा ग्राहकों को पहचाना गया, ठीक किया गया और वितरित किया गया, इसलिए आपने ऐसा नहीं किया।

जावा 7 में भी डिफॉल्ट सॉर्ट को नए, बेहतर सॉर्ट में अपग्रेड किया गया है। मुफ्त में भी।

जब तक डिफ़ॉल्ट प्रकार आपके लिए पर्याप्त रूप से अच्छा नहीं होता, तब तक उसके साथ रहें।


3

एक बार एक सम्मेलन में मैंने इस बारे में एक अच्छी कहानी सुनी।

Microsoft में कोई व्यक्ति VB एप्लिकेशन (c। VB 3) लिख रहा था और लोगों के एक समूह को यह कहते हुए मेल किया कि उसके पास मूल्यों का भार है और वह चाहता था कि वे कॉम्बोक्स में क्रम में दिखाई दें, उसे कैसे जाना चाहिए।

हर कोई अपने पुराने कंप्यूटर विज्ञान की पाठ्य पुस्तकों के लिए गोता लगाता है, अत्यधिक कुशल दिनचर्या की तलाश करता है और उन्हें विज़ुअल बेसिक में पोर्ट करता है और उन्हें मेल करता है। एक लोगों ने वापस मेल किया "कॉम्बोक्स में कितने मूल्य?"।

"लगभग 50" उत्तर आया।

"बस क्रमबद्ध संपत्ति को TRUE पर सेट करें"।

99.9999% इंस्टेंसेस सॉर्टिंग में एक लाइब्रेरी, कंट्रोल या एसक्यूएल सिलेक्ट का उपयोग किया जाता है, जो लाइब्रेरी रूटीन और आपके द्वारा लिखी गई किसी भी चीज़ के बीच के अंतर के रूप में प्रदर्शन नगण्य होगा और प्रयास और रखरखाव ओवरहेड परिणाम को बड़े पैमाने पर पछाड़ देगा।


1

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


बबल शॅाट? इसका प्रदर्शन औसत और सबसे खराब स्थिति के लिए सबसे खराब है, और सर्वश्रेष्ठ मामले के लिए सम्मिलन प्रकार के बराबर है। कोई कारण नहीं है कि इसका उपयोग किया जाना चाहिए।
हिप्पो

1
@ हिप्पो: मैं वास्तव में बबल सॉर्ट का उपयोग करने की वकालत नहीं कर रहा था। मेरा मतलब था कि आधुनिक कंप्यूटर काफी तेज हैं कि ज्यादातर मामलों में यह मायने नहीं रखता कि आपका एल्गोरिथ्म कितना धीमा है क्योंकि उपयोगकर्ता ध्यान नहीं देगा।
मेसन व्हीलर

कैसे बोगोसोर्ट के बारे में ?
dsimcha

0

हालांकि यह स्पष्ट रूप से बिट्स और समय के लिए मायने नहीं रखता है। मुझे लगता है कि क्विकर की तुलना में लिखना और समझना आसान होना मर्ज की तरह है। इसलिए अगर मैं अपनी खुद की छँटाई एल्गोरिथ्म लिखने जा रहा हूँ तो मैं उसका उपयोग करूँगा।


चिरायु विलय! और हल्के से बेहतर निरंतर कार्यकाल, और कोई भी भयावह सबसे बुरा मामला नहीं है।
फ्रैंक शीयर

0

कम से कम एक सक्षम रूप से लिखित पुस्तकालय में, मैं बिल्ट-इन इंट्रॉस्ट केsort रूप में लागू करने की अपेक्षा करूंगा कि यह केवल क्विकॉर्ट है। अंतर शायद ही ज्यादा मायने रखता है, लेकिन इंट्रोसर्ट क्विकॉर्ट के खराब सबसे ज्यादा मामले के प्रदर्शन को खत्म करता है और अधिक सामान्य मामलों पर न्यूनतम प्रभाव डालता है।

हालांकि, आपके प्रश्न का उत्तर देने के लिए: हाँ - यह वही है जो आपको आमतौर पर शुरू करना चाहिए, और जब तक / जब तक आपके पास प्रोफाइलर परिणाम न हों, यह दर्शाता है कि यह एक समस्या है, तो यह वह जगह है जहां इसे रहना चाहिए।

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