武辰作品索引

知乎原文

用贝叶斯公式彻底讲明白三门问题

我在七八年前(2018年)在知乎写了几篇关于三门问题的文章:

有趣的数学——违反直觉的囚犯问题和三门问题[终结数学月经题系列2]三门问题还在纠结三门问题?不如用代码暴力验证(附Python代码)

几年过去了,我还是经常从评论区和私信收到很多对于三门问题的疑问。我在想,到底有没有一种彻底的、清楚的、明白的方法,可以让大部分人像明白1+1=2一样完全明白三门问题,我觉得贝叶斯公式可能是最优解。

先做个预警:一个清楚、不引起歧义的方法,可能会比其他简单直观的方法更复杂些,但是为了可以彻底弄懂三门问题,老老实实一步一步推导,多走一些“弯路”是必要的。


三门问题的定义

首先,回顾下三门问题的定义:

有一个电视游戏竞猜节目,主持向竞猜者展示了三扇门。有一扇门之后有礼物,另两扇门之后是空房间。主持人事先知道门后是什么(重要!)。

游戏分为三步:

首先,你选择一扇门;

然后,主持人一定会打开剩余的两扇门中的一扇,展示一个空的房间(重要!)。如果剩下的两扇门都是空的,他会随机选一扇打开,两扇门各有一半的机会。

最后你可以选择是仍然选择你开始选择的那扇门,还是选择去打开另一扇仍然关闭的门。

如果你选择换门,则你获得礼物的概率是多少?


解题第一步:列贝叶斯公式

我们假定三扇门是ABC,你一开始选择的门是C。然后主持人打开了A这扇门,A背后没有礼物。

先回顾贝叶斯公式:

P(A|B)=P(B|A)P(A)P(B)=P(B|A)P(A)P(B|A)P(A)+P(B|¬A)P(¬A)P(A|B) = \frac{P(B|A)P(A)}{P(B)} = \frac{P(B|A)P(A)}{P(B|A)P(A) + P(B|\neg A)P(\neg A)}

记【B_gift】是“B门后面中奖”简写,【openA】是“主持人打开A这扇门”的简写。

我们知道,在一无所知的情况下,

P(A_gift)=P(B_gift)=P(C_gift)=13P(A\_gift)=P(B\_gift)=P(C\_gift)=\frac{1}{3}

我们要的三门问题的答案,是求 P(B_gift|openA)P(B\_gift|openA)

它经过贝叶斯公式,等于

= P(openA|B_gift)P(B_gift)P(openA)\frac{P(openA|B\_gift)P(B\_gift)}{P(openA)} (*)(记住这个公式,后面会引用到)

我们只需要计算这个公式就可以了。我们称这个公式为(*)。

解题第二步:求公式(*)的分子

分子比较简单,

P(B_gift)=13P(B\_gift)=\frac{1}{3}

P(openA|B_gift)P(openA|B\_gift) 是B门后有礼物的条件下,主持人打开A的概率,这个概率一定为1,因为这个时候,主持人不可能打开B这扇门!

因此分子 P(openA|B_gift)P(B_gift)P(openA|B\_gift)P(B\_gift) 为 13\frac{1}{3}

解题第三步:求公式(*)的分母

全概率展开的第一种方法

分母是 P(openA)P(openA) ,主持人打开A这扇门的无条件概率。对其进行全概率展开:

P(openA)P(openA)

$=P(openA|A\_gift)P(A\_gift)\\+P(openA|B\_gift)P(B\_gift)\\+P(openA|C\_gift)P(C\_gift)$

其中,下面三项比较好理解:

P(A_gift)=P(B_gift)=P(C_gift)=13P(A\_gift)=P(B\_gift)=P(C\_gift)=\frac{1}{3}

还有三项不太好理解,我们一个一个计算:

P(openA|A_gift)P(openA|A\_gift) 一定等于0,因为主持人不可能打开有礼物的门

