Numero previsto di lanci di monete per ottenere N consecutivi, dati M consecutivi


10

Interviewstreet ha avuto la sua seconda CodeSprint a gennaio che includeva la seguente domanda. La risposta programmatica viene pubblicata ma non include una spiegazione statistica.

(Puoi vedere il problema originale e la soluzione pubblicata accedendo al sito web Interviewstreet con i crediti di Google e quindi andando al problema Coin Tosses da questa pagina .)

Lancio della moneta

Hai una moneta imparziale che vuoi continuare a lanciare finché non ottieni N teste consecutive. Hai lanciato la moneta M volte e, sorprendentemente, tutti i lanci hanno portato alla testa.

Qual è il numero previsto di lanci aggiuntivi necessari fino ad ottenere N teste consecutive?

Input:
la prima riga contiene il numero di casi T. Ciascuna delle successive linee T contiene due numeri N e M.

Output:
linee T di output contenenti la risposta per il caso di test corrispondente. Stampa la risposta arrotondata con esattamente 2 decimali.

Esempio di input:
4
2 0
2 1
3 3
3 2

Uscita campione:
6,00
4,00
0,00
8,00

Spiegazioni di esempio:
Se N = 2 e M = 0, è necessario continuare a lanciare la moneta fino a quando non si ottengono 2 teste consecutive. Non è difficile dimostrare che in media sono necessari 6 lanci di monete.
Se N = 2 e M = 1, hai bisogno di 2 teste consecutive e ne hai già 1. Devi lanciare ancora una volta, qualunque cosa accada. In quel primo lancio, se ottieni la testa, hai finito. Altrimenti, è necessario ricominciare da capo, poiché il contatore consecutivo si azzera e è necessario continuare a lanciare la moneta fino ad ottenere N = 2 teste consecutive. Il numero previsto di lanci di monete è quindi 1 + (0,5 * 0 + 0,5 * 6) = 4,0 Se N = 3 e M = 3, hai già 3 teste, quindi non hai bisogno di altri lanci.

Tutte le equazioni matematiche che ho trovato avevano le risposte giuste per i dati di input di esempio elencati sopra, ma erano errate per tutti gli altri set di input (che non sono noti). La loro soluzione programmatica sembra risolvere il problema in modo molto diverso dal mio metodo di provare a trovare un'equazione. Qualcuno può spiegare come elaborare un'equazione che risolva questo problema?


1
Vedi anche qui dove troviamo anche il risultato dato da Daniel Johnson di seguito. 2N+12M+1
Dilip Sarwate,

Risposte:


8

Questo è un esercizio computazionale, quindi pensa in modo ricorsivo . Lo stato attuale del lancio della moneta è determinato dalla coppia ordinata con N M 0 . Lascia che il numero previsto di lanci per raggiungere N teste consecutive sia e ( N , M ) :(N,M)NM0Ne(N,M)

(1) Esiste una probabilità del 50% che il prossimo lancio sarà diretto, portandoti allo stato e una probabilità del 50% che il prossimo lancio sarà a croce, portandoti allo stato ( N , 0 ) . Questo costa un capovolgimento. Pertanto l'attesa (ricorsiva) è data da(N,M+1)(N,0)

e(N,M)=12e(N,M+1)+12e(N,0)+1.

(2) Condizioni di base: l'hai già stipulato

e(N,0)=2N+12

e ovviamente

e(N,N)=0

(non sono necessari più lanci).

Ecco il corrispondente programma Mathematica (inclusa la memorizzazione nella cache dei risultati intermedi per accelerare la ricorsione, che la rende effettivamente una soluzione di programmazione dinamica):

e[n_, m_] /; n > m > 0 := e[n, m] = 1 + (e[n, m + 1] + e[n, 0])/2 // Simplify
e[n_, 0] := 2^(n + 1) - 2
e[n_, n_] := 0

e(N,M)=2N+12M+1

2N+12M+1=1+(2N+12M+2+2N+12)/2,

MN


e(N,M)=pNpM1ppe(N,0)Ne(N,0)

e(N,0)=1+pe(N,1)+(1p)e(n,0)=1+p(1+pe(N,2)+(1p)e(N,0))+(1p)e(N,0)=1+p+p2++pN1+(1p)[1+p++pN1]e(N,0);e(N,0)=1pN1p+(1pN)e(N,0);e(N,0)=pN11p.

1
e(N,M)=12e(N,M+1)+12e(N,0)+1
e(N,M+1)=2e(N,M)2N+1
e(N,1)=2e(N,0)2N+1=2(2N+12)2N+1=2N+14e(N,2)=2e(N,1)2N+1=2(2N+14)2N+1=2N+18
e(N,M)=2N+12M+1.
Dilip Sarwate,

@Dilip Le inferenze tratte sia da "che dà" e "e così via" sono ricorsive. Quale metodo di soluzione hai in mente "risolto teoricamente"?
whuber

