मूलांक सॉर्ट के व्यावहारिक अनुप्रयोग


20

रेडिक्स सॉर्ट सैद्धांतिक रूप से बहुत तेज है जब आप जानते हैं कि चाबियाँ एक सीमित सीमा में हैं, तो उदाहरण के लिए रेंज में मान कहें । अगर आप बस मानों को आधार परिवर्तित करते हैं जो समय लेता है , तो आधार मूलांक सॉर्ट करें और फिर समग्र एल्गोरिथ्म के लिए अपने मूल आधार पर वापस कनवर्ट करें ।[ 0 ... n कश्मीर - 1 ] कश्मीर < एलजी एन एन Θ ( n ) n Θ ( n कश्मीर )n[0...n-1]<एलजीnnΘ(n)nΘ(n)

हालाँकि, मैंने पढ़ा है कि व्यवहार में मूलांक सॉर्ट आमतौर पर एक यादृच्छिक क्विकॉर्ट उदाहरण के लिए करने की तुलना में बहुत धीमा है :

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

क्या मूलांक केवल एक अच्छा सैद्धांतिक एल्गोरिथ्म है, या इसके सामान्य व्यावहारिक उपयोग हैं?

जवाबों:


15

मूलांक प्रकार अक्सर होते हैं, व्यवहार में, समानांतर मशीनों पर सबसे तेज़ और सबसे उपयोगी प्रकार।

मल्टीप्रोसेसर के प्रत्येक नोड पर आप शायद एक क्विकॉर्ट की तरह कुछ करते हैं, लेकिन मूलांक सॉर्ट कई नोड्स को विभिन्न पुनरावर्ती प्रकारों की तुलना में कम तुल्यकालन के साथ काम करने की अनुमति देता है।

अन्य स्थितियां भी हैं। यदि आपको एक स्थिर प्रकार की आवश्यकता है (एक ऐसा सॉर्ट जहां दो कुंजी बराबर होने पर उन्हें फिर से व्यवस्थित करने के बजाय उसी क्रम में रहें) तो मुझे एस्कॉर्ट के किसी भी संस्करण के बारे में पता नहीं है जो उपयोग का होगा। मर्जेसर्ट भी स्थिर है (यदि सही तरीके से लागू किया गया है)। आपका लिंक पहली बार है जब मैंने कभी किसी को यह कहते सुना है कि मूलांक को मूलांक की तुलना में बेहतर कैश व्यवहार किया जा सकता है।


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

पैटरसन के आपके उल्लेख ने मुझे उस महत्वपूर्ण कार्य की याद दिला दी जो लगभग 15 साल पहले एंड्रिया अर्पसी-डूसू ने समूहों पर छंटनी पर किया था। (पैटरसन एक सह-लेखक थे)। 1997 के पेपर में उन्होंने वास्तव में निर्णय लिया कि आंशिक-रेडिक्स सॉर्ट व्यक्तिगत नोड्स पर क्विकॉर्टॉर्ट के लिए बेहतर था। (मैंने उत्तर के संदर्भ जोड़े)।
भटकते हुए तर्क

यह तो दिलचस्प है। CompOrg के 2009 के चौथे संस्करण में वे लामार्का के रेडिक्स सॉर्ट के पिछले संस्करणों पर काम का संदर्भ देते हैं जिसमें कैश अनफ्रेंड (पृष्ठ 489) है, लेकिन फिर क्विकर और रेडिक्स सॉर्ट की तुलना में ग्राफ़ के तहत पेज 490 पर वे कहते हैं, "ऐसे परिणामों के कारण, नए संस्करण। रैडिक्स सॉर्ट का आविष्कार किया गया है जो स्मृति पदानुक्रम को ध्यान में रखता है, ताकि इसके एल्गोरिदम लाभ प्राप्त कर सकें। " मुझे उत्सुकता है कि मूलांक सॉर्ट के ये नए संस्करण कैसे काम करते हैं।
रॉबर्ट एस। बार्न्स

मेरा संदेह यह है कि लामरका ने एक बेवकूफ मूलांक की तरह का उपयोग किया (एक जो अपनी बाल्टियों को लिंक्ड सूचियों के रूप में रखता है।) कोई भी ऐसा कभी नहीं करेगा। आप कुछ प्रकार के अनुकूलित डायनामिक ऐरे (जैसे, C ++ की तरह vector) का उपयोग करके बाल्टी को लागू करेंगे । लेकिन मुझे नहीं पता, क्योंकि मैंने लामर्का के कागज नहीं पढ़े हैं।
भटकना तर्क

@AnderingLogic कहाँ है कि रेडिक्स सॉर्ट बाल्टी का उपयोग करता है? क्या आपका मतलब यहाँ बाल्टी की तरह है?
बार

3

@ रॉबर्ट: आपका लिंक काफी आश्चर्यजनक है (वास्तव में मुझे उद्धृत वाक्य नहीं मिला)। मेरा व्यक्तिगत अनुभव यादृच्छिक इनपुट के लिए है, मूलांक सॉर्ट STL की तुलना में बहुत तेज है std::sort(), जो क्विकॉर्ट के एक संस्करण का उपयोग करता है। मैं std::sort()एक अस्थिर मूलांक के साथ बदलकर एक एल्गोरिथ्म 50% तेज करता था । मुझे यकीन नहीं है कि क्विकसॉर्ट का "मेमोरी अनुकूलित संस्करण" क्या है, लेकिन मुझे संदेह है कि यह एसटीएल संस्करण के मुकाबले दोगुना हो सकता है।

इस ब्लॉग पोस्ट ने कई अन्य छंटाई एल्गोरिदम के साथ मूलांक सॉर्ट का मूल्यांकन किया। संक्षेप में, इस मूल्यांकन में, std::sort()50 मिलियन पूर्णांकों को सॉर्ट करने में 5.1 सेकंड लगते हैं, जबकि इन-प्लेस / अस्थिर रेडिक्स सॉर्ट में 2.0 सेकंड लगते हैं। स्थिर मूलांक छांटना और भी तेज होना चाहिए।

मूलांक छँटाई भी व्यापक रूप से छँटाई तार के लिए प्रयोग किया जाता है। मूलांक सरणियों, बीडब्ल्यूटी, आदि के निर्माण के लिए कई बार मूलांक के प्रकारों को देखा जाता है।


1

रेडिक्स सॉर्ट भी एक निश्चित वर्णमाला पर निश्चित-लंबाई के शब्दों को छाँटने का एक स्वाभाविक तरीका है, जैसे कि किर्ककाइनेन एंड सैंडर्स एल्गोरिथ्म ( http://www.cs.cmu.edu/~guyb/realworld/papersS04.KaSa03.pdf )

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