漫画:跑上百万次代码验证三门问题
作者 | 程序员浩哥
责编 | 屠敏
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,出自美国的电视游戏节目Let's Make a Deal。今天为大家进行完整分析。
话不多说,直接看题目。
三门问题
三门问题:参赛者的面前有三扇关闭着的门,其中一扇的后面是天使,选中后天使会达成你的一个愿望,而另外两扇门后面则是恶魔,选中就会死亡。
当你选定了一扇门,但未去开启它的时候,上帝会开启剩下两扇门中的一扇,露出其中一只恶魔。(上帝是全能的,必会打开恶魔门)随后上帝会问你要不要更换选择,选另一扇仍然关着的门。
普通人的直觉
按照常理,参赛者在做出最开始的决定时,对三扇门后面的事情一无所知,因此他选择正确的概率是1/3,这个应该大家都可以想到。
接下来,主持人排除掉了一个错误答案(有恶魔的门),于是剩下的两扇门必然是一扇是天使,一扇是恶魔,那么此时无论选择哪一扇门,胜率都是1/2,依然合乎直觉。
所以你作为参赛者,你会认为换不换都无必要,获胜概率均为1/2。但是,真的是这样吗?
题目分析
正确的答案是,如果你选择了换,碰见天使的概率会高达2/3,而不换的话,碰见天使的概率只有1/3。怎么来的?
我们用一个很通俗的方法,能让你一听就懂。首先刚开始选择的一扇门的概率为1/3,而另外两扇门的总概率为2/3。
现在上帝打开了其中一扇为恶魔的门,我们知道这个门后面不会再有天使,所以相当于这部分概率被第三个门持有。
剩下的那扇门的概率(2/3)相当于刚开始选择的门(1/3)的二倍。所以我们得换。
如果还没有听懂。我们可以假设有一百扇门,里边有99只都是恶魔。现在你随机选择一扇门,选择到天使的概率是1/100。
这时,上帝打开其中的98扇,里边都是恶魔。这时候就相当于99/100的概率都集中在了另一扇门里。自然,我们需要选择换。
贝叶斯证明 代码证明
为了验证结果,我用代码跑了一百万次。什么?用贝叶斯分析分析!太俗,咱们还是直接上代码。
1func main() {2 //换门遇见天使的次数和不换门遇见天使的次数3 changeAngelCount, unchangeAngelCount := 0, 04 for i := 0; i < 1000000; i++ {5 //门的总数6 doors := []int{0, 1, 2}7 //天使门和选中的门8 angelDoor, selectedDoor := rand.Intn(3), rand.Intn(3)9 //上帝移除一扇恶魔门
10 for j := 0; j < len(doors); j++ {
11 if doors[j] != selectedDoor && doors[j] != angelDoor {
12 doors = append(doors[:j], doors[j+1:]...)
13 break
14 }
15 }
16 //统计
17 if selectedDoor == angelDoor {
18 unchangeAngelCount++
19 } else {
20 changeAngelCount++
21 }
22 }
23 fmt.Println("不换门遇见天使次数:", unchangeAngelCount, "比例:", (float32(unchangeAngelCount) / 1000000))
24 fmt.Println("换门遇见天使次数:", changeAngelCount, "比例:", (float32(changeAngelCount) / 1000000))
25}
跑了一百万次,结果当然不让我们失望!
所以,今天的问题你听明白了吗?评论区留下你的想法吧!
【End】
在全民抗疫的特殊时期下,在人员复杂、流动量大地方的出入口处都设置了无接触式无感红外人体测温系统。
在这次疫情防控中,无感人体测温系统发挥了怎样的作用?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术?
今晚8点《多场景疫情防控:解读云边端联动下的全栈 AI 技术应用》
推荐阅读
☞独家揭秘阿里自研飞天操作系统洛神平台如何支撑起 2684 亿全球大促!| 问底中国 IT 技术演进
☞微信回应钉钉健康码无法访问;谷歌取消年度 I/O 开发者大会;微软公布 Visual Studio 最新路线图 | 极客头条
☞为什么说Transformer就是图神经网络?
☞我在武汉卖手机
☞必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选
☞比特币归谁所有?有人通过分析区块链数据集找到答案
你点的每一个在看,我认真当成了喜欢
漫画:跑上百万次代码验证三门问题相关推荐
- Java简单代码验证三门问题
三门问题(Monty Hall problem)是一个有关于博弈论的趣味数学问题.问题名字来自美国的电视游戏节目Let's Make a Deal的主持人蒙提·霍尔(Monty Hall). 参赛者会 ...
- python如何运行代码_python上怎么跑(运行)代码
有朋友刚刚学Python,打开Python之后输入打印hello world的语句之后不知道该咋办了,怎么才能将Python代码跑起来呢?下面我将给大家介绍几种方法. 接下来介绍几种运行python代 ...
- 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!
哈哈哈哈,最近发现一个好用的在线编译.下载.烧录的跨平台快速原型开发工具平台,名字好记–8ms,单看名字是真的不知道干嘛的,不知道为啥叫这个?不多想了,好用就得分享给大家,独乐乐不如众乐乐呀-- 好用 ...
- Hubble:“百万原生代码+混合交易分析”的利器!
长时间以来,人工智能和大数据一直作为孪生兄弟相互支撑. 但如今,生产与离线分析各自独立的传统信息化结构已经无法支撑AI的发展. 每个异构数据库产品之间的同步和数据冗余.业务的实时性需要流数据框架.ML ...
- 【发福利啦!】畅享上百万卡时NPU普惠算力,启智与昇思MindSpore社区联合推出算力支持计划
启智社区与MindSpore联合,为MindSpore开发者提供 365天*24小时 上百万卡时的MindSpore+NPU普惠算力,欢迎MindSpore产学研开发者申请,基于MindSpore开发 ...
- php 跑马灯抽奖,JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)_javascript技巧...
最近做了个项目,其中有项目需求是要实现跑马灯抽奖效果,实现此功能主要用到js相关知识,废话不多说,感兴趣的朋友可以阅读下全文. 开始之前先来看上篇文章遗漏的两个问题和几个知识点,是自己重构的过程中需要 ...
- GitHub上YOLOv5开源代码的训练数据定义
GitHub上YOLOv5开源代码的训练数据定义 代码地址:https://github.com/ultralytics/YOLOv5 训练数据定义地址:https://github.com/ultr ...
- JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理
文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结 JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语言. ...
- Windows下Git上传项目代码记录
Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 1.在git服务上创建一个test项目: 2.https://git-for-windows.github.io/ ...
最新文章
- mysql根据当前时间删除_从日期时间早于另一项日期时间的Mysql表中删除
- 一个植物转录组项目的实战
- VTK:光标形状用法实战
- 同理心是通往成功架构的桥梁
- const int *a和int*const a 的区别详解
- mfc formview中的关闭视图函数_VC|API消息处理(回调函数+分支语句)与MFC中的消息映射函数...
- 解决Tensorflow2.0出现:AttributeError: module ‘tensorflow‘ has no attribute ‘get_default_graph‘的问题
- idea 非法字符 \ufeff
- bootstrap带图标的按钮与图标做连接
- ai初创企业商业化落地_初创企业需要问的三个关于人工智能的问题
- FastReport浏览器直接打印无须预览(2023终版)
- 免费股票数据接口api接口应该如何区分?
- vmoptions默认配置_idea VM options参数优化
- c语言小车程序,51单片机控制小车运动C语言代码
- http 502错误怎么解决?
- 风格化半调效果如何制作?教程来了
- 诚信比生命更重要,人不诚信难成正果
- 粒子摇摆 shader
- 千兆网口 Freescale ETSEC + Marvell 88E1111 uboot Linux 驱动分析
- Crayon:新研究指出让IT决策者夜不能寐的原因