Data una moneta con pregiudizio sconosciuto , come posso generare variate - nel modo più efficiente possibile - che sono distribuiti da Bernoulli con probabilità 0,5? Cioè, utilizzando il numero minimo di flip per variabile generata.
Data una moneta con pregiudizio sconosciuto , come posso generare variate - nel modo più efficiente possibile - che sono distribuiti da Bernoulli con probabilità 0,5? Cioè, utilizzando il numero minimo di flip per variabile generata.
Risposte:
Questo è un problema ben noto con diverse belle soluzioni che sono state discusse qui e in StackOverflow (sembra che non riesca a pubblicare più di un link ma una rapida ricerca su Google ti dà alcune voci interessanti). Dai un'occhiata alla voce di Wikipedia
http://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin
Questo è un problema classico, credo attribuito originariamente a von Neumann. Una soluzione è quella di continuare a lanciare la moneta in coppia fino a quando le coppie non sono diverse, quindi rimandare al risultato della prima moneta nella coppia.
Esplicitamente lascia sia il risultato di lancio , con essendo la prima moneta, e essendo la seconda moneta. Ogni moneta ha probabilità di teste. Quindi causa della simmetria, che implica . Per vedere in modo esplicito questa nota di simmetria che implica che i risultati sono o , entrambi ugualmente probabili a causa dell'indipendenza. ( H , T ) ( T , H )
Empiricamente, il tempo di attesa fino a quando una coppia così diseguale è
che esplode quando si avvicina a 0 o 1 (il che ha senso).
Non sono sicuro di come riassumere i termini in modo efficiente, ma possiamo fermarci ogni volta che il numero totale di tiri e il numero totale di successi sono tali che è anche dato che possiamo dividere i diversi ordinamenti che abbiamo potuto ottenere e in due gruppi di uguale probabilità ciascuna corrispondente ad un'etichetta in uscita diverso. Dobbiamo stare attenti a non esserci già fermati per questi elementi, vale a dire che nessun elemento ha un prefisso di lunghezza con successi tale che è pari. Non sono sicuro di come trasformarlo in un numero previsto di lanci.t
Illustrare:
Possiamo fermarci a TH o HT poiché questi hanno uguale probabilità. Scendendo verso il basso il triangolo di Pascal, i prossimi termini pari sono nella quarta riga: 4, 6, 4. Ciò significa che possiamo fermarci dopo i tiri se una testa si è alzata poiché possiamo creare una corrispondenza bipartita: HHHT con HHTH e tecnicamente HTHH con THHH anche se ci saremmo già fermati per quelli. Allo stesso modo, produce l'HHTT corrispondente con TTHH (il resto, ci saremmo già fermati prima di raggiungerli).
Per , tutte le sequenze hanno interrotto i prefissi. Diventa un po 'più interessante su dove FFFFTTFT con FFFFTTTF.
Per dopo 8 tiri, la possibilità di non essersi fermato è con un numero previsto di tiri se ci siamo fermati di . Per la soluzione in cui continuiamo a far rotolare le coppie finché non si differenziano, la possibilità di non essersi fermata è con un numero atteso di tiri se ci siamo fermati a 4. Per ricorsione, un limite superiore sui salti previsti per l'algoritmo presentato è .
Ho scritto un programma Python per stampare i punti di arresto:
import scipy.misc
from collections import defaultdict
bins = defaultdict(list)
def go(depth, seq=[], k=0):
n = len(seq)
if scipy.misc.comb(n, k, True) % 2 == 0:
bins[(n,k)].append("".join("T" if x else "F"
for x in seq))
return
if n < depth:
for i in range(2):
seq.append(i)
go(depth, seq, k+i)
seq.pop()
go(8)
for key, value in sorted(bins.items()):
for i, v in enumerate(value):
print(v, "->", "F" if i < len(value) // 2 else "T")
print()
stampe:
FT -> F
TF -> T
FFFT -> F
FFTF -> T
FFTT -> F
TTFF -> T
TTFT -> F
TTTF -> T
FFFFFT -> F
FFFFTF -> T
TTTTFT -> F
TTTTTF -> T
FFFFFFFT -> F
FFFFFFTF -> T
FFFFFFTT -> F
FFFFTTFF -> T
FFFFTTFT -> F
FFFFTTTF -> T
FFFFTTTT -> F
TTTTFFFF -> T
TTTTFFFT -> F
TTTTFFTF -> T
TTTTFFTT -> F
TTTTTTFF -> T
TTTTTTFT -> F
TTTTTTTF -> T