蒙提霍尔问题:换还是不换,这是一个问题


在这里插入图片描述

前言

去年在一家公司的时候有遇到同样的面试问题,当时回答的是0.5的概率,面试官也没有对我的回答进行讨论,出了公司对这个问题搜索了一下也看的懵懵懂懂,没有继续思考。
今天在B站看一部剧韩剧《D.P:逃兵追缉令》2个多小时的Up主解说,其中结合剧情对蒙提霍尔进行了详细解说,当然,这不是影评,有兴趣的可以去看剧情解说对此问题的解构,形象又生动,讲话又好听。
凡事在生活中出现2次及以上说明这里有事,有感而发。本文仅对蒙提霍尔问题进行一些自己的思考和探讨,祝愿所有小伙伴阅读文章增加小知识的同时,幸运值++。

1.什么是蒙提霍尔问题

蒙提霍尔问题可以用以下几个步骤来描述:
在这里插入图片描述
有三扇门,其中一扇后面有一辆汽车,另外两扇后面都是山羊。
你可以在三扇门中选择一扇。
主持人知道每扇门后面是什么,并且会打开另外一扇没有汽车的门。
主持人问你是否要换到剩下的那扇门。
你做出最终决定,并揭晓结果。
这个问题涉及到两个关键因素:信息和策略。信息指的是你在做决定时所拥有的知识或者线索,策略指的是你在做决定时所采取的行动或者规则。在这个问题中,信息包括以下几点:

三扇门中只有一扇有汽车,其余两扇都是山羊。
主持人知道每扇门后面是什么,并且会故意打开一扇没有汽车的门。
主持人不会改变你最初选择的门,也不会强迫你换门或者不换门。
策略则包括以下两种:

换门:即在主持人打开一扇没有汽车的门后,你选择换到剩下的那扇门。
不换门:即在主持人打开一扇没有汽车的门后,你坚持你最初选择的门。
这个问题的核心就是要比较这两种策略的优劣,也就是要计算在这两种策略下,你赢得汽车的概率分别是多少。直觉上,很多人会认为这两种策略是等价的,因为在主持人打开一扇门后,剩下的两扇门看起来都是随机的,所以它们的概率都是50%。然而,这种直觉其实是错误的,因为它忽略了一个重要的信息:主持人打开的那扇门是有条件的,它不是随机的,而是根据你最初选择的门和每扇门后面的内容来确定的。这个信息其实给了你一个很大的提示,它告诉了你哪扇门更有可能有汽车。如果你能正确地利用这个信息,你就能提高你赢得汽车的概率。

2.为什么是2/3不是1/2

数学方法

要解答蒙提霍尔问题,我们需要用到概率论的一些基本概念和公式。概率论是数学的一个分支,它研究随机现象发生的可能性和规律。概率论中有几个重要的定义:

事件:指一个或者多个结果组成的集合,比如说“掷一枚硬币正面朝上”就是一个事件。
概率:指一个事件发生的可能性,用0到1之间的数值来表示,比如说“掷一枚硬币正面朝上”的概率是0.5。
条件概率:指在已知某个事件发生的情况下,另一个事件发生的概率,用P(A|B)来表示,比如说“已知掷一枚硬币正面朝上,再掷一枚硬币正面朝上”的概率是P(正|正)=0.5。
贝叶斯定理:指一种计算条件概率的公式,用P(A|B)=P(B|A)P(A)/P(B)来表示,比如说“已知掷两枚硬币都正面朝上,第一枚硬币正面朝上”的概率是P(正1|正1正2)=P(正1正2|正1)P(正1)/P(正1正2)=0.5*0.5/0.25=1。
利用这些定义和公式,我们可以对蒙提霍尔问题进行数学化的分析和推导。为了方便起见,我们假设三扇门分别用A、B、C来表示,并且假设汽车在A门后面。我们可以把问题分成以下几个步骤:

你在三扇门中选择一扇。我们假设你选择了A门,并且记这个事件为X。那么,在这个步骤中,你赢得汽车的概率是P(X)=1/3。
主持人在另外两扇门中打开一扇没有汽车的门。我们假设主持人打开了B门,并且记这门的事件为Y。那么,在这个步骤中,你赢得汽车的概率是P(X|Y),也就是在已知主持人打开B门的情况下,你选择A门赢得汽车的概率。根据贝叶斯定理,我们可以计算出这个概率为P(X|Y)=P(Y|X)P(X)/P(Y)=11/3/0.5=2/3。这里,P(Y|X)表示在你选择A门的情况下,主持人打开B门的概率,由于主持人必须打开一扇没有汽车的门,而且不能打开你选择的门,所以这个概率是1。P(Y)表示主持人打开B门的概率,由于主持人可以在C门和B门中任意选择一扇打开,所以这个概率是0.5。
主持人问你是否要换到剩下的那扇门。我们假设你选择换到C门,并且记这个事件为Z。那么,在这个步骤中,你赢得汽车的概率是P(Z|Y),也就是在已知主持人打开B门的情况下,你选择C门赢得汽车的概率。根据贝叶斯定理,我们可以计算出这个概率为P(Z|Y)=P(Y|Z)P(Z)/P(Y)=11/3/0.5=2/3。这里,P(Y|Z)表示在你选择C门的情况下,主持人打开B门的概率,由于主持人必须打开一扇没有汽车的门,而且不能打开你选择的门,所以这个概率是1。P(Z)表示你选择C门的概率,由于你可以在剩下的两扇门中任意选择一扇换,所以这个概率是1/3。

