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.
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:
Pcoincidence=function(n){
1-pe2(n)
}
Pour 30 personnes, cette probabilité est donc de
Pcoincidence(30)
## [1] 0.7063162
Évolution de cette probabilité avec n:
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")
À 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.
# code à écrire
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…
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
}