首页 > 代码库 > 生日悖论

生日悖论

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

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

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

计算这个概率的一个方法是直接对两人非同一天生日的结果进行计数。考虑每个人有各不相同的生日的结构要比考虑某两个人不是同一生日的结构更容易。为此从365天中选取30天,那么则有C30365<script type="math/tex" id="MathJax-Element-16483">C_{365}^{30}</script>种情况,可以用30!<script type="math/tex" id="MathJax-Element-16484">30!</script>种可能次序中的任何一种将这30天分配给这些人。于是在36530<script type="math/tex" id="MathJax-Element-16485">365^{30}</script>种可能出现的生日中,存在C30365?30!<script type="math/tex" id="MathJax-Element-16486">C_{365}^{30}\cdot30!</script>种结构,使得没有两个人具有相同的生日。因此概率是

C30365?30!36530
<script type="math/tex; mode=display" id="MathJax-Element-16487">\frac{C_{365}^{30}\cdot30!}{365^{30}}</script>
当然,你也可以用每次考虑一个人的方法来计算这个概率。舞会中的第一个人有一个生日,第二个人有不同生日的概率是(1?1365)<script type="math/tex" id="MathJax-Element-16488">(1-\frac1{365})</script>,在已知前两人有不同生日的情况下,舞会中第3个人与前面两个有不同生日的概率为(1?2365)<script type="math/tex" id="MathJax-Element-16489">(1-\frac2{365})</script>。如此继续下去,在假定前k?1<script type="math/tex" id="MathJax-Element-16490">k-1</script>人有不同生日的条件下,教室里面的第k<script type="math/tex" id="MathJax-Element-16491">k</script>个人与前面k?1<script type="math/tex" id="MathJax-Element-16492">k-1</script>人有不同生日的概率为(1?k?1365)<script type="math/tex" id="MathJax-Element-16493">(1-\frac{k-1}{365})</script>。所以30个人全部有不同生日的概率就是这些项目的乘积,即
(1?1365)?(1?2365)?(1?3365)?(1?29365)
<script type="math/tex; mode=display" id="MathJax-Element-16494">(1-\frac1{365})\cdot(1-\frac2{365})\cdot(1-\frac3{365})\cdots(1-\frac{29}{365})</script>
可以验证,它与前面得出之结果是完全一样的。

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

更一般地,如果有m<script type="math/tex" id="MathJax-Element-16495">m</script>个人,有n<script type="math/tex" id="MathJax-Element-16496">n</script>个可能的生日,那么所有m<script type="math/tex" id="MathJax-Element-16497">m</script>个人有不同生日的概率为

(1?1n)?(1?2n)?(1?3n)?(1?m?1n)=j=1m?1(1?jn)
<script type="math/tex; mode=display" id="MathJax-Element-16498">(1-\frac1n)\cdot(1-\frac2n)\cdot(1-\frac3n)\cdots(1-\frac{m-1}n)=\prod_{j=1}^{m-1}(1-\frac{j}{n})</script>
利用当k<script type="math/tex" id="MathJax-Element-16499">k</script>与n<script type="math/tex" id="MathJax-Element-16500">n</script>相比较小时,1?k/ne?k/n<script type="math/tex" id="MathJax-Element-16501">1-k/n\approx e^{-k/n}</script>,可以得到,如果m<script type="math/tex" id="MathJax-Element-16502">m</script>相对于n<script type="math/tex" id="MathJax-Element-16503">n</script>较小,则
j=1m?1(1?jn)j=1m?1e?j/n=exp{?j=1m?1jn}=e?m(m?1)/2ne?m2/2n
<script type="math/tex; mode=display" id="MathJax-Element-16504">\prod_{j=1}^{m-1}(1-\frac{j}{n})\approx \prod_{j=1}^{m-1}e^{-j/n}\=\exp\{-\sum_{j=1}^{m-1}\frac{j}{n}\}=e^{-m(m-1)/2n}\approx e^{-m^2/2n}</script>
因此,能使所有m<script type="math/tex" id="MathJax-Element-16505">m</script>人有不同生日的概率为1/2<script type="math/tex" id="MathJax-Element-16506">1/2</script>的m<script type="math/tex" id="MathJax-Element-16507">m</script>值,近似地由等式
m22n=ln2
<script type="math/tex; mode=display" id="MathJax-Element-16508">\frac{m^2}{2n}=\ln2</script>
给出,即m=2nln2?????<script type="math/tex" id="MathJax-Element-16509">m=\sqrt{2n\ln2}</script>。对于n=365<script type="math/tex" id="MathJax-Element-16510">n=365</script>的情况,这个近似到保留两位小数的m=22.49<script type="math/tex" id="MathJax-Element-16511">m=22.49</script>,与精确计算有相当好的一致性。

下面一个直观的考虑方法,给出了一个宽松的界。令Ek<script type="math/tex" id="MathJax-Element-16512">E_k</script>表示第k<script type="math/tex" id="MathJax-Element-16513">k</script>人生日与前面k?1<script type="math/tex" id="MathJax-Element-16514">k-1</script>人中的每一个人的生日都不相同的事件。那么前k<script type="math/tex" id="MathJax-Element-16515">k</script>人不会有不同生日的概率就为

Pr(E1ˉE2ˉ?Ekˉ)i=1kPr(Eˉi)i=1ki?1n=k(k?1)2n
<script type="math/tex; mode=display" id="MathJax-Element-16516">Pr(\bar{E_1}\cup \bar{E_2}\cup\cdots \cup\bar{E_k})\leq \sum_{i=1}^k Pr(\bar E_i)\\leq\sum_{i=1}^k\frac{i-1}{n}=\frac{k(k-1)}{2n}</script>
如果kn<script type="math/tex" id="MathJax-Element-16517">k\leq\sqrt{n}</script>,这个概率小于1/2<script type="math/tex" id="MathJax-Element-16518">1/2</script>,所以对?n?<script type="math/tex" id="MathJax-Element-16519">\lfloor{\sqrt{n}}\rfloor</script>个人,所有生日都不相同的概率至少为1/2<script type="math/tex" id="MathJax-Element-16520">1/2</script>。

现在假定前?n?<script type="math/tex" id="MathJax-Element-16521">\lceil{\sqrt{n}}\rceil</script>人都有不相同的生日,以后的每个人与前?n?<script type="math/tex" id="MathJax-Element-16522">\lceil{\sqrt{n}}\rceil</script>人之一有相同生日的概率至少为n/n=1/n<script type="math/tex" id="MathJax-Element-16523">\sqrt n/n=1/\sqrt n</script>。因此后?n?<script type="math/tex" id="MathJax-Element-16524">\lceil{\sqrt{n}}\rceil</script>人与?n?<script type="math/tex" id="MathJax-Element-16525">\lceil{\sqrt{n}}\rceil</script>人有不同生日的概率至多为

(1?1n)?n?<1e<12
<script type="math/tex; mode=display" id="MathJax-Element-16526">(1-\frac{1}{\sqrt{n}})^{\lceil{\sqrt{n}}\rceil}<\frac{1}{e}<\frac{1}{2}</script>因此,只要有2?n?<script type="math/tex" id="MathJax-Element-16527">2\lceil{\sqrt{n}}\rceil</script>人,所有生日全不相同的概率便至多为1/e<script type="math/tex" id="MathJax-Element-16528">1/e</script>。

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    生日悖论