छँटाई पर दिलचस्प समस्या


14

क्रमांकित गेंदों (यादृच्छिक) के साथ एक ट्यूब दिया। ट्यूब में एक गेंद को निकालने के लिए छेद होते हैं। एक ऑपरेशन के लिए निम्नलिखित चरणों पर विचार करें:

  1. आप छिद्रों में से एक या अधिक गेंदों को चुन सकते हैं और उस क्रम को याद रख सकते हैं जिसमें आपने गेंदों को उठाया था।
  2. आपको पाइप को बाईं ओर झुकाने की आवश्यकता है ताकि पाइप में शेष गेंदें बाईं ओर शिफ्ट हो जाएं और गेंदों को हटाकर बनाई गई खाली जगह पर कब्जा कर लें।
  3. आप उस क्रम को नहीं बदलने वाले हैं जिसमें आपने पाइप से गिने गेंदों को उठाया था। अब आप उन्हें गेंदों की आवाजाही द्वारा बनाए गए खाली स्थान का उपयोग करके फिर से पाइप में डालते हैं।

चरण 1 से 3 को एक ऑपरेशन माना जाता है।

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

उदाहरण के लिए: यदि ट्यूब में है: [1 4 2 3 5 6]

फिर हम बाहर ले जा सकते हैं और 5 और 6 , और अगर हम बाईं ओर पाइप झुकाव पर हम पाते हैं [ 1 2 3 ] , और हम सम्मिलित ( 4 5 6 ) इसी क्रम में पाइप के अंत को पाने के लिए [ 1 2 3 ]456[1 2 3](4 5 6)[1 2 3 4 5 6]

तो आवश्यक चरणों की न्यूनतम संख्या है 1. मुझे पाइप को छांटने के लिए न्यूनतम संचालन खोजने की आवश्यकता है।

इस समस्या को हल करने के बारे में कोई विचार या संकेत?


यदि वे रिवर्स ऑर्डर में आते हैं, तो आपको 2, 3, ... को क्रम में निकालना होगा और सभी में ऑपरेशन के लिए अंत में जोड़ना होगा । यह स्पष्ट रूप से सबसे खराब मामला है। n
वॉनब्रांड

2
8,7,6,5,4,3,2,1 -> 75318642 -> 51627384 -> 12345678 हमेशा विषम स्थितियों को बाहर निकालकर।
adrianN

मेरा उत्तर का सारांश: संचालन की न्यूनतम संख्या को सॉर्ट करने के लिए आवश्यक एक क्रमपरिवर्तन है लोग इन 2 ( ( π - 1 ) + 1 ) , जहां ( ) अवरोही की संख्या है। πlog2(d(π1)+1)d()
युवल फिल्मस 16

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

जवाबों:


10

परिभाषित करें रन विभाजन संख्या क्रमपरिवर्तन की , निरूपित किया आर ( π ) , निम्नलिखित प्रक्रिया का उपयोग कर। चलो कश्मीर में इस तरह के पूर्णांक अधिक से अधिक है कि संख्या होना मिनट ( π ) , ... , कश्मीर में बढते क्रम में दिखाई देते हैं π । उन्हें π से निकालें , और प्रक्रिया को दोहराएं। राउंड की संख्या यह पूरे क्रमचय उपभोग करने के लिए ले जाता है आर ( π )πr(π)kmin(π),,kππr(π)

उदाहरण के लिए, की गणना करें । 6273584 प्राप्त करने के लिए हमने पहले 1 सेट किया । फिर हमने 234 को सेट किया , 6758 प्राप्त करने के लिए । फिर हमने 5 अलग सेट किया , 678 प्राप्त करने के लिए । अंत में, हमने खाली क्रमपरिवर्तन प्राप्त करने के लिए 678 को अलग रखा । यह चार राउंड लेता है, इसलिए आर ( 62735814 ) = 4r(62735814)1627358423467585678678r(62735814)=4

यह प्रतिनिधित्व लिए कैसे उपयोगी है ? हर दूसरे रन यानी 234 , 678 को लें , और इन नंबरों को 51627384 पर ले जाने के लिए दाईं ओर ले जाएँ (संपादित करें: क्रम में वे क्रमचय में प्रकट होते हैं, यानी 627384 )। अब केवल दो रन हैं, अर्थात् 1234 , 5678 , और हम 5678 को दाईं ओर ले जाकर सूची को सॉर्ट कर सकते हैं ।62735814234,678516273846273841234,56785678

अब मेरा पीछा अनुमान करते हैं: एक क्रमपरिवर्तन के लिए , चलो Π सभी क्रमपरिवर्तन कि से पहुंचा जा सकता है के सेट हो π एक चाल के भीतर। तब मिनट अल्फा Π आर ( अल्फा ) = आर ( π ) / 2 πΠπminαΠr(α)=r(π)/2