P(openA|B_gift)P(openA|B\_gift) 一定等于1,因为主持人不可能打开B,因此只能打开A

P(openA|C_gift)P(openA|C\_gift) 等于1/2,因为主持人既可能打开A,也可能打开B

注意,同样是打开A门,主持人有时候是随手选的,有时候是没得选。奖品在C门,他开A、开B都行,只有一半的机会开A;奖品在B门,他就只能开A。所以你看到他开的是A,这条消息更支持奖品在B门。

因此 P(openA)=12P(openA)=\frac{1}{2}

至此,就可以计算出公式(*)了,B门后有礼物的概率是 23\frac{2}{3} !

三门问题到这里就得到了解决。

全概率展开的第二种方法

其实,分母还有另一种全概率展开的方法(这种方法更复杂一些,看不懂也没有关系,毕竟上文已经把三门问题解决了):

P(openA)P(openA)

=P(openA|B_gift)P(B_gift)+P(openA|¬B_gift)P(¬B_gift)=P(openA|B\_gift)P(B\_gift)+P(openA|\neg B\_gift)P(\neg B\_gift)

其中, ¬B_gift\neg B\_gift 表示B后面没有礼物。

P(openA|B_gift)P(B_gift)P(openA|B\_gift)P(B\_gift) 这一项已经在上面求得了,是 13\frac{1}{3}

P(¬B_gift)P(\neg B\_gift) 显然是 23\frac{2}{3}

P(openA|¬B_gift)P(openA|\neg B\_gift) 更复杂一些,我们再进行一次全概率展开:

$P(openA|\neg B\_gift)\\=P(openA|A\_gift,\neg B\_gift)P(A\_gift|\neg B\_gift)\\+P(openA|C\_gift,\neg B\_gift)P(C\_gift|\neg B\_gift)$

其中, P(openA|A_gift,¬B_gift)=0P(openA|A\_gift,\neg B\_gift)=0

P(openA|C_gift,¬B_gift)=12P(openA|C\_gift,\neg B\_gift)=\frac{1}{2}

P(C_gift|¬B_gift)=12P(C\_gift|\neg B\_gift)=\frac{1}{2}

因此

$P(openA|\neg B\_gift)\\=\frac{1}{4}$

所以

P(openA)=12P(openA)=\frac{1}{2}

再问一句:如果主持人也不知道奖品在哪呢?和前面一样,你一开始选的是C门。这次,主持人在A和B里随机挑了一扇,碰巧打开的是A,而且A门后是空的。这时候,坚持选C和换到B,中奖概率都是一半。

因为奖品不论在B还是C,他碰巧打开空的A门的概率都是一半。你看到的都是“A门是空的”,可一次是主持人知道奖品在哪、特意避开了它,一次是他碰巧没开到。门开得一样,消息来得不一样。

总结

我用了两种方法来计算三门问题的答案,虽然麻烦,但是每一步之间都有逻辑支撑,不会云里雾里。希望对大家彻底理解三门问题有帮助。



2026年10月30日更新:我的第一本书终于出版了。

从 2017 年在知乎写概率回答到现在,总有人问“有没有系统一点的教材”。现在,我的第一本书《大白话概率论:从数学直觉到AI视野》终于由清华大学出版社出版了。这半年有不少朋友一直在等,一直在催更,非常感谢大家的耐心和支持~

这是一本适合自学的概率论与数理统计教材,700多页,延续了我写回答时的讲法:用大白话,讲得很详细,把公式背后的道理讲清楚,也把各个知识点之间的联系串起来。

书中还结合了交叉熵、KL散度等AI相关内容,并设有“AI视野”和“Python实验室”。此外,也收录了2024—2026年考研数学一、数学三的部分概率论真题,以及大厂算法岗面试概率题的详细解答。

如果你喜欢这篇回答的讲法,也想系统地学一遍概率论,可以看看这本书。 下方放了购书卡片,感谢大家支持~