अधिकतम 7 की तुलना में 5 पूर्णांकों की क्रमबद्ध सरणी


19

मैं 5 पूर्णांकों की सूची को कैसे क्रमित कर सकता हूं जो सबसे खराब स्थिति में 7 तुलनाएं लेता है? मुझे इस बात की परवाह नहीं है कि कितने अन्य ऑपरेशन किए जाते हैं। मुझे पूर्णांकों के बारे में कुछ खास नहीं पता है।

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

अभी मैं सिर्फ एक संकेत की तलाश में हूं, समाधान नहीं।


क्या आपने "तुलना-टू" पेड़ लिखने की कोशिश की है? यह पत्ते, प्रत्येक पूर्णांक के क्रमपरिवर्तन के लिए। यदि आप नहीं जानते कि "तुलना-से" पेड़ से मेरा क्या मतलब है, तो क्या आपको इस बात का प्रमाण है कि आपको n लॉग एन तुलना की आवश्यकता है? पुनश्च, क्या आपको लगता है कि यह संभव है? 5!=120nlogn
पाल जीडी

1
खैर, 8 बिट दो के पूरक में, if(x > y)वही है if((x - y) & 0x80)जो शायद ही तुलना है। मुझे लगता है कि हमें यह भूल जाना चाहिए कि वस्तुएँ पूर्णांक हैं और हमें compare(x, y)उन वस्तुओं की तुलना करने के लिए कुछ जादुई फ़ंक्शन का उपयोग करना चाहिए ...
करोलिस जुओडेलो

2
क्या कंप्यूटर प्रोग्रामिंग के वॉल्यूम 3 में इष्टतम छँटाई पर खंड 5.3 की जाँच करता है , जो संकेत या समाधान के रूप में इस प्रश्न को ठीक से कवर करता है? :-)
स्टीवन स्टडनिक

3
बाध्य वास्तव में वह यह है कि , और ! = 120 < 2 7 = 128 । तो यह है संभव (सिद्धांत रूप में)। 2cn!5!=120<27=128
वॉनब्रांड

जवाबों:


23

इस प्रक्रिया को शुरू करने का केवल एक ही तरीका है (और बाद के चरणों में तुलना करने के आपके सभी निर्णयों के लिए केवल एक सही तरीका है)। यहाँ यह कैसे पता लगाने के लिए है। सबसे पहले, ध्यान दें कि संभावित उत्तर हैं जो आप अपनी तुलना के लिए प्राप्त कर सकते हैं, और 5 ! = 120 अलग-अलग क्रमपरिवर्तन जिनके बीच आपको अंतर करने की आवश्यकता है।27=1285!=120

पहली तुलना आसान है: आपको दो चाबियों की तुलना करनी होगी, और चूंकि आप उनके बारे में कुछ नहीं जानते हैं, इसलिए सभी विकल्प समान रूप से अच्छे हैं। तो चलो आप तुलना मान लीजिए और , और कहा कि लगता है एक । अब आपके पास 2 6 = 64 संभावित उत्तर बचे हैं, और 60 संभावित क्रमांकन शेष हैं (चूंकि हमने उनमें से आधे को समाप्त कर दिया है)।abab26=6460

इसके बाद, हम या तो तुलना कर सकते हैं और , या हम तुलना कर सकते हैं कुंजी हम पहले की तुलना में इस्तेमाल किया से एक के लिए। हम तुलना और , और पता चलता है कि सी , तो हमारे पास 32 शेष उत्तर और 30 संभव क्रमपरिवर्तन। दूसरी ओर, अगर हम तुलना करते हैंcdccdcd3230 के साथ एक है, और हमें पता चलता है कि एक सी , हमारे पास 40 , संभव शेष क्रमपरिवर्तन क्योंकि हम दूर कर दिया है 1 / 3 संभव क्रमपरिवर्तन की (के साथ उन लोगोंcaac401/3 )। हमारे पास केवल 32 संभावित शेष उत्तर हैं, इसलिए हम भाग्य से बाहर हैं।cab32

