रेडिक्स सॉर्ट


23

मूलांक के क्रम में हम पहले कम से कम महत्वपूर्ण अंकों को छाँटते हैं और फिर हम दूसरे महत्वपूर्ण अंकों को छाँटते हैं और इसी तरह छँटी हुई सूची को समाप्त करते हैं।

अब अगर हमारे पास संख्याओं की सूची है, तो हमें उन संख्याओं के बीच अंतर करने के लिए बिट्स की आवश्यकता है । इसलिए हमारे द्वारा किए जाने वाले मूलांक की संख्या । प्रत्येक पास में समय लगता है और इसलिए मूलांक के चलने का समयलॉग एन लॉग एन ( एन ) ( एन लॉग एन )nlognlognO(n)O(nlogn)

लेकिन यह सर्वविदित है कि यह रैखिक समय एल्गोरिथ्म है। क्यों?


यही कारण है कि रैखिक समय प्रकारों को आमतौर पर आवश्यकता होती है कि इनपुट कुछ निश्चित सीमा पर पूर्णांक हो। मूलांक छंटनी के लिए अंकों पर एक निश्चित सीमा की आवश्यकता होती है। अपने उदाहरण में आपने मान लिया कि सीमा , लेकिन अंकों के लिए कोई पूर्णांक सीमा संभव है; उदाहरण के लिए, आप[ 0 , [0,1][0,n]
जो

जवाबों:


19

यदि हमारे पास संख्याओं की सूची है, तो हमें बिट्स की आवश्यकता होगीलॉग एनnlogn

नहीं: यदि हमारे पास और बीच संख्याओं की सूची है , तो हमें बिट्स की आवश्यकता है । सामान्य रूप से और बीच कोई संबंध नहीं है ।2 k - 1 k k लॉग एन02k1kklogn

यदि संख्याएँ सभी अलग-अलग हैं, तो अलग-अलग संख्याओं पर , और मूलांक सॉर्ट करें, इसीलिए समय जटिलता है । सामान्य तौर पर, मूलांक की जटिलता तरह है जहां प्रकार और करने के लिए तत्वों की संख्या है प्रत्येक तत्व में बिट्स की संख्या है।Ω ( एन लॉग इन करें n ) Θ ( nlognkΩ(nlogn)n केΘ(nk)nk

यह कहने के लिए कि मूलांक छँटनी की जटिलता अर्थ है संख्याओं के लिए निश्चित बिट आकार लेना। इसका तात्पर्य है कि बड़े पर्याप्त , कई डुप्लिकेट मान होंगे।एनO(n)n


एक सामान्य प्रमेय है कि एक सरणी या सूची सॉर्टिंग विधि जो एक समय में दो तत्वों की तुलना करके काम करती है , सबसे खराब स्थिति में से अधिक तेजी से नहीं चल सकती है । रेडिक्स सॉर्ट तत्वों की तुलना करके काम नहीं करता है, लेकिन एक ही प्रूफ विधि काम करती है। रेडिक्स सॉर्ट एक निर्णय प्रक्रिया है जो यह निर्धारित करने के लिए है कि किस क्रम को सरणी पर लागू करना है; वहाँएरे की क्रमपरिवर्तन, और रेडिक्स की तरह द्विआधारी निर्णय लेता है, अर्थात यह तय करता है कि प्रत्येक चरण में दो तत्वों को स्वैप करना है या नहीं। बाइनरी निर्णयों के बाद , रेडिक्स सॉर्ट क्रमपरिवर्तन के बीच तय कर सकता है । तक पहुँचने के लिएसंभव क्रमपरिवर्तन, यह आवश्यक है कि ।n ! 2 N ! मी लॉग ( एन ! ) = Θ ( एन लॉग एन )Θ(nlogn)n!m2mn!mlog(n!)=Θ(nlogn)

इस प्रमाण में एक धारणा कि मैंने ऊपर नहीं लिखा है कि एल्गोरिथ्म मामले में काम करना चाहिए जब तत्व अलग-अलग हों। यदि यह एक प्राथमिकता के रूप में जाना जाता है कि तत्व सभी अलग-अलग नहीं हैं, तो संभावित क्रमपरिवर्तन की संख्या पूर्ण से कम है ! । जब छँटाई कश्मीर -बिट संख्या, यह केवल संभव है n विशिष्ट तत्वों जब n 2 कश्मीर ; उस स्थिति में, मूलांक तरह की जटिलता वास्तव में है Ω ( एन लॉग इन करें n )N के बड़े मूल्यों के लिए , टकराव होना चाहिए, जो बताता है कि कैसे मूलांक छंटाई की जटिलता हो सकती है जो Θ ( से कम है )n!knn2kΩ(nlogn)n जब n > 2 kΘ(nlogn)n>2k


1
देखने का एक वैकल्पिक बिंदु शब्द-रैम लागत मॉडल है: हमारी मशीन निरंतर समय में बिट्स के पूर्णांक के साथ काम कर सकती है । (वर्तमान मशीनों में w = 64 है । इस तरह, 2 w बकेट के साथ वितरण प्रकार का एक चरण ( 1 ) समय में एक संबंधित सरणी तत्व को सीधे एक्सेस करके किया जा सकता है । इस तरह, w = O ( लॉग एन ) बिट्स के एन पूर्णांकों के लिए मूलांक क्रम रेखीय है । ww=642wO(1)nw=O(logn)
सेबेस्टियन

9

O(n)0k1kΘ(n+k)k=O(n)

ddΘ(d(n+k))dk=O(n)


1
[0,N1]N=O(nd)dO(d)O(n)

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