蒙提霍尔问题
作者:互联网
题面
这其实是一个广为人知的问题。假设有这么个游戏,主持人拿了三个盒子,其中有一个有奖,另外两个是空的。你有两次选择机会,在第一次选择后,主持人没有告诉你你选的盒子有没有奖,而是打开了另外两个盒子中的一个,并且告诉你这个盒子没奖。现在轮到你选第二次,你是换盒子还是不换呢?
一般来说有两种回答,第一种观点认为,现在剩下的两个盒子一个有奖一个没奖,概率当然是 $ 1\over2 $ ,换不换都一样。另一种结论则是,目前选择的盒子有奖的概率为 $ 1\over 3 $ ,没奖概率是 $ 2\over 3 $ ,当然是换嘛。
在高中学习过条件概率的 $ hmj $ 立刻觉得第二种观点有问题!明明都已经告诉一个盒子是空的了,这条件概率能一点不变?然而概统老师无情地告诉我们,第二种观点是对的。于是 $ hmj $ 苦思冥想了半节概统课,最终直到晚课通核摸鱼时才有点眉目。
这到底是怎么会事呢?
既然高中贫乏的概率论知识不管用了,我们还是使用严谨的式子先来表示下问题。
我们给盒子编号为 1、2、3,并且假设我们选的是 1 号:
\[设事件\; A=中奖、B=1\,号盒子有奖、C=主持人告诉我们的新信息\\ 那么在不换盒子时:\quad\begin{align*} P(A|C)& =P((A\cdot B) |C)+P((A\cdot\bar B)|C)\\ & = P((A|B)|C)\cdot P(B|C)+P((A|\bar B)|C)\cdot P(\bar B|C)\\ & = 1\cdot P(B|C)+0\cdot P(\bar B|C)\\ & = P(B|C) \end{align*} \]\[换盒子时:\quad\begin{align*} P(A|C)& =P((A\cdot B) |C)+P((A\cdot\bar B)|C)\\ & =P(\bar B|C) \end{align*} \]可以看到两个值都取决于条件概率 $ P(B|C) $ 。而这个概率又和我们的 $ C $ 事件有关,我们就从不同的 $ C $ 的表述来讨论一下。
- \(i\)
从最直觉的方面来想,主持人告诉了我们一个盒子为空,不妨假设为 2 号盒子,此时 \(C=2\,号盒子为空\),于是有:
\[P(B\cdot C)=\frac{1}{3}\;, P(C)=\frac{2}{3}\;\implies P(B|C)=\frac{1}{2} \]于是乎,我们得到了得到结论一……没办法,我们只能认为这个假设 \(C\) 有点问题。怎么设置新的事件 \(C\) 呢?在某乎查到的一个观点给了我一些头绪,这个观点认为,如果主持人随机在另外两个盒子中开了一个,刚好是空的,那么结论一就是正确的。而如果主持人知道哪个盒子是空的,只打开这个,那么就是结论二正确。
- $ ii $
顺着这个思路,我们考虑新的事件 $ C $ 。这回假设事件 $ C=主持人在,2、3,盒子里随机选取了一个,刚好没有奖 $ ,于是有:
\[设\,D=2\,号盒有奖\\ P(B\cdot C)=\frac{1}{3}\\ \begin{align*} P(C) & =P(C\cdot D)+P(C\cdot \bar D\cdot\bar B)+P(C\cdot B)\\ & =P(C|D)\cdot P(D)+P(C|\bar D\cdot\bar B)\cdot P(\bar D\cdot\bar B)+\frac{1}{3} \\ & =\frac{2}{3} \end{align*}\\ \therefore P(B|C)=\frac{1}{2} \]果然,我们再次回到了结论一。
- $ iii $
根据上面的讨论,我们不妨大胆猜测,只有 \(P(C)=1\) 时才能达到结论二。而上述观点的第二不妨刚好是这个情况。
在这种情况下,主持人知道哪个盒子是空的,也就是只打开空盒子。对于 \(C\) 更加贴切的表述应该是“打开了一个空的盒子”,而不是“打开的盒子是空的”。即 $ C=从剩下两个盒子中打开了一个空盒子 $ ,此时 $ P(C)=1 $ ,因为剩下的两个盒子至少有一个没奖!
结论
至此,我们得到一个可能的结论,将两种不同的结论归结于主持人的两种行为方式。但是我们仍然很难感性理解这个结论,我们可以对这个结论提出明显疑问:其一,为何主持人主观的行为方式会影响这个游戏;其二,作为游戏的参与者,我们只知道有一个盒子被打开了,为何会有两种结果。
对于第一点,我们要明白,概率永远是基于现有信息,而不是基于具体事物。主持人的行为方式恰恰不是一个简单的主观事件,而是影响关键事件概率的要点。如果说我们不是参加这个游戏的人,只是路过看到两个盒子中的一个有奖,那么概率当然是 \(1\over 2\) 。第二点则是这个问题违反直觉的原因,从参与者来看,我们很容易忽略主持人是知道盒子信息的,从而漏掉了一个条件。殊不知加上这个条件后,”有一个盒子被打开“完全变成了另一个事件。
终于,我们有了一个直觉和理论上都能满足需求的结论。最后不妨再用实验验证一下。
点击打开折叠的代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int pow(int x, int p) {
int ret = 1;
while (p) {
if (p & 1 == 1) ret *= x;
x *= x;
p >>= 1;
}
return ret;
}
//重复试验1000000次
int t = 1000000;
//使用二进制表示是否有奖,如cha=1代表最初选择1号盒子
int state, cha = 1, chb;
//ans1/ans2表示奖在我们第一次选中的盒子的次数
//其中 ans1是主持人只选空盒,ans2随机选
//oth表示主持人随机选一个盒子,选中有奖的盒子的次数,
//用以调整随机选取情况的基数
int ans1, ans2, oth;
int main(int argc, char* argv[]) {
srand((unsigned)time(NULL));
while (t--) {
state = pow(2, rand() % 3);
chb = pow(2, rand() % 2 + 1);
if (chb & state) oth++;
else if(cha & state) ans2++;
if (cha & state) ans1++;
}
printf("%lf %lf", 1.0 * ans1 / 1000000, 1.0 * ans2 / (1000000 - oth));
//0.333409 0.500310
return 0;
}
(我觉得这种话里有话的题目……属实害人)
标签:bar,盒子,cdot,主持人,frac,问题,霍尔,int,蒙提 来源: https://www.cnblogs.com/thornblog/p/15961253.html