问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

“生日悖论”:为什么23个人中就可能有两人同一天生日?

创作时间:
作者:
@小白创作中心

“生日悖论”:为什么23个人中就可能有两人同一天生日?

引用
网易
1.
https://m.163.com/dy/article/JKM4O1TK05561IOL.html

在一个只有23人的房间里,至少有两个人同一天生日的概率是50%。这个结论听起来似乎有些违背直觉,但通过计算机模拟和数据分析,我们可以验证这个被称为“生日悖论”的现象确实成立。

这听起来像个悖论,对吧?为什么说这是悖论呢?我们知道,一个人和另一个人生日相同的概率只有1/365。而我们大多数人可能认识的朋友远远超过23人,却很少遇到生日相同的情况。这不禁让人质疑:这个说法怎么会成立呢?

其实,这种逻辑存在一些问题。首先,这里并不是问“有没有人和你同一天生日”,而是“是否有任意两个人生日相同”。这种可能性比你想象的要大得多。

为了更好地理解这一点,我们可以通过计算机模拟来验证“生日悖论”的真实性。模拟就是用计算机或模型去重现现实情况的一种方法,既高效又经济。比如,用风洞测试飞机模型的气流表现就是一种模拟。

在这里,我们通过Python编程语言模拟“生日悖论”。模拟的核心是:随机选择人并记录他们的生日,直到有两个人的生日相同为止,然后统计需要多少人才能发生这种情况。

以下是模拟实验的具体步骤:

  1. 随机选择一个人的生日。
  2. 检查之前是否有人有相同的生日。
  3. 如果没有重复,则继续选择下一人,重复步骤1和2,直到找到生日重复的人。
  4. 统计询问人数,并将其记为结果。

以下是模拟该实验的单个实例的代码:

def collect_until_repeat(dist = np.ones(365)/365): 
    # dist is the distribution of birthdays. If it is not known 
    # it is assumed uniform 
    # We'll use this variable as the stopping condition
    repeat= False 
    # We'll store the birthdays in this vector 
    outcomes = np.zeros(dist.shape[0]) 
    # n will count the number of people we meet. Each loop is 
    # a new person. 
    n = 0 
    while not repeat: 
        # add one to the counter 
        n += 1 
        # simulate meeting a person with a random birthday 
        outcomes += np.random.multinomial(1,dist) 
        # check if we got a repeat 
        if np.any(outcomes > 1): 
            repeat = True 
    return n 

重复以上步骤多次,我们可以得到一个关于“多少人需要满足生日重复”这一问题的概率分布。

通过一百万次实验的结果,我们得到了如下统计分布图:

  • 水平轴表示需要询问的人数(n)。
  • 垂直轴表示发生相应n值的概率。

实验结果显示,当房间里有23个人时,至少两人生日相同的概率确实达到了50%。这个结果验证了“生日悖论”的真实性。

有人可能会问:现实生活中,生日并非完全均匀分布。比如,12月25日和12月31日的出生人数明显偏低。如果我们用真实的生日分布数据来做实验,结果会有所不同吗?

答案是:不会!

我们通过实际的美国1994至2014年间的出生数据进行模拟后发现,无论是否考虑真实分布,“生日悖论”都成立。

如果你对“近似生日”(比如前后相差1天)也感兴趣,那么所需人数会更少。比如,当允许1天的容差时,只需要大约20人就几乎可以保证找到一对“接近生日”的人。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号