如何计算你们同班同学的缘分 (2)

今天在《理性》这本书里读到了一个生日悖论。说一个60人的班级,存在同一天生日的同学概率超过 95%,感觉有点不真实。
曾在学校时,我发现如果两个同学同一天生日,我会认为这是一种缘分。若他们一男一女,更觉缘分深厚。他们结为伴侣就更不可思议了。

那么,这些概率如何计算?这种缘分有多不可思议?

我们假设一年有 365 天,一个班 60 人,男女各半。

存在至少两个同学同一天生日的概率

直接计算较难,故采用迂回策略。先算出所有同学生日各不相同的概率 P(A),再用 1-P(A) 计算至少两人同天生日的概率。计算过程如下:

  1. 每个同学的生日可以是 365 天中的任意一天,同学生日的总可能性为 $365^{60}$。
  2. 所有同学生日不同的情况:第一个同学有 365 选项,第二个同学有 364 选项 (跟前面所有同学生日不同),依此类推至第 60 个同学,有 306 选项。
  3. 因此,$P(A)=\frac{365 \times 364 \times \cdots \times 306}{365^{60}}$。

写个程序计算,手算是不会手算了:

from math import prod

days_in_year = 365
students = 60
prob_no_shared_birthday = prod([(days_in_year - i) / days_in_year for i in range(students)])
prob_at_least_one_shared_birthday = 1 - prob_no_shared_birthday
print(prob_at_least_one_shared_birthday)
# 0.9941

结果是惊人的 99.41%!所谓缘分竟不过如此。

一个男生和一个女生同一天生日的概率

原问题还没想明白,简化一下问题,假设男生的生日不同,女生的生日也不同啊

  1. 所有事件的可能个数不变,还是 $365^{60}$
  2. 一个男生和一个女生同一天生日的概率计算:女生和男生的生日各有 365种可能,组合可能有 $365^2$ 种可能,同一天生日有 $365$ 种可能(一年中的任何一天),所以概率是 $\frac{1}{365}$。
  3. 而男女的配对的总共有 $30\times 30$ 方式,所有男女生配对方式的生日都不同的概率是 $(1-\frac{1}{365})^{900}$
  4. 存在至少一对男女生同一天生日的概率是 $1-(1-\frac{1}{365})^{900}$
from math import prod

pairs_num = 30 * 30
prob_no_shared_birthday_girl_boy = prod([1 - (1/365) for i in range(pairs_num)])
prob_at_least_one_shared_birthday_girl_boy = 1 - prob_no_shared_birthday_girl_boy
print(prob_at_least_one_shared_birthday_girl_boy)
# 0.9153

结果是 91.53%,在一个 60 人的班上,碰到同一天生日的异性概率还是很高的啊。

存在至少两个同学变成男女朋友的概率

我们假设没有三角恋这种超出认知范围的关系啊,并且一个男生跟一个女生成为男女朋友的概率为 1/4

  1. 大家都单身的概率:总共的男女朋友组合有 $30\times 30=900$ 种可能,都不成为男女朋友意味着这 900 个组合都不成功,因此这个概率 $P(A)=(1-1/4)^{900}$,几乎为 0。
  2. 那么班上存在一对男女朋友的概率就是 $1-P(A)$ 几乎概率为 1。所以不可避免一个班上会出现男女朋友。
  3. 上面的计算不太贴合事实,因为一般是这 900 个组合里面,很多男女生成不了男女朋友的概率几乎是 1。因为人性嘛,只有双方都吸引彼此才能成。估计只有“班花班草”这样的组合不成功概率会低一点。假设班里班花 3 名,班草 3 名,那么 $P(A)=1^{991}\times (1-1/4)^9=0.075$。$1-P(A)=0.925$。所以很大概率上一个班级还是会有男女朋友。

这样想想,家长们有必要去阻止谈恋爱吗?可能培养正确的爱情观才是家长们该做的,避免是不可能避免了。概率真好玩。

关注不走丢,欢迎反馈、点赞、加星

参考

  1. Steven Pinker《理性》
posted @   JasonHao  阅读(91)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示