सूची को न्यूनतम रखने के लिए कुशलतापूर्वक सूची में सम्मिलित करना


15

तुलनीय वस्तुओं की दो सूची मान लें: यू और एस। आइए INV (u) को उलटा संख्या दें।

मैं एक कुशल एल्गोरिथ्म की तलाश कर रहा हूं, जिससे कि INV (u) की न्यूनतम वृद्धि के साथ s की वस्तुओं को यू में डाला जा सके।

मूल रूप से मैं पहली सूची के आदेश को ध्यान में रखते हुए "संभव के रूप में क्रमबद्ध" रखते हुए वस्तुओं को एक सूची में सम्मिलित करना चाहूंगा।

उदाहरण:

u = [4,6,2,9,7]
INV(u) = 3 ((4, 2), (6, 2) and (9, 7)

s = [8,3,10]

one optimal solution u' = [3, 4, 6, 2, 8, 9, 7, 10]
INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (8,7))

different optimal solution u' = [3, 4, 6, 2, 9, 7, 8, 10]
INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (9,8))

जैसा कि आप देख सकते हैं कि कोई अनूठा इष्टतम समाधान नहीं है।

मुझे किसी भी प्रकार के विचारों या दिशा पर ध्यान देना चाहिए।


विचार के लिए भोजन: भोली दृष्टिकोण होगा: एस से एक तत्व लें, इसे यू से बाएं में प्रत्येक तत्व से तुलना करें, अगर यह एक उलटा है तो वेतन वृद्धि करें और पहले से गणना की गई संख्या को ले जाएं। फिर एक ही तत्व के साथ दाएं से बाएं सूची को पीछे छोड़ते हुए, प्रत्येक स्थिति के लिए मायने रखता है। यह अंतरिक्ष में O (| s | *। | U |) के साथ चलता है = O (| u |)
trevore

1
अधिक से अधिक बढ़ रही सभी बाद के निरीक्षणों का निरीक्षण कहीं हो सकता है।
राफेल

जवाबों:


2

यह trevore के उत्तर पर एक विस्तार है। यह एक टिप्पणी में फिट होने के लिए बहुत लंबा है और उसके समाधान के प्रमाण शामिल हैं (या कम से कम मैं इसे कैसे समझता हूं)।

आप दिखा सकते हैं कि किसी भी इष्टतम समाधान में, के तत्वों आदेश दिया दिखाई देगा। sयदि नहीं, तो मान और वे सर्वोत्कृष्ट समाधान में उलटे क्रम में दिखाई देते हैं। चलो σ 1 के बीच तत्वों की संख्या हो रों 1 और एस 2 तुलना में कम कर रहे हैं रों 1 और β 1 उन है कि से भी बड़ा कर रहे हैं की संख्या हो रों 1 । परिभाषित करें σ 2 और बीटा 2 के लिए इसी तरह रों 2 । ध्यान दें कि σ 1s1<s2σ1s1s2s1β1s1σ2β2s2 और बीटा 2बीटा 1 । गमागमन रों 1 और एस 2 से व्युत्क्रम की संख्या बदल जाएगा - β 1 + β 2 - σ 2 + σ 1 - 1 जो सबसे -1 पर है।σ1σ2β2β1s1s2β1+β2σ2+σ11

यह देखने के लिए कि के तत्वों कठिन नहीं है स्वतंत्र रूप से डाला जा सकता है। sचूंकि वे आदेश दिया दिखाई देते हैं, के तत्वों एक दूसरे की उपस्थिति नहीं "लगता है" है। यही है, एस से तत्वों के जोड़े उलटा गिनती में योगदान नहीं करते हैं। ऐसा करने के लिए, रैखिक समय में s के माध्य को सम्मिलित करें । फिर, रिकर्सिवली, के डालने तत्वों रों को मंझला की तुलना में कम मंझला और उसके सही करने के लिए मंझला से भी बड़ा तत्वों के छोड़ दिया है।ssss

आइए मंझला स्थिति में डाला जा , इस संतुष्ट का क्रम, टी ( | है | , | यू | ) = टी ( | है | / 2 , | यू | - कश्मीर ) + टी ( | है | / 2 , कश्मीर ) + | यू | + | s | , रेखीय | s |kT(|s|,|u|)=T(|s|/2,|u|k)+T(|s|/2,k)+|u|+|s||s|कारक माध्य खोजने और के तत्वों को फेरबदल करने के लिए है । यह प्रेरण द्वारा पता चलता है कि आसान है टी ( | है | , | यू | ) = हे ( | s | लॉग | है | + | यू | लॉग | है | )sT(|s|,|u|)=O(|s|log|s|+|u|log|s|)

ध्यान दें कि निर्भरता यहाँ इष्टतम है। खाली साथ समस्या को हल करने के बाद से यू छँटाई के बराबर है रों केवल तुलना का उपयोग कर। पर निर्भरता | यू | एक सिंगलटन सूची के लिए समस्या के बाद से, इष्टतम भी है रों और एक सूची यू रैखिक काम की आवश्यकता होगी।|s|us|u|su


विस्तृत करने के लिए धन्यवाद। ठीक यही मेरा मतलब है।
trevore

1

ठीक है, यहाँ मेरा समाधान है:

एक अवलोकन (जो मैंने कम या ज्यादा साबित किया है) यह है कि एक इष्टतम समाधान हमेशा एक होगा जिसमें एस को आरोही क्रमबद्ध किया जाता है। यह एक O ((| u | + | s |) | * लॉग (| s |)) एल्गोरिथ्म को जन्म देता है।

एक तत्व के लिए इष्टतम समाधान खोजने के लिए, जैसा कि मैंने अपनी टिप्पणी में कहा है: एस से एक तत्व लें, इसे यू से प्रत्येक तत्व की तुलना में बाएं से दाएं करें, एक काउंटर बढ़ाना एक उलटा है और पहले से गणना की गई संख्या को ले जाएं। फिर एक ही तत्व के साथ दाएं से बाएं सूची को पीछे छोड़ते हुए, प्रत्येक स्थिति के लिए मायने रखता है।

यह O (| u |) है।

सॉर्ट करें।

स्थिति m पर s के मध्य तत्व के लिए: u में सर्वश्रेष्ठ स्थिति b ज्ञात करें (ऊपर से विधि का उपयोग करके)।

M और u को b पर विभाजित करें और बाएं और दाएं भागों के साथ पुनरावर्ती रूप से कॉल करें, सही क्रम में m के साथ परिणाम को बदलते हुए।

यू या एस खाली होते ही रुक जाएं।


मुझे यह समझ में नहीं आता है। s एक इनपुट है। आप मान नहीं सकते हैं कि क्रमबद्ध क्रम में है। आपका एल्गोरिथ्म एस के सभी संभावित मूल्यों के लिए काम करना चाहिए।
डीडब्ल्यू

हां, लेकिन किसी भी इष्टतम समाधान में एस के तत्व हमेशा नए सरणी में आरोही रूप से सॉर्ट किए जाएंगे। नोट "सॉर्ट करें।" ऊपर का उदाहरण देखें। मैंने अब तक जो साबित किया है, वह है: a, b के लिए, a <b यदि a को जानबूझकर u में रखा गया है, तो b के लिए इष्टतम स्थान a के दाईं ओर है।
trevore
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.