从上面的分析可以看出,在换门策略下,你赢得汽车的概率是2/3。那么,在不换门策略下呢?其实,在不换门策略下,你赢得汽车的概率就是你最初选择正确的概率,也就是1/3。因为不管主持人打开哪扇门,你都不会改变你最初的选择,所以主持人给出的信息对你没有任何帮助。因此,在不换门策略下,你赢得汽车的概率是P(X)=1/3。

综上所述,在蒙提霍尔问题中,换门策略比不换门策略更优,因为它可以使你赢得汽车的概率从1/3提高到2/3。这就是蒙提霍尔问题的数学解答和证明。
这一段是AI写的,数学什么的早都还干净了

看图说话

在这里插入图片描述
注意看换了之后图中有羊的门是打开的

3.一定是2/3不是1/2吗

相信读到这里还有很多小伙伴和我当初一样甚至和我编写这边文章之前时的疑问一样,为什么这个问题的答案一定是2/3不是1/2吗?
我们用程序运行大量的数据验证一下, 概率论基础问题讨论 - 蒙提霍尔问题(三门问题) 文章中用 Python模拟了蒙提霍尔问题并计算了在选择换门策略时获胜的概率,将其转换为 Qt 代码并在 main.cpp 中运行:

#include <QCoreApplication>
#include <QRandomGenerator>
#include <QDebug>

int reselect(int times = 10000) {
    int winTimes = 0;

    for (int i = 0; i < times; i++) {
        QList<int> doors = {1, 2, 3};

        QList<int> cannotOpenDoor;

        int selectDoor = doors[QRandomGenerator::global()->bounded(3)];
        cannotOpenDoor.append(selectDoor);

        int winnerDoor = doors[QRandomGenerator::global()->bounded(3)];
        cannotOpenDoor.append(winnerDoor);

        if (doors.toSet().subtract(cannotOpenDoor.toSet()).size() == 1) {
            winTimes += 1;
        }
    }

    return winTimes;
}

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    double times = 10000;
    int winTimes = reselect(times);
    qDebug() << "Winning probability:" << winTimes / times;
    return 0;
}
//多次运行结果
//Winning probability: 0.6666
//Winning probability: 0.6739
//Winning probability: 0.6663
//Winning probability: 0.661
//Winning probability: 0.6659

这段代码是一个模拟蒙提霍尔问题的函数。它接受一个参数 times,表示要模拟多少次游戏。函数返回值是在选择换门策略时获胜的次数。

在每次循环中,首先创建一个包含三个元素的列表 doors,表示三扇门。然后创建一个空列表 cannotOpenDoor,用来存储不能打开的门。

接下来,使用 QRandomGenerator::global()->bounded(3) 生成一个随机数,用来模拟玩家选择一扇门。将选择的门添加到 cannotOpenDoor 列表中。

然后再次使用 QRandomGenerator::global()->bounded(3) 生成一个随机数,用来模拟汽车所在的门。将汽车所在的门添加到 cannotOpenDoor 列表中。

接下来,使用 doors.toSet().subtract(cannotOpenDoor.toSet()).size() 计算剩余未打开的门的数量。如果剩余未打开的门只有一扇,则表示玩家获胜,将 winTimes 加一。

最后,函数返回获胜次数并计算概率。

4.应用与启示

蒙提霍尔问题不仅是一个有趣的数学谜题,它也有一些实际的意义和应用。它可以帮助我们在生活中遇到类似的情况时,做出更好的决策。比如说,在以下几个场景中,我们都可以用蒙提霍尔问题的思路来指导我们:

在考试中遇到多选题时,如果你已经选好了一个答案,但是不确定是否正确,而且还有时间可以改变你的选择,你应该怎么做呢?如果考试规则允许你知道其他选项中有一个是错误的,并且告诉你哪一个是错误的,那么你就可以把这个情况看作是一个蒙提霍尔问题。在这种情况下,你最好换掉你最初选择的答案,因为这样可以使你答对题目的概率从1/4提高到1/3。如果考试规则不允许你知道其他选项中有一个是错误的,那么你就不能把这个情况看作是一个蒙提霍尔问题。在这种情况下,你最好坚持你最初选择的答案,因为这样可以使你答对题目的概率保持在1/4。

