生日问题的真正答案是什么?

机器算法验证 可能性 生日悖论
2022-03-16 18:58:18

“一个班级必须有多大才能使找到两个生日相同的人的概率至少达到 50%?”

我在 facebook 上有 360 个朋友,而且,不出所料,他们的生日分布根本不统一。我有一天有 9 个生日相同的朋友。(大假期和情人节之后的 9 个月似乎很重要,哈哈..)所以,鉴于有些日子更有可能是生日,我假设 23 的数字是一个上限。

对这个问题有更好的估计吗?

1个回答

幸运的是,有人发布了一些真实的生日数据,并对相关问题进行了一些讨论(分布均匀)。我们可以使用这个和重新采样来表明您的问题的答案显然是 23 - 与理论答案相同。

> x <- read.table("bdata.txt", header=T)
> birthday <- data.frame(date=as.factor(x$date), count=x$count)
> summary(birthday) 
      date         count     
 101    :  1   Min.   : 325  
 102    :  1   1st Qu.:1266  
 103    :  1   Median :1310  
 104    :  1   Mean   :1314  
 105    :  1   3rd Qu.:1362  
 106    :  1   Max.   :1559  
 (Other):360                 
> results <- rep(0,50)
> reps <-2000 # big number needed as there is some instability otherwise
> for (i in 1:50)
+ {
+ count <- 0
+ for (j in 1:reps)
+ {
+ samp <- sample(birthday$date, i, replace=T, prob=birthday$count)
+ count <- count + 1*(max(table(samp))>1)
+ }
+ results[i] <- count/reps
+ }
> results
 [1] 0.0000 0.0045 0.0095 0.0220 0.0210 0.0395 0.0570 0.0835 0.0890 0.1165
[11] 0.1480 0.1770 0.1955 0.2265 0.2490 0.2735 0.3105 0.3350 0.3910 0.4165
[21] 0.4690 0.4560 0.5210 0.5310 0.5745 0.5975 0.6240 0.6430 0.6950 0.7015
[31] 0.7285 0.7510 0.7690 0.8025 0.8225 0.8280 0.8525 0.8645 0.8685 0.8830
[41] 0.8965 0.9020 0.9240 0.9435 0.9350 0.9465 0.9545 0.9655 0.9600 0.9665