Die folgende kurze Beschreibung des bekannten "Google Eggs Puzzle" stammt hauptsächlich von der Website Google Eggs :
Google Eggs Puzzle: Wie wird bei n Stockwerken und m Eiern der höchste Stock gefunden, aus dem Eier sicher geworfen werden können, während die Würfe minimiert werden (keine zerbrochenen Eier)?
Das sogenannte "höchste Stockwerk" im obigen Problem verdient eine formellere Definition:
„höchste“ muss einen Boden sein f (in jedem ausreichend hohen Gebäude) , so dass ein Ei aus dem fiel f th Boden bricht, aber man ging von dem ( f-1 ) st Boden nicht. Dann ist f-1 hier die höchste Etage.
Tatsächlich ist die Beschreibung von "am höchsten" ein Auszug aus dem Buch "The Algorithm Design Manual (Second Edition)" von Steven S. Skiena. Als Übung in Kapitel 8 "Dynamische Programmierung" gibt es im Web zahlreiche Ressourcen, die sich dem Lösen des Puzzles mithilfe dynamischer Programmierung widmen, z. B. Google Eggs und The Two Egg Problem .
Es gibt jedoch eine Frage aus dem obigen Buch:
Zeigen Sie, dass , wobei die Mindestanzahl von Würfen ist. (Hinweis: Ich habe die im Buch verwendeten Notationen aus Gründen der Konsistenz geändert.)E(⋅)
Es ist die Frage, die mein Problem motiviert:
Mein Problem: Gibt es eine mathematisch geschlossene Form für das allgemeine "Google Eggs Puzzle" mit n Stockwerken und m Eiern anstelle einer dynamischen Programmierwiederholung und natürlich enger als das eins?
Antworten:
Mit m Eiern und k Messungen sind die meisten Stockwerke, die überprüft werden können, genau (vielleicht abhängig von der genauen def). Der Beweis ist durch Induktion trivial. Dieser Ausdruck hat keine inverse geschlossene Form, ergibt aber eine gute Asymptotik.±1
quelle
In meinem obigen Kommentar habe ich gesagt, dass vielleicht eine enge Grenze ist. Ich bin mir über die Untergrenze nicht sicher, aber da Sie nur eine Erklärung für die Bedeutung von wünschen , kann ich die Intuition anhand der Obergrenze erklären.Θ(mink≤mkn1k) k
Wie Sie vermutet haben, ist die Anzahl der tatsächlich verwendeten Eier. Das erklärt die auf der Außenseite. Nachdem wir uns für die Verwendung von Eiern entschieden haben, funktioniert folgende Strategie: Stellen Sie sich die Zahl als in Basis . So ‚s Darstellung haben ‚Ziffern‘(das Wort‚digit‘in der Regel für die Basis reserviert ist 10, aber ich werde es hier verwenden), und jede Ziffer hat einen Wert von 0 bis . Mit unseren Eiern versuchen wir, die Ziffern von nacheinander zu extrahieren . Zuerst beginnen wir mit der höchstwertigen Ziffer. Dies kann festgestellt werden, indem ein nummeriertes Ei vom Boden geworfen wirdk min k n n1/k n k n1/k−1 k n 100..00 , und so weiter. Nach höchstens Würfen haben wir gelernt, was das wichtigste Bit ist, und im schlimmsten Fall haben wir nur 1 Ei gebrochen. Jetzt machen wir das für alle anderen Ziffern. Da es Ziffern gibt, benötigen wir Würfe.200..00 n1/k−1 k O(kn1/k)
Beachten Sie zur Überprüfung der Gesundheit, dass bei diese Strategie darauf hinausläuft, ab Etage 1 nacheinander Eier aus jeder Etage zu werfen. Wenn , arbeiten wir nur in Basis 2. Dies ergibt also die binärer Suchalgorithmus.k = log nk=1 k=logn
quelle