एक अच्छा विशेष-मामला सॉर्टिंग एल्गोरिदम क्या है?


13

मेरे पास एक डेटासेट है जो 2-डी ग्रिड में व्यवस्थित वस्तुओं की संख्या है। मुझे पता है कि मेरे पास एक सख्त आदेश है, जैसे-जैसे आप प्रत्येक पंक्ति के भीतर बाएं-से-दाएं बढ़ते जाते हैं, और प्रत्येक कॉलम के भीतर ऊपर-से-नीचे बढ़ते जाते हैं। उदाहरण के लिए,

  • १ २ ३
  • ४ ६ 7
  • ५ 9 ९

क्या मैं संपूर्ण डेटासेट को क्रमबद्ध रूप से सॉर्ट करने के लिए भोली छँटाई में सुधार कर सकता हूं (जैसा कि तुलना में मापा जाता है)?

एन डी डेटासेट के बारे में क्या? तुलनाओं के सबसेट के साथ मनमाना परिमित डेटासेट?


1
क्या आप अधिक सटीक प्रश्न पूछ सकते हैं? आपके पहले पैराग्राफ का मतलब यह समझा जा सकता है कि आपका डेटा पहले से ही सॉर्ट है! वास्तव में आपका इनपुट क्या है, और आप क्या आउटपुट चाहते हैं?
जैक्स केयरटे

1
हां, भाषा थोड़ी भ्रमित करने वाली है। मुझे यह महसूस करने में कुछ समय लगा कि डेटा सेट में n संख्याओं को क्रमबद्ध किया जाना है, लेकिन इन संख्याओं को एक sqrt (n) x sqrt (n) ग्रिड में व्यवस्थित किया जाता है जैसे कि प्रत्येक पंक्ति और प्रत्येक स्तंभ पहले से ही क्रमबद्ध है। क्या आपका आशय यही था?

हां, मेरा यही मतलब है। मैं स्पष्टता के लिए संपादन करूंगा।
ज़ाचारी वैंस

जवाबों:


19

यह साबित करना आसान है Ω (n 2 log n) इस समस्या पर कम बाउंड (तुलना छँटाई मॉडल में): यदि स्थिति (i, j) पर तत्व हमेशा i + j की दूरी 1/2 के भीतर है, तो ग्रिड विकर्ण एक दूसरे से स्वतंत्र होते हैं, और प्रत्येक ग्रिड विकर्ण के भीतर क्रमबद्ध क्रम मनमाना होता है। तो इस बाधा के तहत संभव आदेशों की कुल संख्या (विकर्ण के सभी विकर्ण पर) विकर्णों की लंबाई के फैक्टरियल की है, जो कि एन 2 लॉग एन में घातांक है ।

यह कहना है कि मानक तुलना छँटाई एल्गोरिदम आप के रूप में वर्णित ग्रिड के लिए asymptotically इष्टतम हैं।


अन्य जवाब इस जटिलता के साथ एक स्पष्ट एल्गोरिथ्म देता है, इसलिए मैं 2-डी ग्रिड के लिए हल की गई इस समस्या पर विचार करूंगा और वास्तव में बिना जांच किए, शायद मनमाने आयाम ग्रिड के लिए।
२०:५० पर ज़ाचरी वेंस

4

यदि मैं समस्या को सही ढंग से समझता हूं (और मैं नहीं कर सकता, तो मुझे यह बताने के लिए स्वतंत्र महसूस करें कि क्या मैं नहीं) आप 2 डी ग्रिड को एक क्रमबद्ध 1 डी सरणी में बदलना चाहते हैं, जबकि प्रत्येक पंक्ति और स्तंभ पहले से ही 2 डी ग्रिड में क्रमबद्ध हैं?

इस मामले में सूची में पहला तत्व शीर्ष-बाएं कोने ((0,0), समस्या की परिभाषा से) होना चाहिए। इसके बाद इसे या तो (1,0) या (0,1) तत्व होना चाहिए, क्योंकि सभी अन्य परिभाषा के अनुसार इनसे बड़े होंगे।

आप यह कहकर सामान्य कर सकते हैं कि ग्रिड में अगला सबसे छोटा तत्व हमेशा पहले से उपयोग किए जाने वाले तत्व (या ग्रिड के किनारे) से सीधे नीचे है, और पहले से ही उपयोग किए गए एक तत्व (या ग्रिड के किनारे) के दाईं ओर, दोनों ही हैं इससे छोटा होना परिभाषित किया गया है। इसलिए प्रत्येक पुनरावृत्ति पर आपको केवल इस आवश्यकता को पूरा करने वाले सबसे छोटे मूल्य पर विचार करना चाहिए।

आप संभावित उम्मीदवारों को क्रमबद्ध क्रम में रख सकते हैं क्योंकि आप उन्हें ढूंढते हैं (दो से अधिक कभी भी एक पुनरावृत्ति में उपलब्ध नहीं किए जाएंगे), और प्रत्येक पुनरावृत्ति पर उपलब्ध नए मानों की जांच करें (यदि कोई हो)। यदि वे पिछले उम्मीदवारों की तुलना में सबसे कम हैं, तो उन्हें सीधे सूची में जोड़ें और दोहराएं, अन्यथा सबसे कम पिछले उम्मीदवार को जोड़ें और अगले अंक आदि की तुलना करें।

दुर्भाग्य से, मैं इस बात की सटीक जटिलता प्रदान करने में सक्षम होने का दावा नहीं करता, न ही यह दावा करता हूं कि यह सबसे अधिक संभव है, यह निश्चित रूप से एक भोले दृष्टिकोण से बेहतर लगता है, और मुझे आशा है कि मैंने इसे समझने के लिए आपको अच्छी तरह समझाया।

EDIT: इस तरह nd ग्रिड के लिए मेरा मानना ​​है कि एक ही मूल सिद्धांत लागू होता है, लेकिन प्रत्येक पुनरावृत्ति n नए उम्मीदवारों को उपलब्ध कराती है, और इन उम्मीदवारों को इस बिंदु पर प्रत्येक n आयामों में सबसे छोटे अप्रयुक्त तत्व होने चाहिए।


संक्षेप में, आप एक sqrt (N) -वे मर्ज कर सकते हैं, जैसे मर्जसॉर्ट में? यह मेरा सबसे अच्छा चलने वाला तरीका था, लेकिन यह O (N log N) निकला - मेरे पास वहां कोई सटीक स्थिरांक नहीं है, लेकिन कम से कम लॉग (sqrt (N)) के लिए 0.5 है।
Zachary Vance
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.