情景导入:
原问题:
三门问题,又称蒙提霍尔问题,是源自博弈论的数学游戏问题,大致出自美国的电视游戏节目Let's Make a Deal。问题的名字来自该节目的主持人蒙提·霍尔。
这个游戏的玩法是:参赛者会看见三扇关闭的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
问题是:换另一扇门是否会增加参赛者赢得汽车的机率?如果严格按照上述的条件的话,答案是会。换门的话,赢得汽车的机率是2/3。不换门的话,赢得汽车的机率是1/3。
这个问题的答案违反直觉,因为人们往往会认为,已经打开了一扇有山羊的门,所以汽车最有可能在那两扇未打开的门中。然而,如果我们按照这种逻辑思考,那么赢得汽车的机率就会降低。因此,我们应该选择换门,这样才有可能赢得汽车。
数学分析+实验证明:
若有A,B,C三个门
1,假设参赛者选择了A门
2,主持人选择的B门(主持人选的门里无车)
3,参赛者决定换不换门
从直觉上看这个概率不就是1/2吗,就剩两个门了。
但有时候看到的也不一定为真,容易掉入惯性思维的陷阱。
正所谓实践是检验真理的唯一标准,可以用代码模拟实验证明
C++的代码可以参考使用蒙特卡洛方法模拟三门问题(C语言)_三门问题c语言_小沐想秃头的博客-优快云博客
通过代码模拟实验可以看出来A 中奖的概率大约为1/3,换门的中奖几率约为2/3。
很显然概率并不是看起来的1/2,接下来用数学方法证明:
说到概率的计算就不得不提一下贝叶斯定理,不知道的可以去网上搜,
这里要用到贝叶斯公式:P(A|B) = P(B|A) * P(A) / P(B);
过程:
设主持人在参赛者选了A的基础上选择了B门为事件D;
我们要的答案是 P(A|D)=P(D|A)*P(A)/P(D);
P(A)=1/3;
P(D|A)=1/2; (表示A门有汽车的情况下,主持人选择B门的概率)
P(D)=1/2; (P(D)=P(D∣A)P(A)+P(D∣B)P(B)+P(D∣C)P(C))
则: P(A|D)=P(D|A)*P(A)/P(D) = (1/2 * 1/3) /1/2=1/3;
所以可知换门中奖给概率更高;
例题1:
题目
摸奖(开盒简单版)
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度: 简单
出题人: asily
描述
泉此方去SOS团参加派对, 在派对上有一个抽奖活动, 凉宫春日是主持人, 凉宫春日说:“这里有n个奖盒, 只有一个奖品”, 泉此方成为了幸运观众, 他选择了第一块奖盒,而这时,知道哪个盒子里面藏有奖品的凉宫春日,打开了m个盒子,里面什么也没有。接着,凉宫春日走向泉此方说,“你现在还坚决选择第一块奖盒吗,要不要改变你的选择?
泉此方很想要奖品, 他想要最大化抽中奖的概率, 但这个问题难到泉此方了, 请你帮帮此方做出抉择
输入描述
输入有两个用空格隔开的正整数 n,m(3≤n≤109,0≤m<n−1)
输出描述
输出只有一个字符串表示你的选择
"YES"表示改变选择获奖概率最大
"NO"表示不换获奖概率大
“no thing”表示获奖概率一样大(当获奖概率一样大时请输出此项)
用例输入 1
3 1
用例输出 1
YES
题解
这个题概率的计算方法和上面的一样
算出如果不换门中奖的概率 P1=1/n;
则其他门中奖的总概率为P2=1-P1;
其他门中奖的数量:num=n-m-1;
则其他每个门中奖的概率:P3=P2/num;
设 x=P1-P3=1/n-(1-1/n)/(n-m-1)
假设n-m-1=n,此时x=1/n^2>0;
因为n-m-1>n,即减数减小,x>1/n^2>0;
所以无论n和m为何值换的中奖的概率更大
*不过要注意m=0的情况,当m=0时,概率相同
例题2:
题目
小飞棍又来喽~~(开盒困难版)
暂无标签
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度: 简单
出题人: czhyyds
描述
众所周知,集训队的大家都喜欢小飞棍,但是很可惜小飞棍的数量并不够人手一只。
ll学长和mbd学长都想要小飞棍,但是小飞棍只剩一只了。于是,ll学长和mbd学长想通过游戏的方法获得小飞棍的所有权,游戏规则如下:
1 游戏中会有n个盒子,mbd学长会将小飞棍会随机放入一个盒子中。
2 ll学长锁定一个盒子后,mbd学长会打开m个没有装小飞棍的盒子(不能打开ll学长锁定的那个盒子)。
3 之后ll学长可以选择打开当前锁定的盒子或者换一个没有打开的盒子打开。
如果ll学长开出小飞棍,则小飞棍归ll学长所有,否则归mbd学长所有。你可以告诉ll学长他获得小飞棍的最大概率是多少吗?
输入描述
第一行输入两个数n(3<=n<=1000)和m(0<=m<n-1)。
输出描述
输出ll学长能开出小飞棍的最大概率(结果保留六位小数)。
用例输入 1
4 0
用例输出 1
0.250000
用例输入 2
3 1
用例输出 2
0.666667
题解
上一个例题弄明白了,这个就水到渠成了;
这个只是让把概率打印出来,可以看上一个题的过程
不换的概率为:P1=1/n;(不过要的是概率最大值,通过上一个题可以知道这个可以不考虑了)
其他门每一个的概率为:P2=(1-1/n)/(n-m-1);
直接计算就行了
总结
在处理概率问题时一定要分清独立事件和条件事件,不要轻易的相信自己的惯性思维,
实践才是检验真理的唯一标准,通过这个问题也让我们感受到了数学的魅力........
当程序猿遇见数学,变秃了,也变强了,嘿嘿
小趴菜第一次写博客有错误请积极指出!