反直覺的三門問題

2022-04-03 08:48:16 字數 3652 閱讀 9156

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

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

當參賽者選擇了其中一扇門後,此時主持人開啟剩餘兩扇門其中的一扇,裡面是乙隻山羊,那麼現在主持人給參賽者一次重新選擇的機會,參賽者應不應該換門去選擇另外一扇門?

我初次看這個問題時覺得當主持人開啟一扇門後,那麼小汽車在剩餘兩個門內的概率必然都是 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 ('不換門選中小汽車的次數為 {} 次,概率為:'.format(firstselectedsuccesssum, firstselectedsuccesssum/simulationcount))

print ('換門後選中小汽車的次數為 {} 次,概率為:'.format(secondselectedsuccesssum, secondselectedsuccesssum/simulationcount))

執行結果為

模擬測試 1000000 次

不換門選中小汽車的次數為 333398 次,概率為:33.34%

換門後選中小汽車的次數為 666602 次,概率為:66.66%

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

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

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

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

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

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

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

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

matlab三門問題

2019年8月5號 概率論的三羊問題 n代表隨機次數 n 100000 不改變注意 nochange 0 改變注意 change 0 for i 1 n 隨機生成乙個正數x表示車可能出現在第x扇門後 x randi 1,3 1 隨機生成乙個正數y表示自己選的門 y randi 1,3 1 如果剛好選...

三門問題的誤區

三門問題 montyhall problem 亦稱為 蒙提霍爾問題 蒙特霍問題或蒙提霍爾悖論,大致出自美國的電視遊戲節目 let s make a deal 問題名字來自該節目的主持人蒙提 霍爾 monty hall 參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車,選中後面有車的那扇門可贏得該...

三門問題的模擬

三門問題來自於乙個節目 參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車或者是獎品,選中後面有車的那扇門就可以贏得該汽車或獎品,而另外兩扇門後面則各藏有乙隻山羊或者是後面沒有任何東西。當參賽者選定了一扇門,但未去開啟它的時候,知道門後情形的節目主持人會開啟剩下兩扇門的其中一扇,露出其中乙隻山羊。...