Interviewstreet hatte im Januar ihren zweiten CodeSprint, der die folgende Frage enthielt. Die programmatische Antwort wird veröffentlicht, enthält jedoch keine statistische Erklärung.
(Sie können das ursprüngliche Problem und die veröffentlichte Lösung anzeigen, indem Sie sich mit Google Creds auf der Interviewstreet-Website anmelden und dann auf dieser Seite zum Coin Tosses-Problem wechseln .)
Münzwurf
Sie haben eine unvoreingenommene Münze, die Sie so lange werfen möchten, bis Sie N aufeinanderfolgende Köpfe erhalten. Sie haben die Münze M-mal geworfen und überraschenderweise haben alle Würfe zu Köpfen geführt.
Was ist die erwartete Anzahl zusätzlicher Würfe, die benötigt werden, bis Sie N aufeinanderfolgende Köpfe erhalten?
Eingabe:
Die erste Zeile enthält die Anzahl der Fälle T. Jede der nächsten T-Zeilen enthält zwei Zahlen N und M.
Ausgang:
Ausgang T Linien die Antwort für den entsprechenden Testfall enthält. Drucken Sie die Antwort auf genau 2 Dezimalstellen gerundet.
Probeneingabe:
4
2 0
2 1
3 3
3 2
Probenausgabe:
6.00
4.00
0.00
8.00
Beispielerklärungen:
Wenn N = 2 und M = 0, müssen Sie die Münze so lange werfen, bis Sie 2 aufeinanderfolgende Köpfe erhalten. Es ist nicht schwer zu zeigen, dass durchschnittlich 6 Münzwürfe erforderlich sind.
Wenn N = 2 und M = 1, benötigen Sie 2 aufeinanderfolgende Köpfe und haben bereits 1. Sie müssen noch einmal werfen, egal was passiert. In diesem ersten Wurf sind Sie fertig, wenn Sie Köpfe bekommen. Andernfalls müssen Sie neu beginnen, wenn der aufeinanderfolgende Zähler zurückgesetzt wird, und Sie müssen die Münze weiter werfen, bis Sie N = 2 aufeinanderfolgende Köpfe erhalten. Die erwartete Anzahl der Münzwürfe beträgt somit 1 + (0,5 * 0 + 0,5 * 6) = 4,0. Wenn N = 3 und M = 3, haben Sie bereits 3 Köpfe, sodass Sie keine weiteren Würfe mehr benötigen.
Alle mathematischen Gleichungen, die ich mir ausgedacht habe, hatten die richtigen Antworten für die oben aufgeführten Beispiel-Eingabedaten, waren jedoch für alle anderen Eingabesätze (die nicht bekannt sind) falsch. Ihre programmatische Lösung scheint das Problem ganz anders zu lösen als meine Methode, eine Gleichung zu entwickeln. Kann jemand bitte erklären, wie man eine Gleichung findet, die dies lösen würde?
quelle
Antworten:
Dies ist eine Rechenübung, denken Sie also rekursiv . Der aktuelle Zustand des Münzwurfs wird durch das geordnete Paar mit . Die erwartete Anzahl von Flips, um aufeinanderfolgende Köpfe zu erreichen, sei :(N,M) N≥M≥0 N e(N,M)
(1) Es besteht eine 50% ige Chance, dass der nächste Flip Köpfe sind, die Sie in den Zustand bringen , und eine 50% ige Chance, dass der nächste Flip Schwänze sind, die Sie in den Zustand bringen . Dies kostet einen Flip. Daher ist die Erwartung (rekursiv) gegeben durch(N,M+1) (N,0)
(2) Grundbedingungen: Das haben Sie bereits festgelegt
und natürlich
(Es sind keine Flips mehr erforderlich).
Hier ist das entsprechende Mathematica- Programm (einschließlich des Zwischenspeicherns von Zwischenergebnissen, um die Rekursion zu beschleunigen, was es effektiv zu einer dynamischen Programmierlösung macht):
Das Programm würde in anderen Programmiersprachen, die die Rekursion unterstützen, ähnlich aussehen. Mathematisch können wir überprüfen, dass , indem wir einfach die Rekursion überprüfen, da dies offensichtlich für die Basisfälle gilt:e(N,M)=2N+1−2M+1
Dies gilt für jedes und , QED.M N
Allgemeiner wird der gleiche Ansatz feststellen, dass wenn die Münze die Wahrscheinlichkeit von Köpfen hat. Der schwierige Teil besteht darin, die Grundbedingung . Dies geschieht durch Verfolgen der Rekursion aus Schritten, bis schließlich als sich selbst ausgedrückt wird und gelöst wird:e(N,M)=p−N−p−M1−p p e(N,0) N e(N,0)
quelle
find_x(n)
rekursiv, wenn es so etwas wie sagt,if n=0 return 1 else return 2*find_x(n-1)
in dem esfind_x
sich mal aufruft , während ein iteratives Programm so etwas wiey = 1; while n > 0 do begin y=2*y; n=n-1 end; return y
R
) kaum. (In einem Fall erstellen Sie einen Vektor1:n
und verarbeiten ihn dann. In dem anderen Fall werden Sie feststellen, dassn:1
er auf dem Stapel platziert und umgekehrt verarbeitet wurde.) Ein Teil meines Punktes war jedoch konzeptionell : Ihr erster Kommentar sprach von "iterativ arbeiten". Das bezog sich auf die Analyse und nicht auf ein Computerprogramm. Dies sind jedoch triviale, tangentiale Punkte, deren Diskussion keine Erweiterung dieses Kommentarthreads rechtfertigt.Um dieses Problem zu lösen, werde ich stochastische Prozesse, Stoppzeiten und dynamische Programmierung verwenden.
Zunächst einige Definitionen:
X 0 X 0 = 0 X X 0 = M.
Definieren Sie dann die folgenden Stoppzeiten:
Der Wert ist der erwartete Wert von , die Anzahl der Flips, die , um N aufeinanderfolgende Flips zu beobachten , , wir haben bereits M aufeinanderfolgende Flips beobachtet . Angenommen, da die Antwort ansonsten trivial 0 ist. Wir berechnen: ( X τ N = N ) ( X 0 = M ) M ≤ N.τN (XτN=N) (X0=M) M≤N
Die erste entspricht der erwarteten Anzahl von Flips vor dem Erhalten eines Schwanzes unter der Annahme, dass ein Schwanz umgedreht wird, bevor N aufeinanderfolgende Köpfe beobachtet werden, vorausgesetzt, wir beginnen mit M aufeinanderfolgenden Köpfen. Das ist nicht allzu schwer zu sehen
Jetzt müssen wir nur noch die zweite bedingte Erwartung berechnen, die der erwarteten Anzahl von Flips entspricht, die erforderlich sind, um N aufeinanderfolgende Köpfe ab 0 zu beobachten. Mit ähnlichen Berechnungen sehen wir das
Dies gibt eine endgültige Antwort von:
Dies stimmt mit den vier von Ihnen aufgelisteten Testfällen überein. Mit einer so einfachen Antwort kann es eine einfachere Möglichkeit geben, dies zu berechnen.
quelle
Warnung: Das Folgende kann möglicherweise nicht als richtige Antwort angesehen werden, da es keine geschlossene Lösung für die Frage bietet, insb. im Vergleich zu den vorherigen Antworten . Ich fand den Ansatz jedoch ausreichend interessant, um die bedingte Verteilung zu ermitteln.
Betrachten Sie die vorläufige Frage, eine Folge von Köpfen aus Würfen mit der Wahrscheinlichkeit . Dies ist gegeben durch die Wiederholungsformel In der Tat ist meine Argumentation, dass keine aufeinanderfolgenden Köpfe aus Zügen gemäß dem ersten Auftreten eines Schwanzes aus dem ersten zerlegt werden können wirft. Die Bedingung, ob dieser erste Schwanz bei der ersten, zweiten, ..., ten Ziehung auftritt, führt zu dieser Wiederholungsbeziehung.N k 1−p(N,k)
Als nächstes beträgt die Wahrscheinlichkeit, die ersten aufeinanderfolgenden N Köpfe in Würfen zu erhalten, $$ q (N, m) = \ begin {Fälle} \ dfrac {1} {2 ^ N} & \ text {if} m = N \m≥N
$$ Der erste Fall ist selbsterklärend. Der zweite Fall entspricht einem Schwanz, der bei der -Ziehung auftritt, gefolgt von Köpfen, und der letzte Fall verbietet aufeinanderfolgende Köpfe vor der -Ziehung. (Die beiden letzten Fälle könnten zu einem zusammengefasst werden, zugegeben!)m−N−1 N N m−N−1
Nun ist die Wahrscheinlichkeit, Köpfe zuerst und die ersten aufeinanderfolgenden Köpfe in genau Würfen (und nicht weniger) zu bekommen, $$ r (M, N, m) = \ begin {Fälle} 1/2 ^ N & \ text {if} m = N \M N m≥N
\ end {Fälle} s (M, N, m) = \ begin {Fälle} 1 / {2 ^ {NM}} & \ text {if} m = N \ 0 & \ text {if} N \ sum_ {r = M + 1} ^ {N} \ dfrac {q (N, mr)} {2 ^ {rM }} & \ text {if} N + M.
\ end {case} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ oder für die Anzahl der zusätzlichen Schritte ...
quelle