तो अब हम जानते हैं कि हमें पहली और दूसरी चाबी, और तीसरी और चौथी चाबी की तुलना करनी होगी। हम यह मान सकते हैं कि हम है कि और । हम तुलना इन चार कुंजियों में से किसी को, एक ही तर्क हम पिछले चरण में प्रयोग किया जाता द्वारा, हम केवल समाप्त हो सकती 1 / 3 क्रमपरिवर्तन शेष की, और हम भाग्य से बाहर रहे हैं। इसलिए हमें दो चाबियों की तुलना करनी होगीabcde1/3। समरूपता को ध्यान में रखते हुए, हमारे पास दो विकल्प हैं, एक और सी की तुलना करेंऔर एक और डी की तुलना करेंa,b,c,dacad। एक समान गिनती तर्क दिखाता है कि हमें और सी की तुलना करनी चाहिए । हम व्यापकता की कि हानि के बिना यह मान सकते हैं एक सी , और अब हमारे पास एक और एक सी acacabacd

चूँकि आपने एक संकेत के लिए कहा था, मैं बाकी तर्क से नहीं गुज़रूँगा। आपके पास चार तुलनाएँ शेष हैं। इनका बुद्धिमानी से उपयोग करें।


तुम कैसे है कि एक की तुलना a करने पर आपको केवल 40 पारगमन तक नीचे जाना होगा? c
रॉबर्ट एस। बार्न्स

1
@Robert: आप मान लीजिए और एक सी । तो फिर वहाँ के दो क्रमपरिवर्तन हैं एक , , इन बाधाओं, के साथ संगत एक < b < और एक < < b । इन दो क्रमों में से प्रत्येक के लिए, चार स्थान हैं जहाँ आप d जोड़ सकते हैं और पाँच स्थान आप e जोड़ सकते हैं । abaca,b,ca<b<ca<c<bde
पीटर शोर

8

आप इसे द आर्ट ऑफ कंप्यूटर प्रोग्रामिंग वॉल्यूम III में डी.कुंठ द्वारा पा सकते हैं, लेकिन रणनीति इस प्रकार है (मैं मान लूंगा आपके पास ): यदि आप संकेत पढ़ना चाहते हैं मेरे उत्तर की पहली दो पंक्तियाँ{a,b,c,d,e}

  • संख्याओं के पहले समूह जोड़े: (a,b),(c,d)
  • उनकी तरह सॉर्ट करने के लिए जोड़े की तुलना करें: a<b,c<d
  • जोड़े में सबसे छोटी तत्वों की तुलना करें, हम परिणाम जैसे हो a<c
  • अंतिम तुलना में अंतिम तत्व तुलना करें, अंतिम तुलना में बड़ा तत्व ( सी ) ec
    • यदि , 3 शेष तुलना के साथ समाप्त करना आसान है। ख़त्म होना।e<c
    • यदि तो आपको ज्ञान c < e , c < d के साथ { b , c , d , e } को सॉर्ट करना चाहिए । e>c{b,c,d,e}c<e,c<d
      • , यदि d < e तो Compare(d,e)d<e
        • , अगर b > dCompare(b,d)b>d
          • । ख़त्म होना।Compare(b,e)
        • यदि b<d
          • । ख़त्म होना।Compare(b,c)
      • यदि d>e
        • यदि b > e हैCompare(b,e)b>e
          • । ख़त्म होना।Compare(b,d)
        • अगर b<e
          • Compare(b,c) । ख़त्म होना।

उपर्युक्त सभी तरीके की पहली तुलना के बाद सबसे अधिक तीन तुलनाओं के कारण हैंe साथ । (अधिकतम 7 का मतलब है)। c


क्या आपको यकीन है कि यह सही है? मान लें कि आपको निम्न परिणाम मिलते हैं: एक <b, c <d, a <c और फिर c <e, b <e, c <b और d <e। एक <c <b> d <e और a <c <d <b <e दोनों आदेश उनके अनुरूप हैं। इसका कारण यह है कि b और d की तुलना कभी भी, अंतर्निहित या स्पष्ट रूप से नहीं की जाती है। शायद मैं कहीं गलत हूं, अगर ऐसा है तो कृपया मुझे सुधारें।
जॉर्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.