在别处看到的一个有意思的问题,大致意思是这样的:
有三个不透明盒子,1、2、3,其中一个盒子装有一百美元,另两个是空的。假设你选择了1号盒子,然后通晓一切的上帝告诉你3号盒子是空的。那么现在,你会改变你的选择吗?
上网一搜,原来这是著名的Monty Hall problem,也称三门问题。我研究了好半天,一直没法没转化成概率模型,因此很难用科学的方法得出结论。直觉告诉我,选1选2的概率都是50%,然而维基了一下后,发现掉入陷阱中去了。既然这个问题这么有趣,那么不妨在这里做个梳理。
方法一:直觉上的方法
上帝的作用是帮你排除掉一个选项,本来盒2或3里有美元的概率为2/3,现在3里没有,所以盒2里有美元的概率为2/3。
方法二:更加巧妙的直觉
只需理解一下两件事情的等价关系:
if 换了且最后拿到美元,then 盒1里没有美元。
if 盒1里没有美元, then 换了且最后拿到美元。
根据等价性,P(换了且最后拿到美元)=P(盒1里没有美元)=2/3
方法三:数学方法
先用我所能接受的最正统的方法来做这道题:
设X1为事件“选择盒1”,Y3为事件“上帝选择盒3”,Hi表示事件“盒i里有一百美元”。
那么P(Hi)=P( Hi | X1)=1/3,这是显然的。
那么问题就转化为求P( H1 | X1, Y3) = ?
很容易想到Bayes法则,即:
那么现在问题就是求得P( Y3 | X1, Hi)。这也是问题的核心所在。
- P( Y3 | X1, H2)=1
- P( Y3 | X1, H3)=0
- P( Y3 | X1, H1)=1/2
一旦有了P( Y3 | X1, Hi),答案也有了:
P( H1 | X1, Y3) = 1/3,P( H2 | X1, Y3) = 2/3
换可以有更大机会拿到美元。
方法四:编程( R ):
仿照知乎上一位大神运用C语言的做法,我用R跑了一遍。代码和结果如下:
x<-sample(1:3, 10000, replace=TRUE) #x表示10000次模拟中,美元藏在哪个盒子里
for(i in 1:10000)
{
if (x[i]==1)
open[i] <- sample(2:3, 1) #当1号盒子里有美元,上帝随机打开2或3号盒子
else if(x[i]==2)#当2号盒子有美元,上帝打开3号盒子
open[i]<-3
else
open[i]<-2#当3号盒子有美元,上帝打开2号盒子
}
table(x)[["1"]]/table(open)[["3"]]#求出当open3号盒子情况下,不换且赢的概率
结果为:
[1] 0.674777
这种方法其实本质上没什么优越性,只是看着bigger很高。
如此一来,我就介绍完我知识范围内的这几种做法了。