2010-02-28 13 views
34

पिछले सप्ताह मैं this paper से अधिक ठोकर खाई जहां लेखकों दूसरे पृष्ठ पर उल्लेख:क्या कोई ओ (एन) पूर्णांक सॉर्टिंग एल्गोरिदम है?

ध्यान दें कि यह पूर्णांक बढ़त वजन के लिए एक रेखीय चलने का समय अर्जित करता है।

तीसरे पृष्ठ पर एक ही:

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

और 8 वीं पृष्ठ पर:

विशेष रूप से, तेजी से पूर्णांक छंटाई का उपयोग कर शायद जीपीए काफी तेजी लाने जाएगा।

क्या इसका मतलब यह है कि पूर्ण परिस्थितियों के लिए पूर्ण परिस्थितियों में ओ (एन) सॉर्टिंग एल्गोरिदम है? या यह ग्राफ सिद्धांत की विशेषता है?

पुनश्च:

आगे सुधार इस तरह के पूर्णांक के रूप में [..] ग्राफ कक्षाओं के लिए प्राप्त किए गए हैं:
ऐसा नहीं है कि संदर्भ [3] उपयोगी है क्योंकि पहले पृष्ठ पर वे कहते हैं कि हो सकता है हो सकता है एज वजन [3], [...]

लेकिन मुझे किसी भी वैज्ञानिक पत्रिकाओं तक पहुंच नहीं थी।

+1

क्यों विशेष परिस्थितियों में मदद कर सकते हैं, 0 और 9. के बीच एक लाख पूर्णांकों छँटाई के मामले पर विचार करने के लिए आप बस प्रत्येक में से कितने भरोसा कर सकते हैं वहां अंक हैं, और बाद में अंकों को अपने गिनती के आधार पर सही क्रम में डाल दें। यह गिनती प्रकार का आधार है। – polygenelubricants

+0

आप सभी को धन्यवाद! मैंने बहुत कुछ सीखा। इस प्रश्न पर मैंने बनाए गए कुछ जावा बेंचमार्क के लिए यहां देखें: http://karussell.wordpress.com/2010/03/01/fast-integer-sorting-algorithm-on/ – Karussell

+0

मैंने इनमें से एक को मजाक (http : //tinylittlelife.org/ पी = 261)। पंचलाइन को खराब करने के लिए, यह इनपुट को बाइट्स के बजाए बिट्स की सरणी के रूप में और इसे "सॉर्टिंग" फ़ॉर्म '000000111111' में पूरा करके पूरा करता है। – Ian

उत्तर

47

हां, रेडिक्स सॉर्ट और गिनती सॉर्ट O(N) हैं। वे तुलना-आधारित प्रकार नहीं हैं, जो Ω(N log N) निचले बाउंड साबित हुए हैं।

सटीक होने के लिए, रेडिक्स सॉर्ट O(kN) है, जहां k सॉर्ट किए जाने वाले मानों में अंकों की संख्या है। गिनती क्रम O(N + k) है, जहां k सॉर्ट किए जाने वाले नंबरों की श्रृंखला है।

विशिष्ट अनुप्रयोग हैं जहां k इतना छोटा है कि दोनों रेडिक्स सॉर्ट और गिनती सॉर्ट प्रदर्शन में रैखिक-समय प्रदर्शन प्रदर्शित करते हैं।

+19

निचली सीमाएं हमेशा Ω के रूप में व्यक्त की जाती हैं। ओ निचले बाउंड को कहने का कोई अर्थपूर्ण अर्थ नहीं है। अन्यथा +1। –

+0

सुधार के लिए धन्यवाद =) – polygenelubricants

+1

वे केवल 'ओ (एन)' हैं, यदि पूर्णांक का सबसे बड़ा संभव मूल्य एन से कम या बराबर है - अन्यथा वे 'ओ (max_int)' हैं, नहीं? – sepp2k

11

तुलनात्मक रूप से कम से कम Ω (एन लॉग एन) होना चाहिए।

हालांकि, counting sort और radix sort इनपुट आकार – के साथ रैखिक रूप से स्केल करें क्योंकि वे तुलनात्मक प्रकार नहीं हैं, वे इनपुट की निश्चित संरचना का फायदा उठाते हैं।

4

गिनती क्रमबद्ध करें: http://en.wikipedia.org/wiki/Counting_sort यदि आपके पूर्णांक काफी छोटे हैं। आप बड़ा नंबर हैं, तो मूलांक तरह (यह मूल रूप से गिनती प्रकार का सामान्यीकरण, या बड़ा संख्या के लिए एक अनुकूलन अगर आप करेंगे है): http://en.wikipedia.org/wiki/Radix_sort

है भी तरह बाल्टी: बहुत ही व्यावहारिक http://en.wikipedia.org/wiki/Bucket_sort

2

जबकि नहीं (मुख्य रूप से बड़ी मेमोरी ओवरहेड के कारण), मैंने सोचा कि मैं Abacus (Bead) Sort का उल्लेख एक और दिलचस्प रैखिक समय सॉर्टिंग एल्गोरिदम के रूप में करूँगा।

+2

बड़ा-ओ आकर्षक हो सकता है, लेकिन सॉफ़्टवेयर में लागू होने पर, [इस प्रकार] (http://stackoverflow.com/a/9027807/10396) क्विकॉर्ट से लगभग 10x धीमी गति से प्रदर्शन करता है। – AShelly

0

इन हार्डवेयर आधारित छँटाई एल्गोरिदम:

A Comparison-Free Sorting Algorithm
Sorting Binary Numbers in Hardware - A Novel Algorithm and its Implementation

Laser Domino Sorting Algorithm - मेरे द्वारा एक सोचा प्रयोग एक इरादे से गिनती क्रमबद्ध गिनती से अधिक O(n) समय जटिलता को प्राप्त करने के आधार पर क्रमबद्ध O(n + k) है।

0

थोड़ा और विवरण जोड़ना - व्यावहारिक रूप से आज तक का सबसे अच्छा सॉर्टिंग एल्गोरिदम ओ (एन) नहीं है, लेकिन 0 (एन \ sqrt {\ log \ log n}) है।

आप समाचार पत्र में इस algo के बारे में अधिक विवरण देख सकते हैं: http://dl.acm.org/citation.cfm?id=652131

संबंधित मुद्दे