在蒙提霍尔问题中,主持人事先知道汽车在哪一个门后面,而且他必定会选择没有汽车的那扇门。若是咱们稍稍改变一下前提,主持人事先也不知道汽车在哪一个门后面,他只是随便打开2扇门中的一扇,而且刚好这扇门后面是山羊,那么此时的状况又是怎样的呢?
若是你看了上一篇文章,你可能会不假思索地认为二者是彻底同样的,由于反正都是主持人帮咱们排除掉了一只山羊嘛!
没错,在某一次特定的选择中,这两种状况并无不一样,但实际上两种前提隐含的样本数倒是不一样的。
如今咱们假设这个节目在播出前录制了一万次。
第一种状况,主持人事先知道山羊在哪扇门中,那么若是不出意外的话,这一万次录制都可以顺利完成,做为导演,咱们只需从中选择某一次便可。所以样本数为1万。
但若是主持人事先并不知道山羊在哪一个门中的话,那么一万次录制中将大约有3300次是失败的,由于主持人有1/3的可能会选中汽车,而这与节目的要求是不符的。所以最终只有大约6700次录制是有效的。也就是说,这种状况下的样本数变了,变为了原来的2/3。
在上一篇文章中,咱们有一个重要的结论:当选择了A门以后,A门的中奖概率将再也不改变。注意这一结论是相对于原样本数的概率。也就是说咱们选择A门的中奖概率是1/3是相对于1万次录制来讲的。当咱们把主持人选到山羊的那大约6700次录制单独拿出来计算A门的中奖概率时,此时A门的新的中奖概率将变为:
1/3 ÷ 2/3 = 1/2
仍然能够用上一篇文章的方法来考虑这个问题,只是可能的状况由3种变成了6种:
(1) 参赛者选择山羊A,主持人选择山羊B
(2) 参赛者选择山羊A,主持人选择汽车
(3) 参赛者选择山羊B,主持人选择山羊A
(4) 参赛者选择山羊B,主持人选择汽车
(5) 参赛者选择汽车,主持人选择山羊A
(6) 参赛者选择汽车,主持人选择山羊B
6种状况的概率都是1/6,可是2和4两种状况是无效的,所以不管是否变动选择,都各有一半的概率会中奖。
这其实是另外一种人为干预的结果,咱们从结果中剔除那些不符合条件的部分从而让事物的发展符合咱们的预期。这就像人类对物种的人工选择行为,遗传的变异概率在人工的选择过程当中被放大了,从而让繁殖出的后代更加符合咱们的预期。
上代码:
int totalTimes = 1000000;
int bingo = 0;
boolean[] boxes;
int actuallyTotalTimes = 0;
for (int i = 0; i < totalTimes; i++) { // loop 1 million times
boxes = new boolean[] {false, false, false};
boxes[random(3)] = true;
int myChoice = random(3);
int hostChoice = random(3, myChoice);
if (boxes[hostChoice]) {
continue;
}
actuallyTotalTimes++;
if (!boxes[myChoice]) {
bingo++;
}
}
return (double ) bingo * 100 / actuallyTotalTimes;
主持人再也不是只选择山羊,而是在剩下的2扇门中随机选择。actuallyTotalTimes是有效的样本数量,仅在主持人没有选中汽车时才会增长,所以有效的样本数量仅为总样本数的2/3。dom