反直覺的三門問題


三門問題又被稱為蒙提霍爾問題,是一個很反直覺的問題,出自美國的一個電視游戲節目。

題目非常簡單:參賽者面前有三扇門,其中一扇門后面有一輛小汽車,另外兩扇門后面都是山羊,如果參賽者選中有汽車的那扇門,就可以把汽車開回家。

當參賽者選擇了其中一扇門后,此時主持人打開剩余兩扇門其中的一扇,里面是一只山羊,那么現在主持人給參賽者一次重新選擇的機會,參賽者應不應該換門去選擇另外一扇門?

我初次看這個問題時覺得當主持人打開一扇門后,那么小汽車在剩余兩個門內的概率必然都是 50%,那么換不換門其實意義不大,因為概率都一樣,但真的是這樣嗎?

正確答案卻是非常反直覺的,如果參賽者堅持原來的選擇,那么選中小汽車的概率為 1/3,如果換門的話,選中小汽車的概率為 2/3。

直觀分析

首先我們要明確一點,主持人是知道小汽車在哪個門后面的,這個是解題的前提,否則下面的分析毫無意義。

下面我們來分析一下:當參賽者第一次選擇時,任何一扇門有小汽車的概率都是 1/3,所以參賽者所選門后面有小汽車的概率是 1/3,參賽者未選擇的兩扇門后面有小汽車的概率為 2/3。

當主持人打開剩余兩扇門其中的一扇有山羊的門,那 2/3 的概率就轉移到了剩余兩扇門中未被打開的那扇門中,而此刻參賽者最初選擇的門仍然只有 1/3 的概率選中小汽車,所以說此時換門是最佳的選擇。

圖示法

如果上述直觀的分析過程不太好理解的話,那么我們通過畫圖的方式,可以很直觀的看到每種選擇的概率。

假設三個門分別為A,B,C,參賽者選擇了A門,如圖所示

可以很很清楚的看到

如果不換門,選中的概率為 1/3 * 1/2 + 1/3 * 1/2 + 0 + 0 = 1/3

如果換門,選中的概率為 0 + 0 + 1/3 * 1+ 1/3 * 1 = 2/3

極端假設

如果此時你還是不理解的話,我們可以做個極端的假設。

假如有一萬扇門,9999 扇門背后都是羊,只有一扇門背后是小汽車。在你選擇了一扇門后,此時主持人打開剩余的 9999 扇門中的 9998 扇門,並且背后都是羊,那么此時讓你重新選擇,你換不換門,我相信此時大多數人哪怕憑直覺也會覺得,換門后選中小汽車的概率更大。

排除法

還有個思路,你可以理解三個答案中只有一個是正確答案,你隨機選擇了一個,然后主持人在剩余的兩個答案中排除掉了錯誤的一個,這個時候給你一次重新選擇的機會你確定不換嗎?

用數據說話

實踐是檢驗真理的唯一標准,我寫了個簡單的程序,對這個游戲模擬了 100 萬次。

import random

# 模擬測試的次數
simulationCount = 1000000
# 第一次選中小汽車的次數
firstSelectedSuccessSum = 0
# 第二次重新選擇選中小汽車的次數
secondSelectedSuccessSum = 0
for num in range(simulationCount):
    # 初始化所有門
    doors = list(range(1,4))
    # 隨機生成小汽車的門位置
    carDoor = random.randint(1,3)
    # 參賽者隨機選中一個
    firstSelectedDoor = random.randint(1,3)
    # 主持人在剩下的兩個里面隨機選擇一個
    doors.remove(firstSelectedDoor)
    presenterSelectedDoor = doors[random.randint(0,1)]
    # 主持人選擇后剩下的一個門,也就是選手第二次選擇的門
    doors.remove(presenterSelectedDoor)
    secondSelectedDoor = doors[0]
    # 因為主持人不能選擇有小汽車的門
    # 所以如果上面主持人隨機選擇的是有小汽車的門,則應該重新選擇另一個門
    if carDoor == presenterSelectedDoor:
        secondSelectedDoor = presenterSelectedDoor
    # 如果第一次選中有小汽車的門,累計計數
    if carDoor == firstSelectedDoor:
        firstSelectedSuccessSum = firstSelectedSuccessSum + 1
    # 如果第二次重新選擇選中有小汽車的門,累計計數
    elif carDoor == secondSelectedDoor:
        secondSelectedSuccessSum = secondSelectedSuccessSum + 1
# 輸出測試結果
print ('模擬測試 %s 次'%simulationCount)
print ('不換門選中小汽車的次數為 {} 次,概率為:{:.2%}'.format(firstSelectedSuccessSum, firstSelectedSuccessSum/simulationCount))
print ('換門后選中小汽車的次數為 {} 次,概率為:{:.2%}'.format(secondSelectedSuccessSum, secondSelectedSuccessSum/simulationCount))

執行結果為

模擬測試 1000000 次
不換門選中小汽車的次數為 333398 次,概率為:33.34%
換門后選中小汽車的次數為 666602 次,概率為:66.66%

結果顯而易見,和上述分析的結果一樣,堅持最初的選擇,選中小汽車概率 1/3,換門后選中小汽車概率 2/3。

如果主持人是隨機選的門呢

上面已經說過,主持人是知道小汽車在哪個門后面的,所以主持人可以保證自己打開的一定是后面有山羊的門。

那么肯定有人會問,如果主持人不知道小汽車在哪個門后面,隨便選了一個,並且恰好選擇了有羊的門,那么此時參賽者換門和不換門選中小汽車的概率各有多大?

這種情況就要分兩個維度來看了

維度一:如果從主持人已經打開了一扇有羊的門這個既定事件往后看,那么此時換門和不換門選中小汽車的概率均為 50%。

維度二:如果從主持人打開門之前開始往后看,那么換門和不換門選中小汽車的概率均為 1/3,因為還有三分之一的概率是主持人打開了有小汽車的門,在這種情況下,游戲直接結束了。

總結

三門問題看似有點違背常理,但只要經過認真思考后,其實也不難理解。

因為最后參賽者重新選門的事件是受前面主持人開門事件所影響的,正是因為主持人是知道小汽車在哪個門后面的,所以主持人在打開門的時候,會刻意避開有小汽車的門,也就造成了后面換門和不換門選擇小汽車的概率不均等。明白了這一點,我相信你對換門后選中小汽車的概率為 2/3 也就不會有異議了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM