python 实现 AIGC 大模型中的概率论:生日问题的基本推导

在上一节中,我们对生日问题进行了严谨的阐述:假设屋子里面每个人的生日相互独立,而且等可能的出现在一年 365 天中的任何一天,试问我们需要多少人才能让某两个人的生日在同一天的概率超过 50%。

处理抽象逻辑问题的一个入手点就是先形象化,简单化和实例化。首先不难理解一年只有 365 天,如果屋子里有366 人,那么一定有两个人的出身日期在同一天,此时概率是 100%。如果屋子里只有 1 个人,那么有两个人同一天生日的概率就是 0。试想如果屋子里有 183 人(365 的一半),这些人的生日不重复,于是这种情况将 365 天分成了相当的两部分,一部分属于那 183 人的生日,另一部分不属于 183 人的生日,此时进入第 184 人,这个人的生日只有两种可能,落入第一部分或者第二部分,由于两部分的天数一样多,那么他落入哪一部分的可能性都相同也就是 50%,如果落入第一部分,那么我们就得到两个人有相同生日的情况。由此可见,确切的答案一定在[2,184]之间。

此外解决逻辑问题,特别是算法问题,还有一种有效方法就是暴力破解。也就是我们把所有可能的情况一一罗列出来,找出合适的那个,然后再看看有没有好的方法改进暴力破解法。假设屋子里有 n 人,那么我们罗列出他们所有可能的生日情况,把这些情况中有出现重复的部分抽取出来。在简单情况下,屋子里只有 2 人,每个人的生日可能是 365 天中某一天,于是这两个人可能的生日组合是 365 * 365 = 133,225种情况(注意问题假设,屋子里人的生日相互独立)。 在这么多种组合中,两个人生日在同一天的情况有多少种呢?如果第一个人选定某一天后,第二个人必须跟他一样,由于第一个人只有 365种选择,因此两人生日相同的情况有 365 * 1 = 356 ,于是屋子里有 2 个人时,出现同一天生日的概率是 365 / (365 * 365) = 1 / 365 = 0.27%.

如果屋子里有 3 个人,那么生日情况就有 365 * 365 * 365 = 48,627, 125 种。这种情况比较复杂的是,如何考虑有两个人出现重复生日的情况,稍微大意就会出错。这里我们虽然考虑有两个人生日相同,但如果 3 个人同时生日相同,这种情况也能满足题目要求,所以不能遗漏,3 个人生日相同的情况数量就是 365 * 1 * 1 = 365种。除去 3 人同时生日相同的情况后,我们就能考虑只有 2 人生日相同的情况,如果假设前两个人生日相同,第 3 个人与前两个人不同,那么满足条件的情况就是 365 * 1 * 364 = 132,860,同理第 2 第 3 人生日相同,但第一人与后两人不同的情况也是365 * 1 * 364 = 132,860,最后第 1,3 两人生日相同,第 2 个人跟其他两个不同的情况也是365 * 1 * 364 = 132,860,由此屋子里有 3 个人,其中出现两个人生日相同的情况总数就是 132,860 + 132,860+132,860 + 365,由此对应概率就是(132,860 + 132,860+132,860 + 365)/ 48,627, 125 = 0.82%。

我们上面的枚举方法非常容易出错。要不就是多算了某种情况,要不就是少算了某种情况。例如三个人有相同生日时,我们只能将其算一次,我们不能把他看成第一第二个人生日相同算一次,然后第二第三个人生日相同算一次,然后第一第三个人生日相同又算一次,这么想我们就会将它算成 3 次。另外枚举法随着人数的增多也越来越难以使用,例如 4 个人的时候,我们要考虑只有两个人生日相同,只有三个人生日相同,4 个人生日相同等情况,还有更麻烦的情况是其中两个人生日共同在某一天,然后另外两个人生日又共同在不同的某一天,例如其中两人生日在 3 月 4 日,然后另外两人生日在 5 月 6 日等。

