上一篇文章分析了经典的蒙提霍尔问题,最后的结论是更换选择后有2/3的机会中奖。蒙提霍尔问题到此已经完结,但事实却并非如此。
在蒙提霍尔问题中,主持人事先知道汽车在哪个门后面,并且他一定会选择没有汽车的那扇门。如果我们稍稍改变一下前提,主持人事先也不知道汽车在哪个门后面,他只是随便打开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。
完整代码下载(包括上一篇的2段代码): http://pan.baidu.com/s/1i3niOvF