其他分享
首页 > 其他分享> > 蒙提霍尔问题

蒙提霍尔问题

作者:互联网

题面

这其实是一个广为人知的问题。假设有这么个游戏,主持人拿了三个盒子,其中有一个有奖,另外两个是空的。你有两次选择机会,在第一次选择后,主持人没有告诉你你选的盒子有没有奖,而是打开了另外两个盒子中的一个,并且告诉你这个盒子没奖。现在轮到你选第二次,你是换盒子还是不换呢?

一般来说有两种回答,第一种观点认为,现在剩下的两个盒子一个有奖一个没奖,概率当然是 $ 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 $ 的表述来讨论一下。

从最直觉的方面来想,主持人告诉了我们一个盒子为空,不妨假设为 2 号盒子,此时 \(C=2\,号盒子为空\),于是有:

\[P(B\cdot C)=\frac{1}{3}\;, P(C)=\frac{2}{3}\;\implies P(B|C)=\frac{1}{2} \]

于是乎,我们得到了得到结论一……没办法,我们只能认为这个假设 \(C\) 有点问题。怎么设置新的事件 \(C\) 呢?在某乎查到的一个观点给了我一些头绪,这个观点认为,如果主持人随机在另外两个盒子中开了一个,刚好是空的,那么结论一就是正确的。而如果主持人知道哪个盒子是空的,只打开这个,那么就是结论二正确。

顺着这个思路,我们考虑新的事件 $ 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} \]

果然,我们再次回到了结论一。

根据上面的讨论,我们不妨大胆猜测,只有 \(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