今天来讲一个经典的概率论问题:
介绍
什么是三门问题
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。 问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。
(来源于知乎)
故事情节
参赛者选中了一个门。这时,主持人Monty Hall打开了另一扇门,让参赛者看。只见里面有一只山羊在安静的吃艹。然后,主持人Monty Hall问参赛者:“你也看到了,这扇门里是山羊,那么我给你一次机会,你可以换成另一扇门,你换不换?”
换还是不换
按这样来看,剩下两扇门,应该有一只羊一辆车,这样来看,两扇门有车的概率应该是一样的,都是 50 % 50\% 50%,也就是说,换或者不换的概率也都是 50 % 50\% 50%
然而。。。
令人疑惑不解的答案
当时大数学家给出的答案是:换的概率是 2 3 \huge \color{red}\frac{2}{3} 32,不换的概率是 1 3 \huge \color{red}\frac{1}{3} 31。
很神奇,对吧。
那么,我们来验证一下这个答案对不对。
数学方法:概率论
思路很简单,假设一开始选的时候把另外两扇门绑一起,称为2号门,而一开始选的是1号门。
而在主持人告诉你那扇门是羊的时候,我们就知道,2号门可能是一车一羊,也有可能是俩羊。
- 一车一羊
- 左边(绑一起之前)的门是车(1/3)
- 右边的门是车(1/3)
- 二羊(全是羊)(1/3)
所以肯定是换更好
编程:生成数据
我们可以随机生成很多组数据,然后统计概率。
c++代码:
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
bool door[5];//下标1~3表示门,true是车,false是羊
int huan,buhuan;//记录成功次数
int main()
{
srand(time(NULL));//有一些编译器是srand(time(0));
for(int i = 1; i <= 10000; i++){//测试一万次
int p=rand()%3+1;//生成一辆车
door[p]=true;
int choose=rand()%3+1;//随机选择一扇门
int GB=rand()%3+1;//公布的那扇门
while(GB==p||GB==choose)//不能是有车的或选过的
{
GB=rand()%3+1;//重新生成
}
if(door[choose]==true)huan++;//记录次数
else buhuan++;
}
cout << huan << " " << buhuan << " " << 1.0*huan/(huan+buhuan)*100 << "%";//输出次数以及概率
}
编程:枚举法
直接枚举出所有情况,再按次数求出概率。文章来源:https://www.toymoban.com/news/detail-580726.html
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
bool door[5];//下标1~3表示门,true是车,false是羊
int huan,buhuan;//记录成功次数
int main()
{
for(int i = 1; i <= 3; i++){//车在哪个门
for(int j = 1; j <= 3; j++){//选哪个门
for(int k = 1; k <= 3; k++){//公布哪个门
if(k==i||k==j)continue;//不能选有车的和参赛者选的
if(i==j)huan++;//记录次数
else buhuan++;
}
}
}
cout << huan << " " << buhuan << " " << 1.0*huan/(huan+buhuan)*100 << "%";//输出次数以及概率
}
好的那么本期就结束了,我们下期再见!文章来源地址https://www.toymoban.com/news/detail-580726.html
到了这里,关于三门问题的三种解法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!