在求职中遇到多个岗位时,如果你已经投递了一份简历,但是不确定是否能够得到面试或者录用,而且还有机会可以投递其他岗位的简历,你应该怎么做呢?如果招聘方告诉你其他岗位中有一个是已经招满或者取消的,并且告诉你哪一个是已经招满或者取消的,那么你就可以把这个情况看作是一个蒙提霍尔问题。在这种情况下,你最好换掉你最初投递的岗位,因为这样可以使你得到面试或者录用的概率从1/3提高到2/3。如果招聘方不告诉你其他岗位中有一个是已经招满或者取消的,那么你就不能把这个情况看作是一个蒙提霍尔问题。在这种情况下,你最好坚持你最初投递的岗位,因为这样可以使你得到面试或者录用的概率保持在1/3。
从以上几个场景中可以看出,在生活中有很多类似于蒙提霍尔问题的情况,它们都涉及到在有限的选择中做出最优的决策。如果我们能够正确地理解和运用蒙提霍尔问题的思路和策略,我们就能够提高我们成功的概率和效率。

除了具有实际意义和应用之外,蒙提霍尔问题还给我们带来了一些启示和教训。它让我们认识到,在面对不确定性时,我们常常会受到直觉和习惯的影响,而忽略了一些重要的信息和逻辑。
它也告诉我们,在做决策时,我们应该尽量利用已有的信息,并且根据概率论和数学分析来指导我们的行动。
正如美国数学家马丁·加德纳所说:“如果你想成为一个聪明的人,请记住这个简单的规则:当你必须做出选择时,请总是改变你最初的选择。”

5.为什么这是一道面试题

  • 考察程序员的逻辑思维和概率统计知识,以及如何用编程语言实现模拟实验或数学证明
  • 用数学和逻辑来分析和证明这个问题的答案,比如用贝叶斯公式和全概率公式,或者用树状图
  • 考察程序员的沟通能力和解释能力,以及如何用清晰和简洁的语言向他人阐述自己的思路和答案
  • 用模拟实验来验证和展示这个问题的答案,比如用Python, C++, Java等编程语言来重复多次游戏,统计换门和不换门的获胜次数
  • 考察程序员的创新能力和解决问题的能力,以及如何用不同的方法或角度来分析和解决一个看似矛盾的问题
  • 用创意和想象力来扩展和变化这个问题,比如把三扇门变成四扇门或更多,把汽车变成其他奖品,把主持人变成其他角色等等

6.还有哪些类似有趣的面试问题

  • 红蓝眼悖论:一个岛上有100个人,其中95个人有蓝眼睛,5个人有红眼睛。他们都信奉一种宗教,规定如果发现自己有红眼睛就必须在当天晚上自杀。他们不能相互交流或者看到自己的眼睛颜色,只能看到别人的眼睛颜色。有一天,一个外来者来到岛上,告诉他们至少有一个人有红眼睛。那么,会发生什么事情呢?
  • 两根火柴:你有两根火柴,每根火柴烧完需要60秒。你怎样用这两根火柴来测量出45秒的时间呢?
  • 三罐饮料:你有三罐饮料,分别是可乐、雪碧和橙汁。每罐饮料都有一个标签,但是标签都被贴错了。你只能打开一罐饮料尝一口,然后把所有的标签都贴正确。你怎么做呢?
  • 三个开关:你在一个房间里面,房间里有三个开关,分别控制另一个房间里的三盏灯。你只能进入另一个房间一次,然后判断出哪个开关对应哪盏灯。你怎么做呢?
  • 两个水桶:你有一个容量为5升的水桶和一个容量为3升的水桶,还有一个无限量的水源。你怎样用这两个水桶来测量出4升的水呢?
  • 100枚硬币:你有100枚硬币,其中有一枚硬币是假币,比真币轻一点。你还有一台天平,可以用来称重硬币。你最少需要称几次才能找出假币呢?
  • 12个球:你有12个球,其中11个球重量相同,有一个球重量不同(可能比较轻或者比较重)。你还有一台天平,可以用来称重球。你最少需要称几次才能找出不同重量的球呢?
  • 10瓶药丸:你有10瓶药丸,每瓶药丸里有若干颗药丸。其中9瓶药丸里的每颗药丸都是1克,但是有一瓶药丸里的每颗药丸都是1.1克。你还有一台电子秤,可以用来称重药丸。你最少需要称几次才能找出重量不同的那瓶药丸呢?
  • 25匹马:你有25匹马和一个赛道,每次最多可以让5匹马同时比赛。假设所有马的速度都是恒定不变的,并且没有计时器或者秒表。你最少需要比赛几次才能找出最快的3匹马呢?
  • 8个球:你有8个球,其中7个球重量相同,有一个球重量不同(比较轻)。你还有一台天平,可以用来称重球。你最少需要称几次才能找出不同重量的球呢?

这个问题又会对你带来哪些思考呢?

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张芬奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值