生日问题:计算一群人中至少3人生日相同的概率

说明

不考虑闰年

Ⅰ 人数n<=365时,P(至少有3人生日相同) = 1 - P(至多有2人生日相同)
= 1 - P(全部人生日都不同) - P(有1对生日相同者) - … - P(有floor(n/2)对生日相同者)

Ⅱ 理论上只要n<=(365×2)均可计算概率:
365<n<730时,P(至少有3人生日相同) = 1 - P(有(n - 365)对生日相同) - P(有(n - 365 + 1)对生日相同) - … - P(有floor(n/2)对生日相同)

R计算

给出计算n<=365且人数较少时的个人解法,仅作参考:

a <- 1 # 初始组合数
n <- 88 # 人数
m <- 365

if((n < m)&(n > 0)){
  s <- prod((m - n + 1):m)/m^n # P(全不同)
  
  for(i in 1:floor(n/2)){
    a <- a*choose((n - 2*(i - 1)), 2) # i个pair的组合数, 注意/factorial(i)不能放在a中
    p <- a/factorial(i)*prod((m - n + 1 + i):m)/m^n # P(i个pair)
    s <- s + p
    
    i <- i + 1
  }
  # a <- 1 # 组合数复位
  print(1 - s)
}
关于“/factorial(i)”

以n=6,2对生日相同(2 pair)为例,假设生日分布为A/A/B/B/C/D(不考虑顺序),计算:
①P(从6人里选2人生日为A,生日从365天中任选1天)
×②P(从剩下4人里选2人生日为B,生日从剩下364天中任选1天)
×③P(C生日从剩下363天中任选1天)
×④P(D生日从剩下362天中任选1天)

注意到,在③中并未考虑”从剩下2人中选择C“,但在①②中考虑了A/B人的选取,易知C/D是地位相同的,则A/B地位也相同,以上“考虑选取”的计算会使生日组合被重复考虑,例如:
Ⅰ A/A生日任选后结果为1月1日,B/B生日任选后结果为1月2日
Ⅱ A/A生日任选后结果为1月2日,B/B生日任选后结果为1月1日
本质是同一种生日组合方案

因此需要在计算时除以“i对生日相同者的生日全排列的数量”(即 i ! i! i!
对于上例(n=6,2 pair),则需除以 2 ! = 2 2!=2 2!=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值