问题如下:
1990 年,美国马里兰州的 Craig Whitaker 给 Parade 杂志的「问问玛丽莲」( Ask Marilyn )专栏写了一封信,向这个专栏的主持人玛丽莲·沃斯·莎凡特( Marilyn vos Savant )提出了一个概率问题:「假设你正在参加一个电视节目。舞台上有三扇门,其中一扇门的后面是汽车,另外两扇门的后面是山羊。你当然是想选中后面有汽车的那扇门。你随便选择了一扇门,比如说 1 号门。这时,主持人打开了另一扇门,比如说 3 号门,让你看到了 3 号门的后面是一只山羊(主持人知道每扇门后面都是什么)。现在,主持人给你一次重新选择的机会。你是否应该换选 2 号门呢?」
玛丽莲是门萨国际的会员,她拥有高达 228 的智商,曾是吉尼斯世界纪录记载的「智商最高的人」。在 Parade 的专栏里,玛丽莲回答过各式各样的谜题,几乎从未出错,这次也不例外。她的回答非常明确:应该换。只需要注意到下面这个事实:刚开始你选中的是汽车,换了后你就会获得山羊;刚开始你选中的是山羊,换了后你就会获得汽车。由于你刚开始选中汽车的概率只有 1/3,选中山羊的概率有 2/3,因此换选 2 号门对你更有利一些。
上面的解答是完全正确的。然而,很多人会觉得,游戏者最终面对的不过是一个二选一的难题,换与不换似乎应该是一样的呀?于是,这个问题毫无疑问地成为了史上争论最多的数学问题之一。上万名读者向 Parade 杂志写信指出玛丽莲的「错误」,其中包括近千名拥有 PhD 学位的读者。据说,匈牙利数学家保罗·埃尔德什(Paul Erdős)刚开始也拒不接受玛丽莲给出的答案,直到亲眼看见计算机模拟出来的结果,才慢慢开始改变自己的看法。
解决问题的代码:
import random
x = [0, 1, 0] # 0:未中奖 1:奖品
count1 = 0
count2 = 0
epoch = 100000
if __name__ == '__main__':
for _ in range(epoch):
random.shuffle(x)
c = random.choice([1, 2, 3])
print("选择第{}个。".format(c))
# 随机揭示一个不为1的位置
choice1 = [1, 2, 3]
choice1.remove(x.index(1)+1) # 移除正确选项
if c in choice1: choice1.remove(c) # 移除已选择的选项
expose = random.choice(choice1)
print("揭示{}".format(expose))
# 重新开始选择
choice2 = [1, 2, 3]
choice2.remove(c) # 最开始的选择
choice2.remove(expose) # 排除的选择
new_choice = choice2[0]
if x[c-1] == 1:
count1 += 1
if x[new_choice-1] == 1: # 如果新的选择选择正确
count2 += 1
result1 = count1/epoch
result2 = count2/epoch
print("不更换选择,中将的概率{}".format(result1))
print("更换选择,中将的概率{}".format(result2))
你要问我结果? 自己试一试吧~
换种方法理解一下这个问题:
首先自定义下规则:
① 第一次进行随机选择。
② 主持人随机揭示一个错误的答案。
③ 必须更换选择。
情况一:假设第一次你选择了C(其实是错误答案),主持人只能在A、B中选择一个揭示,而由于A、B中只有一个错误答案,所以主持人只能选择那个错误的答案(假设这个答案为A),由于规则限制你必须更换选择,那么你就选择了正确的结果。
情况二:假设第一次你选择了C(其实是正确答案),那么主持人可以在A、B中选择任何一个,此时在你更换选择后,你都不会中奖。
所以就是说,第一次选择错误你会中奖,第一次选择争取你不会中奖。
而第一次选择正确的概率是1/3,选择错误的概率是2/3。
所以,只要我们更换选择,就有2/3的概率中奖。
更换选择能提高中奖概率的原因:当你第一次选择错误的时候(2/3的概率),主持人会帮你排除了错误的结果,这时你更换结果就一定是正确的。当你第一次选择正确的时候(1/3的概率),主持人可以随便选择一个结果,这时你更换选择就是错误的。