三门问题,是由美国电视节目《Let's Make a Deal》引发的一个经典概率问题。这题在一些面试的时候会经常被问到,这里详细介绍一下。
问题的陈述:
“假设你在一个游戏节目中,面前有三扇门:一扇门后有一辆车(奖品),另外两扇门后是山羊(没有奖品)。你选择了一扇门(假设是门1),主持人(知道哪扇门有奖品)打开了剩下的两扇门中的一扇(假设是门3),这扇门后是山羊。然后主持人问你,你是否要改变你最初的选择(从门1换到门2)?换门还是不换呢?
这个问题的核心在于:换门后的概率为什么会变大?
直观分析:
数学解释:当第一次选择时,有1/3的概率选中了有奖品的门,有2/3的概率选中了没有奖品的门。如果没选中,即主持人打开门后,你知道剩余的那扇门中一定有奖品,所以换门的概率为2/3。用概率公式进行讲解:
更一般地类比:
总结:直觉上,我们的生活经验可能会让我们怀疑变换选择,但数学概率告诉我们,换门才是更优的选择。在100扇门的问题中,更明显可以看出,主持人帮你去除了错误的选择,极大地提高了换门后中奖的概率。因此,通过换门,中奖的概率变成了2/3,比不换门的1/3大得多。这个方法也称为蒙提霍尔问题,解决此类问题的方法要基于概率分析,而不是凭感觉去做出选择。
import random
def DoorAndPrizeSim(switch, loopNum):
win = 0
for _ in range(loopNum):
prize_door = random.randint(0, 2) # 随机选择奖品所在的门
initial_choice = random.randint(0, 2) # 随机选择初始选择的门
remaining_doors = [door for door in range(3) if door != initial_choice and door != prize_door]
door_to_open = random.choice(remaining_doors) # 打开的门,不是奖品也不是初始选择
if switch:
final_choice = next(door for door in range(3) if door != initial_choice and door != door_to_open)
else:
final_choice = initial_choice
if final_choice == prize_door:
win += 1
return win / loopNum
print("when switching, the winning rate is", DoorAndPrizeSim(True, 1000000))
print("when not switching, the winning rate is", DoorAndPrizeSim(False, 1000000))
when switching, the winning rate is 0.666572
when not switching, the winning rate is 0.334115
通过多次实验统计了在切换选择和不切换选择两种情况下中奖的概率,通过调用DoorAndPrizeSim函数分别模拟切换选择和不切换选择两种情况下的获胜概率,并打印结果。切换选择的获胜率约为66.66%,而不切换选择的获胜率约为33.41%。这个结果展示了切换选择更有可能获胜,这与蒙提霍尔问题中的分析一致。
在现实生活中,蒙提霍尔问题的应用场景可能不如电视节目那样直接,但它们的核心思想是相通的。例如,在商业决策中,当我们初步选择了一个方案后,可能会获得一些新的信息,这时我们需要重新评估我们的选择,就像在蒙提霍尔问题中,主持人打开一扇有山羊的门后,参赛者需要重新考虑是否改变选择。在这种情况下,改变选择可能会增加我们获得更有利结果的概率。
此外,蒙提霍尔问题也可以用来解释医学检测中的一些现象,比如当进行一项不太常见的疾病检测时,如果检测结果为阳性,实际上患病的概率可能并不高,因为大多数情况下,测试结果为阴性。这与蒙提霍尔问题中,即使主持人打开了一扇有山羊的门,参赛者最初选择的门后面有汽车的概率仍然是1/3是类似的。
在心理学研究中,蒙提霍尔问题也被用来探讨人们如何在不完全信息的情况下做出决策,以及为什么人们在面对这类问题时往往会做出非理性的选择。这有助于我们理解人类的认知偏差,并在实际决策中避免这些偏差。
总的来说,蒙提霍尔问题在现实生活中的应用鼓励我们在做决策时考虑所有可用的信息,并勇于根据新信息调整我们的选择,以提高获得最佳结果的可能性。同时,它也提醒我们在评估概率时要注意信息的完整性和准确性。