Generalisiertes Zweieipuzzle

8

Hier ist das Problem Beschreibung:

Angenommen, wir möchten wissen, in welchen Geschichten in einem N-stöckigen Gebäude Eier sicher landen können und welche die Eier bei der Landung zerbrechen lassen. Wir machen ein paar Annahmen: Ein Ei, das einen Sturz überlebt, kann wieder verwendet werden.

  • Ein zerbrochenes Ei muss weggeworfen werden.
  • Die Wirkung eines Sturzes ist für alle Eier gleich.
  • Wenn ein Ei beim Ablegen bricht, würde es brechen, wenn es aus einem höheren Fenster fällt.
  • Wenn ein Ei einen Sturz überlebt, würde es einen kürzeren Sturz überleben.
  • Es ist nicht ausgeschlossen, dass die Fenster im ersten Stock Eier brechen, und es ist auch nicht ausgeschlossen, dass die Fenster im n-ten Stock kein Ei brechen lassen.

Wenn man ein N-Gebäude und einen Vorrat an Eiern betrachtet, findet man eine Strategie, die (im schlimmsten Fall) die Anzahl der Versuchstropfen minimiert, die zur Bestimmung des Bruchbodens erforderlich sind.

Ich habe dieses Problem für 2 Eier gesehen und gelöst, wo die Antwort 14 für N = 100 ist. Ich habe versucht, die verallgemeinerte Lösung aus Wiki mit DP zu verstehen, konnte aber nicht verstehen, was sie zu tun versuchen. Bitte erzählen Sie, wie sie im DP angekommen sind und wie es funktioniert?

BEARBEITEN:

Die Wiederholung in this Artikel für den Höchsten Boden, der mit d Tropfen und E Eiern getestet werden kann, ist wie folgt:

%Vor%

Die Wiederholung ist in Ordnung, aber ich kann nicht verstehen, wie sie abgeleitet wird?

Die Erklärung ist mir nicht klar ... ich möchte nur, dass jemand mir diese Wiederholung in klareren Worten erklärt.

    
Amol Sharma 16.04.2012, 15:48
quelle

5 Antworten

8

(1) Betrachte den Fall, dass der erste Tropfen das Ei bricht. Dann kannst du den Breakfloor genau dann bestimmen, wenn er höchstens f [d-1, e-1] ist. Daher können Sie nicht höher als f [d-1, e-1] + 1 beginnen (und natürlich nicht tiefer beginnen).

(2) Wenn dein erster Tropfen das Ei nicht bricht, bist du im Fall von f [d-1, e], beginnend am Boden deines ersten Tropfens + 1 , anstelle von Boden 1.

Also, das Beste, was du tun kannst ist, Eier auf dem Boden f [d-1, e-1] + 1 (wegen (1)) fallen zu lassen, und du kannst aufstehen f [d-1, e] Stockwerke höher als das (wegen (2)). Das ist

%Vor%     
WolframH 16.04.2012, 21:21
quelle
9

Aus Wiki Egg Dropping wissen wir, dass die Zustandsübertragungsgleichung lautet:

  

W(n,k) = 1 + min{ max(W(n − 1, x − 1), W(n,k − x)) } , x = 1, 2, ..., k

     

W(n,1)=1, W(1,k)=k

     

n = Anzahl der verfügbaren Testeier

     

k = Anzahl der (noch nicht getesteten) aufeinanderfolgenden Stockwerke

Unten ist mein Verständnis.

Wir haben k floors, n eggs, nehmen an, dass wir ein Ei zum Testen in x floor verwenden. Es gibt nur zwei mögliche Ergebnisse:

  1. es bricht, so kommt das Problem rekursiv zu: x-1 floors, n-1 eggs, was zu W(n-1,x-1) widerspiegelt
  2. es bricht nicht, also kommt das Problem rekursiv zu: k-x floors, n eggs, was zu W(n,k-x) widerspiegelt

Da das Problem den schlimmsten Fall erfordert, müssen wir den größeren auswählen, um sicherzustellen, dass der Worst Case funktioniert. Deshalb fügen wir ein Maximum zwischen W(n-1,x-1) und W(n,k-x) hinzu.

Abgesehen davon, da wir nur Tests in x floor angenommen haben, kann x von 1 bis k sein. In dieser Situation müssen wir definitiv das Minimum wählen, um sicherzustellen, dass die minimalen experimentellen Tropfen dies herausfinden N , deshalb fügen wir eine Min zwischen {max(W(n − 1, x − 1), W(n,k − x)): x = 1, 2, ..., k}