由此看来暴力枚举方法不是解决该问题的有效手段。在概率论上一个有效方法是从反面思考。例如我们直接考虑事件 A 的概率 p发现很难下手,那不妨先考虑非 A 的对应概率1-p,因为只要直到后者,那么前者自然迎刃而解。由此我们看看如果屋子里有 n 个人,那么他们没有人有相同生日的概率怎么算。如果每个人依次走入房间,那么第一个人进入房间时只有他自己,那么此时不可能有人跟他有相同生日,因此这时没有两人有相同生日的概率是 1, 也就是 365 / 365.第二个人接着进入,那么他的生日必须要跟第一个人不同,此时他有 364 种选择,因此此时两人生日不同的概率是 (365 / 365) * (364 / 365),这里用到的一个原则是,两个相互独立的事件,他们同时发生的概率等于两个事件概率的乘机。根据同样的规律,第 3 个人进入房间后,他有 365-2=363 种可能使得他的生日与前两人都不同,因此 3 人没有相同生日的概率是(365 / 365) * (364 / 365) * (363 / 365)。由此可以推测 n 个人进入屋子后,没有人生日相同的概率是(365 / 365) * (364 / 365) * (363 / 365) * … ((365 - (n-1)) / 365)。

这里需要注意的是分子变化,因为分母都是 365。对应第一个人分子是 365,第二个人是 364,因此到第 n 个人时,分子变成 365-(n-1)。我们把上面的连续乘积用符号表示如下:
请添加图片描述
如果我们使用阶乘简化上面公式,阶乘就是 n!= n * (n-1) * … 1,需要注意的是 0! = 1。我们把上面公式展开就是:
请添加图片描述
我们在分子和分母同时乘以(365-n)!,那么就有:

请添加图片描述
如果我们能找到一个最小的 n 值,使得上面公式计算结果小于 1/2,那么问题就能解决,因为当 n人中没有两个人的生日相同的概率小于 1/2,那么其相反事件的概率也就是至少有两人生日相同的概率就大于 1/2,如果使用 f(n)表示上面公式最右边的计算,我们用代码将它的图形画出来看看规律:

import matplotlib.pyplot as plt
import numpy as np
import mathdef no_share_birthday(n):return math.factorial(365) / (365 **n * math.factorial(365-n))x = []
for v in range(50):x.append(v)y = []
for v in x:y.append(no_share_birthday(v))plt.scatter(x, y)
plt.show()print(f"no share birthday with 22 people is :{no_share_birthday(22)}, and with 23 people is {no_share_birthday(23)}")

上面代码运行结果如下:
在这里插入图片描述

no share birthday with 22 people is :0.5243046923374499, and with 23 people is 0.4927027656760146

从绘制的图形看到随着 n 的值越大,对应两个人没有相同生日的概率逐渐减小,在 20 过去一点对应概率就在 0.5 以下,同时我们也在代码中打印出 22 人和 23 人情况下没有人有相同生日的概率,可以看到 22 人的时候概率还在 0.5 以上,到了 23 人概率正好低于 0.5,也就是说当有 23 人时,有两人生日在同一天的概率会超过0.5.

由此可见我们推导的公式可以计算对应概率,但也有问题。一是不够通用,如果一年的天数改变了,我们需要重新计算,例如在火星一年有 687 天,那么房间需要多少火星人才能让其中两个人生日同一天的概率大于 0.5 呢。另外上面的计算公式不够简洁,我们是否能推导出一个好看的数学公式来直接算出相应概率呢,我们下一节看看如何实现这些目标。更多内容请在 b站搜索 coding 迪斯尼。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bash指令全集合】最全教程-持续更新!

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于新西兰奥克兰大学攻读IT硕士学位。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。跨领域…

Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…

一文讲透Python机器学习决策树算法的基本概念与原理

1.决策树算法的基本特点与优势 决策树算法是一种有监督、非参数、简单、高效的机器学习算法。相对于非监督式学习方法,决策树算法由于充分利用了响应变量的信息,因此能够很好地克服噪声问题,在分类及预测方面效果更佳。决策树的决策边界为矩…

【MySQL】MySQL数据库基础

MySQL数据库基础 一、为什么要有数据库?二、 数据库软件的构成数据库服务器,数据库,表关系主流数据库 三、基本使用1、连接服务器2、服务器管理3、MySQL配置文件4、数据库的简单操作5、数据逻辑存储 四、MySQL架构SQL分类MySQL客户端存储引擎…

