三门问题,亦称为蒙特霍尔(英文:Monty Hall problem),源自博弈论的数学游戏问题。这个游戏的玩法是:
参赛者会看见三扇关闭了的门,其中一扇的后面是奖品,而另外两扇门后面没有任何东西。
第一步,参赛者先选定了一扇门,但未去开启它,
第二步,知道门后情形的节目主持人会开启剩下两扇门的其中一扇空门,
第三步,主持人会问参赛者要不要换另一扇仍然关上的门。
现在问题是:换另一扇门会否增加参赛者赢得奖品的概率?如果换的话,那么他赢得奖品的概率是多少?
我一开始看这个问题的时候,以为如果选择换的话,那么他中奖的概率将由原来的1/3上升为1/2。
可是最后的结论是:如果参赛者更换选择的话,那么他中奖的概率是2/3。
数学证明:
这里我们将用到高中时候学到的贝叶斯公式:
P(B|A):在A发生的前提下,B发生的概率
P(A|B):在B发生的前提下,A发生的概率
P(A):A发生的概率,在这里指主持人打开空门的概率
P(B):B发生的概率,在这里指选中奖品的概率,很显然为1/3
因为主持人知道每扇门的后面是什么,所以主持人肯定能打开空门,所以P(A)=1,P(A|B)=1。
我们将数值带入贝叶斯公式便可得出结果:在主持人打开空门之后,参赛者不更换选择,选中的奖品的概率为P(B|A)=1/3。所以更换选择的概率为1-1/3=2/3。
下面是编程验证:
//生成min到max之间的随机整数
function randomInt(min,max){
return Math.floor(Math.random()*(max-min+1));
}
function game(ifChange){
const prize=randomInt(0,2); //奖品
let custSelect=randomInt(0,2); //玩家的第一次选择
let hostSelect; //主持人的选择
//主持人会选中没有奖品的门
if(custSelect==prize){
hostSelect=[0,1,2].find(item=>item!=prize);
}
else{
hostSelect=[0,1,2].find(item=>item!=prize&&item!=custSelect);
}
//是否更换选择
if(ifChange){ //更换选择
custSelect=[0,1,2].find(item=>item!=hostSelect&&item!=custSelect);
}
return custSelect==prize; //返回是否中奖
}
const gameCount=3000; //执行次数
let changeCount=0; //换之后的中奖次数
let notChangeCount=0; //坚持原来的选择的中奖次数
for(let i=0; i<gameCount; i++){
if(game(true)){
changeCount++;
}
if(game(false)){
notChangeCount++;
}
}
//最后的结果
const p1=changeCount/gameCount //更换选择,抽中的概率,大约是2/3
const p2=notChangeCount/gameCount //不更换选择,抽中的概率,大约是1/3
console.log("更换选择,抽中的概率为:"+p1);
console.log("不更换选择,抽中的概率为:"+p2);