hinzu

Schließlich, da wir 1 drop in x floor verwendet haben, muss die Gleichung 1 hinzufügen, was sich auf den ersten Teil der Gleichung bezieht.

Hoffe, dass dein Puzzle löst: -)

    
kkyang 11.08.2014 09:01
quelle
0

dynamische Programmierung basierte Lösung hier - Ссылка

Ich glaube, dass es selbsterklärend ist .. bitte zögern Sie nicht zu fragen, ob ein Teil nicht klar ist .. wird Ihnen gerne erklären

    
Aadith 08.05.2014 06:28
quelle
0

Dieses Problem kann mit den folgenden drei Ansätzen (die ich kenne) gelöst werden:

  1. Dynamische Programmierung
  2. Lösung mit binärer Suchstruktur
  3. Lösung durch die direkte mathematische Formel für die maximale Anzahl von Stockwerken, die getestet oder mit einer bestimmten Anzahl von Eiern und einer gegebenen Anzahl von Tropfen bedeckt werden können

Lassen Sie mich zuerst einige Symbole definieren, die später in der Analyse verwendet werden:

%Vor%

Der Kernpunkt für den dynamischen Programmieransatz liegt in der folgenden rekursiven Formel für Fmax:

%Vor%

Und der Schlüssel zum Erhalten der direkten mathematischen Formel für Fmax liegt in der folgenden rekursiven Formel für Fmax:

%Vor%

Alternativlösung für den Binärsuchbaum (BST) ist auch für dieses Problem möglich. Um unsere Analyse zu erleichtern, lassen Sie uns BST mit leichten Modifikationen wie folgt zeichnen:

%Vor%

Wenn wir BST mit der obigen Darstellungsart zeichnen, dann entspricht die Breite der BST der Anzahl der Eier.

Jede BST mit einer f-Anzahl von Knoten, die mit der obigen Darstellungsart gezeichnet sind und der Beschränkungsbreite von BST & lt; = e (Anzahl von Eiern) unterworfen sind, ist eine Lösung, aber möglicherweise nicht die optimale Lösung.

Somit ist das Erhalten der optimalen Lösung äquivalent zum Erhalten der Anordnung von Knoten in BST mit minimaler Höhe, die der Beschränkung unterworfen ist: Breite von BST & lt; = e

Weitere Einzelheiten zu allen oben genannten 3 Ansätzen finden Sie in meinem Blog unter: 3 Ansätze zur Lösung des generalisierten Eitropfenproblems

    
Rushikesh 31.12.2016 12:46
quelle
0

Dieses Problem ist nicht darüber, von welchem ​​Boden Eier fallen gelassen werden sollten, es ist ungefähr die Anzahl der Tropfen zu minimieren.

  • Angenommen, wir haben n Eier und k Böden,
  • Basisfall:
    • Wenn floor 1 ist, dann MinNoOfDrops (n, 1) = 1
    • Und wenn Ei 1 ist, MinNoOfDrops (1, k) = k
  • Generalisierte Lösung:
  • MinNoOfDrops (n, k) = 1 + min {max (MinNoOfDrops (n - 1, x - 1),) MinNoOfDrops (n, k - x))}, x = 1, 2, ..., k

Dynamischer Programmieralgorithmus:

  • Erstellt eine dp-Tabelle von (totalEggs + 1) X (totalFloors + 1)

  • Basisfall: Wenn das Ei null oder eins ist, setze es auf den Boden i, Tabelle [0] [i] = 0; und Tabelle [1] [i] = i

  • Basisfall: Boden ist Null oder Eins, dann für Ei j, Tabelle [j] [0] = 0 gesetzt und Tabelle [j] [1] = 1

  • Wiederhole Ei von 2 bis total_eggs

    • Iterieren Sie die Etage j von 2 bis total_floors
      • Setze Tabelle [i] [j] = INFINITY
      • Iteriert den Boden k von 1 bis j
      • Setzen Sie maxDrop = 1 + max (Tabelle [i-1] [k-1], Tabelle [i] [j-k])
      • Wenn Tabelle [i] [j] & gt; MaxDrop dann
        • Setze Tabelle [i] [j] = maxDrop
%Vor%     
Hrishikesh Mishra 08.01.2017 07:31
quelle