2013-07-01 13 views
7

यह रॉबर्ट सेडगेविक के एल्गोरिदम 4 वें संस्करण से व्यायाम समस्या 1.4.24 है।भवन से अंडे फेंकना

Suppose that you have an N-story building and plenty of eggs. Suppose also that 
an egg is broken if it is thrown off floor F or higher, and unhurt otherwise. 
First, devise a strategy to determine the value of F such that the number of 
broken eggs is ~lgN when using ~lgN throws, then find a way to reduce the cost to 
~2lgF. 

जबकि lgN समाधान ऊपर सोचने के लिए आसान है, मैं पूरी तरह 2lgF समाधान के बारे में पता नहीं है। वैसे भी, हमें F का मूल्य नहीं दिया गया है, तो 2lgF समाधान का आधार कहाँ है?

क्या कोई इस प्रश्न पर कुछ प्रकाश दे सकता है? धन्यवाद।

+0

यह ऑर्डर किए गए सेट को एक खोज समस्या है। शायद यह मदद करता है :)। – Randy

+0

हे रैंडी, कोई लिंक या आगे पढ़ने? –

+0

इमारत पर द्विआधारी खोज करें, एन/2 मंजिल से ड्रॉप करें, यदि यह टूटा हुआ है, तो नीचे जाएं जो n/4 है और इसलिए एक है। तो आप अधिकतर एलजीएन अंडों को तोड़ सकते हैं और एलजीएन चरणों में उस बिंदु पर पहुंच जाएंगे – Elbek

उत्तर

13

logn: ऊपर, छमाही में हमेशा कटौती खोज अंतरिक्ष में शुरू -> द्विआधारी खोज

2 * 1 पर शुरू logF, अगले 2, 4, 8 (यानी, 2^i), एक बार अंडा टूटता (के बाद एफ चरणों लॉग इन करें) छोटे खोज अंतरिक्ष में द्विआधारी खोज (रेंज < एफ और < लॉग एफ खोजों की इसलिए संख्या) कर -> घातीय खोज

+0

अच्छा स्पष्टीकरण, बहुत उपयोगी है। @ टिमोथी-आपके समाधान के अच्छे भी ढालता है, बहुत बहुत धन्यवाद। –

+0

और यह एफ के मूल्य को कैसे निर्धारित करता है? – Pavel

+0

मुझे समझ में नहीं आता कि एलजीएन भाग में हमें एलजीएन फेंकने वाले अंडे मिलते हैं, अगर हम विभाजित रहते हैं तो हम अंत में पहली मंजिल पर जाते हैं, लेकिन क्या होगा यदि एफ = 7 और एन = 8? हम एलजीएन टूटा अंडे नहीं मिलता है। 2 एलजीएफ भाग में मुझे समझ में नहीं आता कि हम 2 एलजीएफ टूटे हुए अंडे कैसे प्राप्त करते हैं, ऐसा लगता है कि आप केवल 2 एलजीएफ कदम करते हैं लेकिन टूटे अंडे की आपकी मात्रा 1. – Pavel

4

lg(F) समाधान 2^(k+1) पर पहले अंडा टूटता है जब तक 1, 2, 4, 8, ... करना है , फिर श्रेणी 2^K से 2^(k+1) में बाइनरी खोज करें।

एक और विकल्प एक ही प्रक्रिया को पूरा करना है जब तक कि पहले अंडे 2^(k+1) पर ब्रेक न हो जाए, तब प्रत्येक ऊंचाई पर 2^k जोड़ने के अलावा शुरू करें: 2^k + 1, 2^k + 2, 2^k + 4, 2^k + 8, ...। आप इस प्रक्रिया को दोहराते हुए रेंज के आकार को कम करने के लिए दोहरा सकते हैं।

संबंधित मुद्दे