同一天过生日的概率有多大?
有一个很经典的概率问题,是讲如果一个班有学生50人,找到至少有2个人同一天过生日的概率有多大?
我问过很多人,都觉得不好算。简化点问是否有50%?答没有,再问有没有20%,也还是觉得没那么高。当我告诉答案是96.5%时,都表示不相信。
而事实上,当有50个学生时,答案确实是96.5%;有59个学生更是高达99.1%,有47个是94.8%,有35个是80.5%,而当有23个时,概率就刚好超过50%,可以进行赔率为1:1的赌博了。另一方面,要是以普通约为50人的班做对象,按1:10的赔率赌博也是个赚字。
看到这些答案吃惊吗?不信的话可以做验证,下面有两个方法:
第一个是实验验证,找多个班的学生生日资料,查查是不是有同一天过生日的,计算有同一天过生日的数量占总数的百分比。当然也不必限定一定是学生,只要是能找到生日资料的任何人群都可以,如亲人朋友、战友、网友、同村的、同楼的等等,有生日记载的历史人物也可以,只要按一定的数量组成要考查的群体就行。
第二个是实验数学方法验证。毕竟要找那么多人的生日资料不是很容易办到的。可以假设生日的分布是随机的,用随机数函数产生伪随机数模拟生日资料进行分析。
- 打开Excel,新建一个工作簿,另存为birthday.xls;
- 在Sheet1的A2单元格输入“=INT(RAND()*366)”,获得从0至365的伪随机数;
- 在B1单元格输入“1-1”,显示为1月1日,或者将B列设为喜欢的日期格式,设置C列为B列相同的日期格式;
- 在B2单元格输入“=A2+B$1”,显示为1月1日,或者将B列设为喜欢的日期格式;
- 在D2单元格输入“=C3-C2”,显示为1月1日,或者将B列设为喜欢的日期格式;
- 选取区域A2:D2,鼠标移到选取区域的右下角时指针变为“+”,如要模拟50人的情况,将鼠标按住下接至51行;
- 在D1单元格输入“=MIN(D2:D50)”;
- 此时A列为0至365的伪随机数,B列为对应的日期。此二列当有输入事件发生时会重新产生随机数而变化。D列为0,将D51中的内容删除;
- 选取区域B2:B51,复制,选择性粘贴数值到C2:C51,对C列数据区域排序。
此时,如D1的值为0,则说明是有同一天过生日的;重复第9步就可统计所需概率了。 当然,要是觉得一次次统计太累,也可以将第9步录制为宏,然后对宏代码做些修改以自动完成。
在F2单元格输入“班数”;F3单元格输入准备模拟统计班的数量,比如说100,当然此数越大越准确,但花的计算时间也会相应增加;在F4单元格输入“概率”;F5单元格准备显示宏程序统计出的概率,将格式设为百分比。运行宏程序就在F5中见到所得的概率结果。宏代码如下: (Excel文件下载)
Sub STAT()
- Range("F3").Select
Number = ActiveCell.Value
counter = 0
For n = 1 To Number
Range("B2:B51").Select
Selection.Copy
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending
Range("D1").Select
If ActiveCell.Value = 0 Then counter = counter + 1
Next n
Range("F5").Select
ActiveCell.Value = counter / Number
End Sub
看到模拟统计的结果了吧?下面我们来分析如何用统计学的方法计算:
2个人同一天过生日的概率是多少呢?很明显是1/365。但如有多个人的话,则要考虑任何2个人同一天过生日的可能性。需要用组合计算确定有多少个可能的2人组合。而至少有2人同一天过生日的概率,则考虑通过计算没有任何一个2人组合同一天过生日的概率来得到。显然,一个2人组合不是同一天过生日的概率为364/365,有多少个2人组合就将它乘多少次方。
我们还是在前面的Excel文件中进行计算:在F7、F8中分别输入“人数”如“50”;在F9、F10中分别输入“组合数”和“=COMBIN(F8,2)”,此时F10是得到计算出的组合数为1225;在F11、F12中分别输入“概率”和“=1-POWER(364/365,F10)”,并将F12格式设为百分比,就得到了所求的结果,在前述的50人时为96.53%;变化F8中的数值就求得不同人数下的概率。
顺便说下,前述的364/365的多次方的计算,用计算器的话可能不能算或者误差很大,应当先将364/365取对数,再乘以组合数n*(n-1)/2,将乘方计算转化为乘法计算,再求反对数。用这种方法,有数学用表(需查对数表与反对数表)的情况下也能用手工计算出结果。