x(n)=2x(n1),  x(0)=1,
x(n)
x(n)=2x(n1)=2(2x(n2))=2(2(2x(n3)))==2(2(2x(0))=2n
x(0)=1x(1)=2x(0)=2x(2)=2x(1)=22x(n)=2x(n1)=22n1=2n.

find_x(n)if n=0 return 1 else return 2*find_x(n-1)find_xny = 1; while n > 0 do begin y=2*y; n=n-1 end; return y

Se osservi come questi programmi sono effettivamente implementati sul computer, @Dilip, in molti ambienti (come R) non differiscono quasi per nulla. (In un caso crei e poi elabori un vettore 1:ne nell'altro scoprirai che n:1è stato messo in pila ed elaborato al contrario.) Ma parte del mio punto era concettuale : il tuo commento iniziale parlava di "lavorare in modo iterativo". Ciò si riferiva all'analisi e non a nessun programma per computer. Ma questi sono punti banali e tangenziali la cui discussione non merita l'estensione di questo thread di commenti.
whuber

5

Per risolvere questo problema, userò processi stocastici, tempi di arresto e programmazione dinamica.

Innanzitutto, alcune definizioni:

Xn#(of consecutive heads after the nth flip)
X0X0=0XX0=M

τNmin{k:Xk=N} and τ0min{k>1:Xk=0}

Il valore che stiamo cercando è il valore atteso di , il numero di necessari per osservare N consecutivi , dato che abbiamo già osservato M consecutivi . Supponiamo poiché la risposta è banalmente 0 altrimenti. Calcoliamo: ( X τ N = N ) ( X 0 = M ) M NτN(XτN=N)(X0=M)MN

E[τN|X0=M]=E[τN1{τN<τ0}+τN1{τN>τ0}|X0=M]
=(NM)(12)NM+E[τ0|τN>τ0,X0=M]+(1(12)NM)E[τN|X0=0]
Questo ci lascia a calcolare le ultime due aspettative condizionali.

Il primo corrisponde al numero previsto di lanci prima di ottenere una coda supponendo che una coda sia capovolta prima che vengano osservate N teste consecutive supponendo che iniziamo con M teste consecutive. Non è troppo difficile vederlo

E[τ0|τN>τ0,X0=M]=j=1NM(j)(12)j=2(NM+2)(12)NM

Ora tutto ciò che dobbiamo fare è calcolare la seconda aspettativa condizionale che corrisponde al numero atteso di lanci necessari per osservare N teste consecutive a partire da 0. Con calcoli simili, vediamo che

E[τN|X0=0]=E[τN1{τN<τ0}+τN1{τN>τ0}|X0=0]
=N(12)N+E[τ0|τN>τ0,X0=0]+(1(12)N)E[τN|X0=0]
=2N{N(12)N+(2(N+2)(12)N)}
=2N+12

Questo dà una risposta finale di:

E[τN|X0=M]=(NM)(12)NM+2(NM+2)(12)NM+(1(12)NM)(2N+12)
=2N+12M+1

Ciò concorda con i quattro casi di test che hai elencato. Con una risposta così semplice, potrebbe esserci un modo più semplice per calcolarlo.


1
Questo è un modo più difficile per risolverlo rispetto all'idea ricorsiva sopra elencata, ma è estremamente utile vedere entrambi gli approcci presentati insieme. La maggior parte delle persone non apprezza il modo in cui i metodi di arresto del tempo possono essere utilizzati anche per piccoli problemi pratici.
ely,

2

Attenzione: quanto segue non può essere considerato una risposta adeguata in quanto non fornisce una soluzione in forma chiusa alla domanda, esp. rispetto alle risposte precedenti . Tuttavia, ho trovato l'approccio sufficientemente interessante per elaborare la distribuzione condizionale.

Considera la domanda preliminare di ottenere una sequenza di teste da tiri, con probabilità . Questo è dato dalla formula di ricorrenza In effetti, il mio ragionamento è che nessuna testa consecutiva fuori da sorteggi può essere decomposta in base alla prima occorrenza di una coda fuori dalla prima lancia. Condizionata dal fatto che questa prima coda avviene al primo, secondo, ..., ° disegnare conduce a questa relazione ricorrente.Nk1p(N,k)

p(N,k)={1if k<Nm=1N12mp(N,km)else
NkNN

Successivamente, la probabilità di ottenere le prime N teste consecutive in tiri è $$ q (N, m) = \ begin {casi} \ dfrac {1} {2 ^ N} & \ text {if} m = N \mN

     p(N,m-N-1) \dfrac{1}{2^{N+1}} &\text{if } N<m<2N+1
     \end{cases}

$$ Il primo caso si spiega da sé. il secondo caso corrisponde ad una coda che si verifica al sorteggio , seguito da teste, e l'ultimo caso proibisce teste consecutive prima del sorteggio . (Gli ultimi due casi potrebbero essere condensati in uno, scontato!)mN1NNmN1

Ora, la probabilità di ottenere prima teste e le prime consecutive in tiri esattamente (e non meno) è $$ r (M, N, m) = \ begin {casi} 1/2 ^ N & \ text {if} m = N \MN mN

     0 &\text{if } N<m\le N+M\\

      \dfrac{1}{2^{M}}\sum_{r=M+1}^{N}\dfrac{1}{2^{r-M}}q(N,m-r)&\text{if } N+M<m

\ end {casi} s (M, N, m) = \ begin {casi} 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

Hencetheconditionalprobabilityofwaiting$m$stepstoget$N$consecutiveheadsgiventhefirst$M$consecutiveheadsis

\ end {case} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ oppure per il numero di passaggi aggiuntivi ...

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.