इस अनुमान को देखते हुए यह दिखाने के लिए आसान है कि एक क्रमचय सॉर्ट करने के लिए की जरूरत चाल की न्यूनतम संख्या है लोग इन 2 आर ( π ) , और मैं में सभी क्रमपरिवर्तन के लिए इस सूत्र को सत्यापित किया है एसπlog2r(π) के लिए n 8Snn8

संपादित करें: यहाँ की एक अलग व्याख्या है चलाने के विभाजन संख्या है जो यह की गणना के लिए एक रेखीय समय एल्गोरिथ्म देता है, और इस प्रकार सूत्र की पुष्टि करने, मुझे मेरे अनुमान के प्रमाण के स्केच करने की अनुमति देता है log2r(π)

क्रमचय पर विचार करें फिर से। पहला रन 1 में समाप्त होने का कारण यह है कि 2 1 से पहले दिखाई देता है । इसी तरह, में इसके दूसरे भाग समाप्त होता है 4 के बाद से 5 प्रकट होता है से पहले 4 , और इतने पर। इसलिए रन-विभाजन संख्या एक क्रमपरिवर्तन की संख्या i s की संख्या है जो i + 1 i से पहले प्रकट होती है ।62735814121454ii+1i

यदि हम क्रमपरिवर्तन के व्युत्क्रम को देखें तो हम इसे और अधिक स्पष्ट रूप से कह सकते हैं। फिर से विचार करें । लो π - 1 = 72,485,136 । इस क्रमचय में तीन अवरोही हैं: 7 2 48 5 1 36 (एक वंश पूर्ववर्ती की तुलना में छोटा स्थिति है)। प्रत्येक अवरोही एक नए रन की शुरुआत से मेल खाती है। तो आर ( π ) एक प्लस में अवरोही की संख्या के बराबर है π - 1π=62735814π1=7248513672485136r(π)π1

क्या करता है के मामले में की तरह आपरेशन नज़र ? आज्ञा देना बी संख्या है कि हम सही करने के लिए कदम है, और एक संख्या है कि बाईं ओर रहने का सेट हो। हम में संख्या की जगह एक पर एक क्रमचय के साथ { 1 , ... , | | } उनके रिश्तेदार आदेश का प्रतिनिधित्व करने, और में संख्या की जगह बी पर एक क्रमचय के साथ { | | + 1 , , | | + | B | }π1BAA{1,,|A|}B{|A|+1,,|A|+|B|} । उदाहरण के लिए, 6273 5 8 की चाल पर विचार करें । उलटा क्रमपरिवर्तन के संदर्भ में, यह 7 248 5 136 8 2 468 1 357 है । तो 75 को मैप किया गया था 21 और 248,136 से मैप किया गया था 468,357627358145162738472485136246813577521248136468357

एक वंश में π - 1 आपरेशन केवल तभी के बाद खत्म हो जाता है एक्स एक और y बी । इसके विपरीत, के मामले में π - 1 , में विभाजन एक और बी से मेल खाती है एक -runs और बी -runs; हर बार एक बी रन समाप्त होता है और एक एक रन शुरू होता है, वहाँ एक वंश है। एक वंश को "मारने" के लिए, हमें A -run से B तक स्विच करना होगाxyπ1xAyBπ1ABABBAAB अरुण। यदि हम दो वंशों को मारते हैं, तो हम बीच से एक में बदल जाएंगेवंशों को मारतेअवरोह के लिए B -run से A -run।BA

यह तर्क है कि दिखाने के लिए है, तो औपचारिक रूप दिया जा सकता है से उत्पन्न होती है π एक ऑपरेशन के माध्यम से, तो ( α - 1 ) ( π - 1 ) / 2 , जहां ( ) अवरोही की संख्या है। इस के बराबर है आर ( α ) आर ( π ) / 2 απd(α1)d(π1)/2d()r(α)r(π)/2 , इस प्रकार मेरी अनुमान का एक ही दिशा साबित। दूसरी दिशा आसान है, और पहले से ही ऊपर उल्लिखित किया गया था: हम बस हर दूसरा रन लेते हैं और इन रनों को एक क्रमांक α प्राप्त करने के लिए दाईं ओर धकेलते हैंα satisfying r(α)=r(π/2).


You are taking out several rounds of balls at once, I understand that isn't allowed.
vonbrand

1
I'm taking them in the order they appear in the permutation. That is legal.
Yuval Filmus

i am bit confused. can you please explain min number of operations required to sort [6 5 4 3 2 1] and also you mentioned like "Take every second run, i.e. 234,678, and move these numbers to the right to get 51627384" can you please explian this with detail and also how to calculate r(π) efficently?
user6709

1) r(654321)=6, so you would need 3 operations. For example, 654321531|64251|62341234|56.
Yuval Filmus

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