生日悖论

Posted 白马负金羁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生日悖论相关的知识,希望对你有一定的参考价值。

假设你参加一个舞会,舞池里有30个人,请问是其中某两个人有相同的生日可能性更大呢?还是没有哪两个人有相同生日的可能性更大?

这就是所谓的生日悖论,直觉上我们会觉得一年有365天,如果只有30个人,那么存在两个人同一天生日的可能性应该很低。但是与直觉上的认识相违背的是,通过严密的数学推导可以证明这个可能性其实相当高。特别地,对于60或者更多的人,这种概率甚至要大于99%。

假设每个人的生日是一年365天中随机的一天,每个人都是独立且均匀地随机选取的,在这个假定下,可以建立分析该问题的数学模型。注意到我们的假定只是考虑了最一般的简化情况,所以我们不考虑闰年,也忽略存在双胞胎的可能,而且假设每个人的生日都是从一年内的任何一天中随机选取的。这样的假定更便于我们理解,而且也更易于分析。

计算这个概率的一个方法是直接对两人非同一天生日的结果进行计数。考虑每个人有各不相同的生日的结构要比考虑某两个人不是同一生日的结构更容易。为此从365天中选取30天,那么则有C30365种情况,可以用30!种可能次序中的任何一种将这30天分配给这些人。于是在36530种可能出现的生日中,存在C30365?30!种结构,使得没有两个人具有相同的生日。因此概率是

C30365?30!36530

当然,你也可以用每次考虑一个人的方法来计算这个概率。舞会中的第一个人有一个生日,第二个人有不同生日的概率是(1?1365),在已知前两人有不同生日的情况下,舞会中第3个人与前面两个有不同生日的概率为(1?2365)。如此继续下去,在假定前k?1人有不同生日的条件下,教室里面的第k个人与前面k?1人有不同生日的概率为(1?k?1365)。所以30个人全部有不同生日的概率就是这些项目的乘积,即
(1?1365)?(1?2365)?(1?3365)?(1?29365)

可以验证,它与前面得出之结果是完全一样的。

计算表明这个乘积是0.2937(保留4位有效数字),所以当30个人参加舞会时,有大于70%的机会两个人拥有相同的生日。类似的计算说明,当人数达到23人时,存在两人生日相同的概率就比没有两人生日相同的概率要大。

更一般地,如果有m个人,有n个可能的生日,那么所有m个人有不同生日的概率为

(1?1n)?(1?2n)?(1?3n)?(1?m?1n)=j=1m?1(1?jn)

利用当kn相比较小时,1?k/ne?k/n,可以得到,如果m相对于n较小,则
j=1m?1(1?jn)j=1m?1e?j/n=exp{?j=1m?1jn}=e?m(m?1)/2ne?m2/2n

因此,能使所有m人有不同生日的概率为1/2m值,近似地由等式
m22n=ln2

给出,即m=2nln2?????。对于n=365的情况,这个近似到保留两位小数的m=22.49,与精确计算有相当好的一致性。

下面一个直观的考虑方法,给出了一个宽松的界。令Ek表示第k人生日与前面k?1人中的每一个人的生日都不相同的事件。那么前k人不会有不同生日的概率就为

Pr(E1ˉE2ˉ?Ekˉ)i=1kPr(Eˉi)i=1ki?1n=k(k?1)2n

如果kn,这个概率小于1/2,所以对?n?个人,所有生日都不相同的概率至少为1/2

现在假定前?n?人都有不相同的生日,以后的每个人与前?n?人之一有相同生日的概率至少为n/n=1/n。因此后?n?人与?n?人有不同生日的概率至多为

(1?1n)?n?<1e<12
因此,只要有2?n?人,所有生日全不相同的概率便至多为1/e

以上是关于生日悖论的主要内容,如果未能解决你的问题,请参考以下文章

生日悖论

生日悖论是啥?我用它省了上百G的内存

基础普及(74):一分钟了解Equihash算法以及生日悖论问题

密码学经典之生日悖论与生日攻击详解

C ++生日悖论程序[重复]

算法问题——生日悖论