C'est un problème de comptage: il y a affectations possibles de anniversaires à personnes. Parmi ceux-ci, soit le nombre d'affectations pour lesquelles aucun anniversaire n'est partagé par plus de personnes mais au moins un anniversaire est réellement partagé par personnes. La probabilité que nous recherchons peut être trouvée en additionnant les pour les valeurs appropriées de et en multipliant le résultat par . b n q ( k ; n , b ) k k q ( k ; n , b ) k b - nbnbnq(k;n,b)kkq(k;n,b)kb−n
Ces comptes peuvent être trouvés exactement pour des valeurs de inférieures à plusieurs centaines. Cependant, ils ne suivront aucune formule simple: nous devons considérer les modèles de manière dont les anniversaires peuvent être attribués . Je vais illustrer cela au lieu de fournir une démonstration générale. Soit (c'est la plus petite situation intéressante). Les possibilités sont:n = 4nn=4
- Chaque personne a un anniversaire unique; le code est {4}.
- Exactement deux personnes partagent un anniversaire; le code est {2,1}.
- Deux personnes ont un anniversaire et les deux autres en ont un autre; le code est {0,2}.
- Trois personnes partagent un anniversaire; le code est {1,0,1}.
- Quatre personnes partagent un anniversaire; le code est {0,0,0,1}.
Généralement, le code est un tuple de décomptes dont l' élément stipule combien de dates de naissance distinctes sont partagées par exactement personnes. Ainsi, en particulier,k ème k{a[1],a[2],…}kthk
1a[1]+2a[2]+...+ka[k]+…=n.
Notez, même dans ce cas simple, qu'il existe deux façons d'atteindre le maximum de deux personnes par anniversaire: une avec le code et une autre avec le code .{ 2 , 1 }{0,2}{2,1}
Nous pouvons compter directement le nombre d'affectations d'anniversaire possibles correspondant à un code donné. Ce nombre est le produit de trois termes. L'un est un coefficient multinomial; il compte le nombre de façons de partitionner personnes en groupes de , groupes de , etc. Parce que la séquence de groupes n'a pas d'importance, nous devons diviser ce coefficient multinomial par ; sa réciproque est le deuxième terme. Enfin, alignez les groupes et attribuez-leur chacun un anniversaire: il y a candidats pour le premier groupe,a [ 1 ] 1 a [ 2 ] 2 a [ 1 ] ! un [ 2 ] ! ⋯ b b - 1 b ( a [ 1 ] + a [ 2 ] + ⋯ ) b ( m ) b ( b - 1 ) ⋯ ( b - m + 1 )na[1]1a[2]2a[1]!a[2]!⋯bb−1pour le second, et ainsi de suite. Ces valeurs doivent être multipliées ensemble, formant le troisième terme. Il est égal au "produit factoriel" où signifie .b(a[1]+a[2]+⋯)b(m)b(b−1)⋯(b−m+1)
Il existe une récursivité évidente et assez simple reliant le nombre pour un modèle au nombre pour le modèle . Cela permet un calcul rapide des comptes pour des valeurs modestes de . Plus précisément, représente dates de naissance partagées par exactement personnes chacune. Une fois que ces groupes de personnes ont été tirés des personnes, ce qui peut être fait de façons distinctes (disons), il reste à compter le nombre de façons de réaliser le modèle{ a [ 1 ] , … , a [ k - 1 ] } n a [ k ] a [ k ] k a [ k ] k n x { a [ 1 ] , ... , un [ k - 1 ] } x{a[1],…,a[k]}{a[1],…,a[k−1]}na[k]a[k]ka[k]knx{a[1],…,a[k−1]}parmi les personnes restantes. La multiplication par donne la récursivité.x
Je doute qu'il existe une formule de forme fermée pour , qui est obtenue en additionnant les comptes pour toutes les partitions de dont le terme maximum est égal à . Permettez-moi de vous donner quelques exemples:q(k;n,b)nk
Avec (cinq anniversaires possibles) et (quatre personnes), on obtientb=5n=4
q(1)q(2)q(3)q(4)=q(1;4,5)=360+60=120=420=80=5.
D'où, par exemple, la chance que trois personnes ou plus sur quatre partagent le même "anniversaire" (sur dates possibles) égale .5(80+5)/625=0.136
Comme autre exemple, prenons et . Voici les valeurs de pour le plus petit (à six figues sig uniquement):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.
En utilisant cette technique, nous pouvons facilement calculer qu'il y a environ 50% de chances (au moins) d'une collision anniversaire à trois voies parmi 87 personnes, une chance de 50% d'une collision à quatre voies parmi 187 personnes et une probabilité de 50% de une collision à cinq voies entre 310 personnes. Ce dernier calcul commence à prendre quelques secondes (dans Mathematica, de toute façon) car le nombre de partitions à considérer commence à devenir important. Pour sensiblement plus grand, nous avons besoin d'une approximation.n
Une approximation est obtenue au moyen de la distribution de Poisson avec l'espérance , car nous pouvons voir une affectation d'anniversaire comme découlant de variables de Poisson indépendantes (mais pas tout à fait) chacune avec une espérance : la variable pour tout anniversaire possible donné décrit combien de personnes ont cet anniversaire. La distribution du maximum est donc approximativement où est le CDF de Poisson. Ce n'est pas un argument rigoureux, alors faisons un petit test. L'approximation pour , donnen/bbn/bnF(k)bFn=23b=365
k=1:k=2:k=3:k=4:0.4987830.4968030.0141870.000225115.
En comparant avec ce qui précède, vous pouvez voir que les probabilités relatives peuvent être médiocres quand elles sont petites, mais les probabilités absolues sont raisonnablement bien approchées à environ 0,5%. Les tests avec une large gamme de et suggèrent que l'approximation concerne généralement ce bien.nb
Pour conclure, considérons la question initiale: prendre (le nombre d'observations) et (le nombre de "structures" possibles). La distribution approximative du nombre maximum de "anniversaires partagés" estn=10,000b=1000000
k=1:k=2:k=3:k=4:k>4:00.8475+0.1520+0.0004+<1E−6.
(Il s'agit d'un calcul rapide.) Il est clair qu'observer une structure 10 fois sur 10 000 serait très significatif. Parce que et sont tous deux grands, je m'attends à ce que l'approximation fonctionne assez bien ici.nb
Par ailleurs, comme Shane l'a laissé entendre, les simulations peuvent fournir des vérifications utiles. Une simulation Mathematica est créée avec une fonction comme
simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];
qui est ensuite itéré et résumé, comme dans cet exemple qui exécute 10 000 itérations du cas , :n=10000b=1000000
Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm
Sa sortie est
2 8503
3 1493
4 4
Ces fréquences correspondent étroitement à celles prédites par l'approximation de Poisson.