三门两羊问题 - 蒙提霍尔问题

你可能在社交媒体或者数学爱好者的讨论中听说过"三门问题",个人觉得应该简单一点理解这个问题,不用看过多的公式。

什么是"三门问题"?

"三门问题"源自美国电视游戏节目《Let's Make a Deal》。问题描述如下:

  1. 你面前有三扇门,其中一扇门后面有一辆汽车,另外两扇门后面是山羊。
  2. 你先选择一扇门(假设你选了门 A)。
  3. 主持人(知道门后隐藏的内容)会打开另一扇门(假设是门 B),露出一只山羊。
  4. 此时,主持人问你:你要保持原来的选择(门 A)吗?还是换到剩下的门(门 C)?

问题来了:换门和不换门哪个更有可能赢?

直觉 vs. 数学

直觉上,很多人认为剩下两扇门各有 50% 的概率,换不换都样。但概率论告诉我们,这种直觉是错的。

如果不换门

如果不换门,主持人的变动不会影响选中汽车的概率,即 1/3,即1/总门数。

如果换门

关键在于将测算拆分为两个步骤:

1️⃣ 主持人打开门以前

  • 初始选择汽车的概率:1/3
  • 初始选择山羊的概率:2/3

2️⃣ 主持人打开门以后

相当于主持人会帮你排除一个错误答案,现在就只有两个答案

  • 如果你最初选中汽车(1/3 概率),那不管主持人排除哪个答案,只要换门,都只会选中🐑,不会选中汽车,那选中汽车的概率就是0
  • 如果你最初选中山羊(2/3 概率),主持人会打开另一扇山羊门,只要换门,必定选中🚗,此时选中汽车的概率就是1

所以换门以后测算的概率应

P(换门获胜)=P(初始选山羊)×P(换门获胜∣初始选山羊)+P(初始选汽车)×P(换门获胜∣初始选汽车)P(\text{换门获胜}) = P(\text{初始选山羊}) \times P(\text{换门获胜} \mid \text{初始选山羊}) + P(\text{初始选汽车}) \times P(\text{换门获胜} \mid \text{初始选汽车})P(换门获胜)=P(初始选山羊)×P(换门获胜∣初始选山羊)+P(初始选汽车)×P(换门获胜∣初始选汽车)

代入数值:
P(换门获胜)=23×1+13×0=23 P(\text{换门获胜}) = \frac{2}{3} \times 1 + \frac{1}{3} \times 0 = \frac{2}{3} P(换门获胜)=32×1+31×0=32

所以:

策略 赢的概率
不换门 1/3
换门 2/3

为什么直觉会错?

直觉认为"剩两扇门,各 50%"是错的,因为忽略了主持人的信息偏向性:

  • 主持人总是选择一扇有山羊的门打开,这并不是随机事件
  • 初始选择中未中汽车的概率较大(2/3),主持人的操作实际上增加了剩下那扇门的价值

所以换门策略选中的概率计算公式为:
P(换门获胜)=23×1+13×0=23 P(\text{换门获胜}) = \frac{2}{3} \times 1 + \frac{1}{3} \times 0 = \frac{2}{3} P(换门获胜)=32×1+31×0=32

同样如果,门数为doordoordoor,公式也可以拓展为:
P(换门获胜)=door−1door×1door−2+1door×0 P(\text{换门获胜}) = \frac{door - 1}{door} \times \frac{1}{door -2} + \frac{1}{door} \times 0 P(换门获胜)=doordoor−1×door−21+door1×0

python代码测算,含循环测试和公式直接输出结果的代码

python 复制代码
import random


def fun(switch: bool, door: int, times=1000000, log=False):
    """
    switch: boolean, 是否需要更换门
    door: 门的个数
    times: 测试次数
    log: 是否打印每一轮的日志
    """
    correct, wrong = 0, 0
    for i in range(times):
        answer = random.randint(0, door - 1)
        options = set(range(door))
        guess = random.randint(0, door - 1)

        info = f'\t[info_{i}] 答案是{answer},猜的是{guess}。'
        if switch:
            val = random.choice(list(options.difference({guess, answer})))
            guess = random.choice(list(options.difference({val, guess})))
            info += f'主持人打开{val}, 猜测修改为{guess}。'

        if answer == guess:
            correct += 1
            info += '猜测正确'
        else:
            wrong += 1
            info += '猜测错误'
        if log:
            print(info)
    print(f"共{door}门, {'' if switch else '不'}换门, 统计正确率为{(correct / (correct + wrong)):.4%}", )


if __name__ == '__main__':
    door = 3

    # 先测一个转换的
    fun(False, door=door)
    # 再测一个不转换的
    fun(True, door=door)
    # 使用统计概率直接计算
    print(f"\n直接使用统计概率计算:\n"
          f"\t不转换的计算公式: 1 / {door} = {1 / door :.4%}\n"
          f"\t需转换的计算公式: (1 / {door}) * 0  + ({door - 1} / {door}) * (1 / {door - 2}) = {((door - 1) / door) * (1 / (door - 2)) :.4%}")

实际启示

  • 概率和直觉常常相反:遇到概率问题时,不要单靠感觉,要分析整个事件过程
  • 信息的来源与偏向:主持人的行为提供了额外信息,这是经典条件概率案例
  • 生活中的换门策略:遇到类似"选择与信息更新"的情境,换门或调整决策往往是更优解

总结

"三门问题"不仅是一个有趣的概率谜题,它还教会我们如何用逻辑和数学分析复杂决策。拆分测算步骤、结合信息更新的思路,是理解概率和理性决策的关键。

相关推荐
想会飞的蒲公英5 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel6 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记6 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名6 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code7 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook7 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
我的xiaodoujiao9 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_4080996710 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing10 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉11 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda