मैं सकारात्मक पूर्णांक मानों की एक सरणी को क्रमबद्ध करने में रुचि रखता हूं रैखिक समय में (रैम मॉडल में समान लागत माप के साथ, यानी, पूर्णांक लॉगरिदमिक आकार तक हो सकता है, लेकिन उन पर अंकगणितीय संचालन माना जा सकता है। इकाई समय लें)। बेशक, तुलना-आधारित सॉर्टिंग एल्गोरिदम के साथ यह असंभव है, इसलिए मैं एक "अनुमानित" प्रकार की गणना करने में रुचि रखता हूं, अर्थात, कुछ क्रमचय गणना करना के जो वास्तव में सामान्य रूप में पृथक नहीं किया जा रहा है, लेकिन की क्रमबद्ध संस्करण के एक "अच्छा सन्निकटन"। मुझे लगता है कि हम पूर्णांक को घटते क्रम में छांट रहे हैं क्योंकि यह अगली कड़ी को राज्य के लिए थोड़ा और सुखद बनाता है, लेकिन निश्चित रूप से समस्या को दूसरे तरीके से गोल कर सकता है।
अनुमानित प्रकार के लिए एक संभावित मानदंड निम्नलिखित है (*): be , हर , हमें आवश्यकता है कि (यानी "अर्ध-क्रमबद्ध" सूची को घटते फ़ंक्शन ) से ऊपर से । यह देखना है कि वास्तविक तरह संतुष्ट इस आसान है: से अधिक नहीं होना चाहिए तो यह अधिक से अधिक है जो , और सामान्य रूप से से अधिक नहीं होना चाहिए जो।
उदाहरण के लिए, आवश्यकता (*) नीचे एल्गोरिथम द्वारा प्राप्त की जा सकती है (@Louis द्वारा सुझाई गई)। मेरा प्रश्न यह है: क्या इस तरह के काम को "लगभग छँटाई" पूर्णांक में रैखिक समय में किया जा रहा है, (*) जैसी कुछ आवश्यकता को लागू करने से वास्तविक छंटाई संतुष्ट होगी? क्या नीचे एल्गोरिथ्म, या इसके कुछ प्रकार, एक स्थापित नाम है?
संपादित करें: एल्गोरिथ्म को ठीक किया और अधिक स्पष्टीकरण जोड़े
कलन विधि:
INPUT: V an array of size n containing positive integers
OUTPUT: T
N = Σ_{i<n} V[i]
Create n buckets indexed by 1..n
For i in 1..n
| Add V[i] into the bucket min(floor(N/V[i]),n)
+
For bucket 1 to bucket n
| For each element in the bucket
| | Append element to T
| +
+
यह एल्गोरिथम निम्नलिखित कारणों के अनुसार काम करता है:
- एक तत्व तो बाल्टी में है तो ।
- यदि कोई तत्व बाल्टी तो या ।
को बाल्टी में डाला जाता है , इस प्रकार या । पहले मामले में जिसका अर्थ है और इस प्रकार ।
के लिए , देखते हैं, ज्यादा से ज्यादा, 1 से बाल्टी में तत्वों ।
आज्ञा देना और चलो तत्वों की कुल संख्या में से एक बाल्टी में 1.j। द्वारा 2. हम चाहते हैं कि हर तत्व है एक बाल्टी में (के साथ ) ऐसी है कि । इसलिए योग से बाल्टी में सभी तत्वों के करने के लिए से अधिक है । लेकिन यह राशि , से भी कम है, इस प्रकार and और इस प्रकार जो हमें या ।वी मैं मैं ≤ जे एन / ( j + 1 ) ≤ एन / ( मैं + 1 ) < वी कश्मीर 1 j कश्मीर × एन / ( जम्मू + 1 ) कश्मीर एन कश्मीर × एन / ( j + 1 ) < कश्मीर ≤ एन कश्मीर / ( j + 1 ) <
सन्तुष्ट (*) अर्थात का -थ तत्व ऐसा है जो
द्वारा 3. हम उस राशि , के मई के तत्व , एक बाल्टी से आता है के साथ इसलिए ।
इस एल्गोरिथ्म में रैखिक समय लगता है।
की गणना में रैखिक समय लगता है। बाल्टी को एक लिंक्ड-सूची के साथ लागू किया जा सकता है जिसमें सम्मिलन और पुनरावृत्ति है। नेस्टेड लूप कई बार चलता है जैसे कि तत्व (यानी बार) हैं।