python对人说心里话代码_用Python对生日悖论问题的验证(含代码)

相信有不少人以前就有听到过一个悖论,一个班如果有60人,那么这个班里至少有两个人生日相同的概率要大于99%。一开始听到这个结论的时候,我的直觉就告诉我这怎么可能啊是吧,但事实上,这个直觉上十分错误的结论竟然是正确的,这就是今天我们这篇文章探讨的问题——生日悖论。

详细定义(摘自百度百科)生日悖论是指在不少于 23 个人中至少有两人生日相同的概率大于 50%。例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70%。对于 60 人的大班,这种概率要大于 99%。从引起逻辑矛盾的角度来说,生日悖论并不是一种 “悖论”。但这个数学事实十分反直觉,故称之为一个悖论。

1.分析工具

Python

matplotlib库,numpy库,pandas库等等

2.理论分析

其实仔细看这个问题大家就会发现,这个问题怎么这么像咱上学期学的概率的题型呢,其实这就是一道概率题,计算在n个人中,至少有两个人生日相同的概率。诶,这样子看起来是不是就很简单了呢,现在我们再把问题转换一下,要想得出至少有两个人生日相同的概率,我们只用求n个人中每个人生日都不一样的概率不久可以了么,然后再用1减去这个概率,这样子这个问题就非常好解决了,下图是详细推算过程。ddf6afea38cdb47b7f4b8d540a9e8701144c42df.pngP为至少两人生日相同的概率

这样子,我们就有了这个‘随机取n个人,其中至少有两人生日相同’的概率的关系式了,通过计算我们不难得出下表的数据。227d27bc33aba2c140b7e674bbc29e8eb91731df.png可以看到,这个概率还是挺大的

是不是感觉有点假,不过这个是事实了,从一堆数据中得出一些奇妙的结论,这就是分析一些奇怪的数据的作用了(详情参考我的上一篇文章XD),利用这些数据,我们可以画出它的曲线图。626b3f23f309780622544b30171fa729f337b0cf.png从n=10到n=50之间的数据

可以看到,这是一条很普通的曲线,但是,你觉得这篇文章到这里就结束了么,恰恰相反,接下来的内容才是本文的主菜。

3.用实际数据验证

说了这么多,其实都只是理论推理,也就是纸上谈兵,一个成功的理论,得有坚实的数据支撑起来。下面我们来说一下实际数据的验算过程,

(1)获取一个有1331人生日的列表

(2)当有n个人时,从这1331人中随机取出n个人,并判断这n个人中是否有至少两个生日相同的人。

看起来不是很难,用代码实现起来更是方便了,519e671b280e256b80a8ed0a2d7157d7118cd11d.png包含了实际数据和回归曲线的计算

同样的,实际数据也计算n=10到n=50的数据,得出下列数据。9c1831b37ad888a31364b0469c328e946e5d438e.png是不是有点难看懂

画成曲线图就是这样的🗡42926d452c596fc0ef9e29029575bbd0e5edc1e1.png实际数据得出的曲线图

看起来是不是和公式算出来的曲线很像?如果把两根曲线放在一起,就i成了,这样,d0a4f119f6051d902e280c254218c44a25656d12.png两根曲线走向差不多

这是我们再用最近学的相关指数R^2可以算出,两条曲线的拟合度有99.8之高

也就是说,在我们学校,这个悖论可是实打实的成立的,每个班都有60,70人,这里面基本上都会有至少两个人会在同一天过生日,这就是本篇文章的结论了,但,,具体有什么用呢?好像除了可以拿去吹水以外,,好像就真的没什么用了。

PS:可以去跟数学老师对线。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值