欢迎光临散文网 会员登陆 & 注册

用Python对生日悖论问题的验证(含代码)

2020-04-25 17:04 作者:LMark07  | 我要投稿

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

    详细定义(摘自百度百科)

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

    1.分析工具

          Python

          matplotlib库,numpy库,pandas库等等

     2.理论分析

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

P为至少两人生日相同的概率

        这样子,我们就有了这个‘随机取n个人,其中至少有两人生日相同’的概率的关系式了,通过计算我们不难得出下表的数据。

可以看到,这个概率还是挺大的

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

从n=10到n=50之间的数据

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


      3.用实际数据验证

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

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

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

看起来不是很难,用代码实现起来更是方便了,

包含了实际数据和回归曲线的计算

同样的,实际数据也计算n=10到n=50的数据,得出下列数据。

是不是有点难看懂

          画成曲线图就是这样的🗡

实际数据得出的曲线图

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

两根曲线走向差不多

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


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




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

用Python对生日悖论问题的验证(含代码)的评论 (共 条)

分享到微博请遵守国家法律