smartkit巡检E9000设备

https://support.huawei.com/enterprise/zh/doc/EDOC1100325140/f6eeacd6 打开链接,里面的内容很详细。

013 OpenCV copyMakeBorder(padding)

目录 一、环境 二、原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、原理 cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形,其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图,是程序开发中比较常用的一种图表技术…

掌握Python异步IO利器:深入解读Asyncio

更多资料获取 📚 个人网站:ipengtao.com 异步 IO 与 Asyncio 在 Python 中的应用 在当今互联网时代,处理大量并发请求或I/O密集型任务对于软件应用程序至关重要。Python的异步IO框架——Asyncio成为了处理此类问题的有力工具。本文将深入介…

基于SpringBoot实现的电影院售票系统

一、 系统架构 前端:html | jquery | bootstrap 后端:springboot | thymeleaf | spring-data-jpa 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 首页 02. 登录页 03. 管理端-电影列表 04. 管理端-添加电影 05. 管…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉! 10月份,打印机市场整体销售下滑。鲸参谋数据显示,今年10月份,京东平台打印机的销量将近60万,环比降低约2%,同比降低约5%;销售额为4.4亿&a…

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记(一)之芯片篇(持续更新) 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器,该器件的操作可以在两种模式下完成,分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…

开源项目CuteSqlite开发笔记(二):SQLite的架构

在开发CuteSqlite图形客户端的时候,需要用到SQL的语法解释,来对SQL语句进行优化。找了很多的SQL语法解释器,都不是十分满意,只有翻开Sqlite的源码,看看SQLite对SQL语句的解释过程,本文是翻译的官方文档。 官…

Twincat功能块使用经验总结

控制全局变量: //轴控制指令 bi_Power: BOOL; //使能 bi_Reset: BOOL; //复位 bi_Stop: BOOL; //停止 bi_JogForward: BOOL; //正向点动 bi_JogBackwards: BOOL; //反向点动 bi_MoveAdditive: BOOL; //增量位…

Anaconda创建虚拟环境以及Pycharm和Jupyter如何切换虚拟环境

文章目录 Anaconda创建管理虚拟环境0. 进入到终端1. 创建新环境2. 切换环境3. 删除环境4. 查询当前已有的环境 Pycharm切换虚拟环境0. 更换解析器1. 添加虚拟环境(之前默认的是base环境)2. 验证切换虚拟环境 Jupyter Notebook 切换虚拟环境1. 安装ipyker…

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查 上一次我们实现了多表关联查询,还有分页显示数据的功能。还完善了用户管理这一模块。 因此今天我们需要完成的是供应商管理模块,这一模块…

BFD多跳检测配置

定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要…

指针进阶知识超详细讲解(C语言)(中)

前言 苦苦等待,终于迎来了我们的指针讲解第二期,如果有还没有看过上一期的小伙伴,那赶紧点击这个链接学习后再来看这篇博客吧。指针基础知识超详细讲解(C 语言)(上) 如果对学习C语言有兴趣那千万…

如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问

目录 前言 1. Ubuntu安装SVN服务 2. 修改配置文件 2.1 修改svnserve.conf文件 2.2 修改passwd文件 2.3 修改authz文件 3. 启动svn服务 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射本地端口 5. 测试公网访问 6. 配置固定公网TCP端口地址 6.1 保留一个固定…

GEE:Sobel算子卷积

作者:CSDN _养乐多_ 本文将深入探讨边缘检测中的一个经典算法,即Sobel算子卷积。我们将介绍该算法的基本原理,并演示如何在Google Earth Engine中应用Sobel算子进行图像卷积操作。并以试验区NDVI为例子,研究区真彩色影像、NDVI图…

【GIT】.gitignore 在忽略目录中放开某目录

示例:忽略build下面的所有目录,只放开build/ast2500-default/workspace/recipes-phosphor/ 目录 .gitignore 实现文件代码 # 忽略 build 目录下的所有目录 # 并放开build/ast2500-default/workspace/recipes-phosphor/ build/* !build/ast2500-defaul…