Questo è un problema di conteggio: ci sono possibili assegnazioni di b compleanni a n persone. Di questi, sia q ( k ; n , b ) il numero di incarichi per i quali nessun compleanno è condiviso da più di k persone ma almeno un compleanno è effettivamente condiviso da k persone. La probabilità che cerchiamo può essere trovata sommando q ( k ; n , b ) per i valori appropriati di k e moltiplicando il risultato per b - n .bnbnq(k;n,b)kkq(k;n,b)kb−n
Questi conteggi possono essere trovati esattamente per valori di inferiori a diverse centinaia. Tuttavia, non seguiranno alcuna formula semplice: dobbiamo considerare gli schemi dei modi in cui i compleanni possono essere assegnati . Lo illustrerò al posto di fornire una dimostrazione generale. Sia n = 4 (questa è la più piccola situazione interessante). Le possibilità sono:nn=4
- Ogni persona ha un compleanno unico; il codice è {4}.
- Esattamente due persone condividono un compleanno; il codice è {2,1}.
- Due persone hanno un compleanno e le altre due ne hanno un altro; il codice è {0,2}.
- Tre persone condividono un compleanno; il codice è {1,0,1}.
- Quattro persone condividono un compleanno; il codice è {0,0,0,1}.
In generale, il codice è una tupla di conteggi cui k th stipula elemento quanti di nascita distinti sono condivisi da esattamente k persone. Pertanto, in particolare,{a[1],a[2],…}kthk
1a[1]+2a[2]+...+ka[k]+…=n.
Si noti, anche in questo semplice caso, che ci sono due modi in cui si raggiunge il massimo di due persone per compleanno: uno con il codice e un altro con il codice { 2 , 1 } .{0,2}{2,1}
Possiamo contare direttamente il numero di possibili incarichi di compleanno corrispondenti a un determinato codice. Questo numero è il prodotto di tre termini. Uno è un coefficiente multinomiale; conta il numero di modi di partizionamento persone in un [ 1 ] gruppi di 1 , una [ 2 ] gruppi di 2 , e così via. Poiché la sequenza di gruppi non ha importanza, dobbiamo dividere questo coefficiente multinomiale per un [ 1 ] ! a [ 2 ] ! ⋯na[1]1a[2]2a[1]!a[2]!⋯; il suo reciproco è il secondo termine. Infine, allinea i gruppi e assegnali a ciascuno un compleanno: ci sono candidati per il primo gruppo, b - 1 per il secondo e così via. Questi valori devono essere moltiplicati insieme, formando il terzo termine. È uguale al "prodotto fattoriale" b ( a [ 1 ] + a [ 2 ] + ⋯ ) dove b ( m ) significa b ( b - 1 ) ⋯ ( b - m + 1bb−1b(a[1]+a[2]+⋯)b(m) .b(b−1)⋯(b−m+1)
Esiste una ricorsione ovvia e abbastanza semplice relativa al conteggio per un modello al conteggio per il modello { a [ 1 ] , ... , a [ k - 1 ] } . Ciò consente un rapido calcolo dei conteggi per valori modesti di n . In particolare, un [ k ] rappresenta un [ k ] date di nascita condivise esattamente da k{a[1],…,a[k]}{a[1],…,a[k−1]}na[k]a[k]kpersone ciascuno. Dopo questi gruppi di k persone sono state tratte dai n persone, che può essere fatto in x modi distinti (ad esempio), resta da contare il numero di modi di raggiungere il modello { un [ 1 ] , ... , un [ k - 1 ] } tra le persone rimanenti. Moltiplicando questo per x si ottiene la ricorsione.a[k]knx{a[1],…,a[k−1]}x
Dubito che esista una formula in forma chiusa per , che si ottiene sommando i conteggi per tutte le partizioni di n il cui termine massimo è uguale a k . Lasciami offrire alcuni esempi:q(k;n,b)nk
Con (cinque possibili compleanni) e n = 4 (quattro persone), otteniamob=5n=4
q(1)q(2)q(3)q(4)=q(1;4,5)=360+60=120=420=80=5.
Di conseguenza, ad esempio, la possibilità che tre o più persone su quattro condividano lo stesso "compleanno" (su possibili date) è uguale a ( 80 + 5 ) / 625 = 0,136 .5(80+5)/625=0.136
Come altro esempio, prendi e n = 23 . Ecco i valori di q ( k ; 23 , 365 ) per il più piccolo k (solo a sei segni):b=365n=23q(k;23,365)k
k=1:k=2:k=3:k=4:k=5:k=6:k=7:k=8:0.492700.4945920.01253080.0001728441.80449E−61.48722E−89.92255E−115.45195E−13.
Usando questa tecnica, possiamo facilmente calcolare che esiste circa il 50% di probabilità di (almeno) una collisione a tre vie di compleanno tra 87 persone, una probabilità del 50% di una collisione a quattro vie tra 187 e una probabilità del 50% di una collisione a cinque vie tra 310 persone. L'ultimo calcolo inizia impiegando alcuni secondi (in Mathematica, comunque) perché il numero di partizioni da considerare inizia a crescere. Per sostanzialmente più grandi abbiamo bisogno di un'approssimazione.n
Un'approssimazione si ottiene per mezzo della distribuzione di Poisson con aspettativa , perché possiamo vedere un incarico di compleanno come derivante da b variabili di Poisson quasi (ma non del tutto) indipendenti ciascuna con aspettativa n / b : la variabile per ogni dato compleanno possibile descrive quante delle n persone hanno quel compleanno. La distribuzione del massimo è quindi approssimativamente F ( k ) b dove F è il CDF di Poisson. Questo non è un argomento rigoroso, quindi facciamo un piccolo test. L'approssimazione per n = 23 , bn/bbn/bnF(k)bFn=23 dàb=365
k=1:k=2:k=3:k=4:0.4987830.4968030.0141870.000225115.
Confrontando con il precedente si può vedere che le probabilità relative possono essere scarse quando sono piccole, ma le probabilità assolute sono ragionevolmente ben approssimate a circa lo 0,5%. Test con una vasta gamma di e b suggerisce l'approssimazione è solitamente circa questo bene.nb
To wrap up, let's consider the original question: take n=10,000 (the number of observations) and b=1000000 (the number of possible "structures," approximately). The approximate distribution for the maximum number of "shared birthdays" is
k=1:k=2:k=3:k=4:k>4:00.8475+0.1520+0.0004+<1E−6.
(This is a fast calculation.) Clearly, observing one structure 10 times out of 10,000 would be highly significant. Because n and b are both large, I expect the approximation to work quite well here.
Incidentally, as Shane intimated, simulations can provide useful checks. A Mathematica simulation is created with a function like
simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];
which is then iterated and summarized, as in this example which runs 10,000 iterations of the n=10000, b=1000000 case:
Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm
Its output is
2 8503
3 1493
4 4
These frequencies closely agree with those predicted by the Poisson approximation.