Paradoxe des anniversaires ======================================================== ## Calcul de la probabilité selon la taille du groupe L'événement E1="deux individus au moins ont le même anniversaire" est le complémentaire (le contraire) de l'événement E2="tous les individus ont des dates différentes". Calculons la probablité de E2 en fonction du nombre d'individus (plus facile à dénombrer). On néglige les années bissextiles pour simplifier les calculs. ```{r} pe2=function(n=20){ p=1 for(i in 1:(n-1)){ # remarquer les parenthèses autour de (n-1). p <-p*(365-i)/365 } p } ``` On peut maintenant calculer la probabilité qu'au moins 2 individus aient le même anniversaire: ```{r fig.width=7, fig.height=6} Pcoincidence=function(n){ 1-pe2(n) } ``` Pour 30 personnes, cette probabilité est donc de ```{r} Pcoincidence(30) ``` Évolution de cette probabilité avec n: ```{r} x<-1:50 y <- numeric(length(x)) for (i in 1:length(x)) { y[i]<-Pcoincidence(i) } plot(x,y,xlab="nombre d'individus",ylab="Probabilité de coïncidence d'anniversaires") ``` ## Généralisation à un ensemble plus grand À vous de jouer ! Cette fois, les n individus sont des données (cryptées) et les "dates d'anniversaire" la sortie d'une fonction de hachage à valeurs dans un ensemble A de taille Card(A)=K. ```{r} # code à écrire ``` ## Simulation On peut vérifier nos calculs en mesurant cette probabilité à l'aide d'une simulation. On génère un certain nombre (paramétrable) de dates d'anniversaires choisies uniformément entre 1 et 365 (on néglige toujours les années bissextiles) puis on regarde s'il y a au moins 2 valeurs identiques dans le groupe. Ensuite, pour estimer la probabilité, il faut répéter l'expérience... ```{r} gen_groupe=function(n=35){ groupe=floor(365*runif(35,1/365)) groupe} verif=function(gp){ collision=-1 for(i in 2:length(gp)){ for(j in 1:(i-1)){ if(gp[i]==gp[j]) collision=c(i,j) } } collision } ```