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

news2024/12/27 13:08:30

在上一节中,我们对生日问题进行了严谨的阐述:假设屋子里面每个人的生日相互独立,而且等可能的出现在一年 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 math

def 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.coloradmin.cn/o/1304960.html

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

相关文章

Docker部署Mysql5.7x和Myslq8.x

Docker部署Mysql5.7x和Myslq8.x 文章目录 1.部署mysql5.7.x2.部署mysql8.x3.创建用户授权及远程登录3.1 mysql5.7创建用户授权及远程登录3.2 mysql8创建用户授权及远程登录 4.总结 1.部署mysql5.7.x 在D盘下的mysql目录下新建如下目录: D:\mysql\conf\my.cnf内容如下…

OpenVINS学习2——VIRAL数据集eee01.bag运行

前言 周末休息了两天,接着做上周五那个VIRAL数据集没有运行成功的工作。现在的最新OpenVINS需要重新写配置文件,不像之前那样都写在launch里,因此需要根据数据集情况配置好estimator_config.yaml还有两个标定参数文件。 VIRAL数据集 VIRAL…

【工具栏】idea安装翻译工具

然后重启idea 打开设置 翻译方式: 选中要翻译的文本 然后右键 运行项目的时候,方便查找错误

GPT-4「变懒」问题将被修复;英伟达选择越南成公司“第二故乡”丨 RTE 开发者日报 Vol.104

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的…

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理1)数据集来源2)数据集内容3)数据集预处理 2. 模型构建1)定义模型结构2)优化损失函数 相关其它博客工程源代码下载其它资料下载 前言 本项目…

flex布局一行n个

上图 缩小后 主要用了 flex-basis flex-grow flex-shrink flex的三个属性 有兴趣的可以看看 深入理解CSS之flex精要之 flex-basis flex-grow flex-shrink 实战讲解 .bg{background-color: aquamarine;width: 100%;height: 100%;display: flex;flex-wrap: wrap;}.box1{backgr…

Python Thefuck库详解:让错误命令变得“友好”

更多资料获取 📚 个人网站:ipengtao.com Python中有许多强大的库,其中Thefuck库独具特色,它的作用是纠正用户在终端输入的错误命令,让操作变得更加友好和高效。在本篇博客文章中,我们将深入探讨Thefuck库的…

d2l绘图不显示的问题

之前试了各种方法都不行 在pycharm中还是不行,但是在anaconda中的命令行是可以的 anaconda prompt conda activaye py39 #进入f盘 F: #运行文件 python F:\python_code\softmax.py

vue-print-nb ,element-ui => table打印不全不说原理直接上代码

你的边框的颜色能深就深点&#xff0c;有的时候打印不出来 如果你出现这种情况请复制以下代码&#xff1a; <style media"print" scoped> page {size: auto;/* auto is the initial value *//* margin: 3mm; */margin-bottom: 0mm;/* this affects the margin…

小白必看!海外静态ip和动态ip解析!

在如今的时代&#xff0c;互联网已经成为我们生活中必不可少的一部分。无论是工作、学习还是娱乐&#xff0c;我们都得要一个稳定快速的网络连接。而在某些特殊情况下&#xff0c;海外静态ip和动态IP就变得非常重要。这篇文章就来解析这两种IP的类型&#xff0c;帮助新手们更好…

CGAN笔记总结第二弹~

CGAN原理与源码分析 一、复习GAN1.1损失函数1.2判别器源码1.3 生成器源码 二、什么是CGAN&#xff1f;2.1 CGAN原理图2.2条件GAN的损失函数2.3 生成器源码2.4 判别器源码2.5 训练过程1&#xff09;这里的训练顺序2&#xff09;为什么先训练判别器后训练生成器呢&#xff1f; 2.…

Dijkstra求最短路 II(堆优化Dijkstra算法)

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为非负值。 请你求出 11 号点到 n 号点的最短距离&#xff0c;如果无法从 11 号点走到 n 号点&#xff0c;则输出 −1−1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含…

Vue指令之v-else与v-else-if

在上一篇博客中介绍了v-if&#xff0c;而在各式各样的程序语句中 if 和 else 通常是伴生的&#xff0c;在Vue中也不例外&#xff0c;Vue同样提供了v-else和v-else-if指令&#xff0c;其功能就是补充v-if的逻辑判断。 例如&#xff0c;当我们要根据一个分数输出对应的等级&…

路由器的转换原理--ENSP实验

目录 一、路由器的工作原理 二、路由表的形成 1、直连路由 2、非直连路由 2.1静态路由 2.2动态路由 三、静态路由和默认路由 1、静态路由 1.1静态路由的缺点 1.2路由的配置--结合ensp实验 2、默认路由--特殊的静态路由 2.1概念 2.2格式 2.3默认路由的配置--ens…

3GPP标准查看、下载和几个UE相关系列标准

由于一直做终端侧协议。最近以UE为核心重新下载了一系列文档。 总结并举例一下分类标准。 如何查看3GPP标准列表 实际上在3GPP网站如下链接&#xff1a;Specifications by Series&#xff0c;每个系列以及分类都说的很清楚。 几个系列分类举例 和终端协议层工作比较关系密切…

【Java】构建表达式二叉树和表达式二叉树求值

问题背景 1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串&#xff0c;输出该算术表达式的值。要求&#xff1a; &#xff08;1&#xff09;系统至少能实现加、减、乘、除等运算&#xff1b; &#xff08;2&#xff09;利用二叉…

LeetCode(55)环形链表【链表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 环形链表 1.题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评…

啊?150水冷踏板卷到7千多,巧格的钱购买150了?

力帆的车一般我是不太想写的&#xff0c;但是顶不住它这个价格&#xff0c;实在是....&#xff0c;标准版售价干到了7980元&#xff0c;和巧格一个价了&#xff0c;比福喜还便宜点&#xff0c;属实是离离原上谱&#xff0c;不过这个车不太影响的了豪爵大哥的UHR&#xff0c;两台…

Cypress安装与使用教程(2)—— 软测大玩家

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

pip list 报错 ImportError: cannot import name ‘main‘ from ‘pip._int

文章目录 报错信息问题原因解决方案 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或CSDN滴滴我 报错信息 最近在操作服务器的时候&#xff0c;发现pip list这个命令不好使了&#xff0c;报错如下 外链图片转存失败,源站可能…