演算法導論中乙個蒙提霍爾問題

2022-04-06 14:01:41 字數 1411 閱讀 3048

《演算法導論》第二版的附錄c.2概率有這麼一道習題:

乙個監獄看守從三個罪犯中隨機選擇乙個予以釋放,其他兩個將被處死。警衛知道哪個人是否會被釋放,但是不允許給罪犯任何關於其狀態的資訊。讓我們分別稱罪犯為x,y,z。罪犯x私下問警衛y或z哪個會被處死,因為他已經知道他們中至少乙個人會死,警衛不能透露任何關於他本人狀態的資訊。警衛告訴x,y將被處死。x感到很高興,因為他認為他或者z將被釋放,這意味著他被釋放的概率是1/2。他正確嗎?或者他的機會仍是1/3?請解釋。

由於書出這道題的一節講到了概率、條件概率和貝葉斯定理。所以我當時是這麼解題的:

記事件a為:x被釋放;事件b為:y被處死。

在假定x被釋放的情況下,y被處死的條件概率是p(b|a)=1。

那麼根據貝葉斯定理,在已知y被處死的前提下,x被釋放的條件概率就是

p(a|b) = p(a) * p(b|a) / p(b) = (1/3) * 1 / (2/3) = 1/2。         (1)式

直觀的想,在知道了y會死後,x與z各有一半被釋放的機會,答案似乎也應該是1/2的。 但如果換乙個角度考慮:y或者z一定有乙個會死,不管警衛告訴x是哪乙個,都不會改變x會不會被釋放的結果,因而x被釋放的概率都是一樣的,都是1/3。

當時感覺這道題有點糾結了,覺得1/3好像是對的,但1/2又是我用公式算出來的。後來由於找不到答案,我也就不了了之(網上找到的《演算法導論》答案沒有附錄這部分的,有知道的朋友給個鏈結^_^)。今天碰巧在網上看到了乙個講它的帖子,才知道這道題還挺有來頭的。這個問題叫蒙提霍爾問題,又叫三門問題,據說是個"悖論",還迷惑了很多人。不過原題改頭換面了一下,換成了電視節目抽汽車中獎的背景。有興趣的朋友可以看看。

按照網上的說法,問題的答案確實是1/3。我仔細想了想,覺得應該這麼分析:

樣本空間本身有三個基本事件:

e1:x被釋放,y死,  z死;

e2:x死,  y被釋放,z死;

e3:x死,  y死,  z被釋放。

問題出在警衛身上,x問警衛的是哪乙個會死,而無論是哪種基本事件,警衛總能告訴x乙個會死的人。所以用概率算應該這麼去算:

記事件a'為:x被釋放;事件b'為:y和z中某人會死。求的是,在警衛告訴給x,yz兩者中某人會死的情況下,x會被釋放的條件概率

p(a'|b')=p(a') * p(b'|a') / p(b') = 1/3 * 1 / 1 = 1/3.      (2)式

很多人(包括我)之所以得出(1)式的答案,是因為沒分析清問題。如果題目改成:x問警衛,y是被釋放還是被處死,而警衛回答他y會被處死,那麼答案就是(1)式的1/2 了。(注意體會與問出yz兩者中會死的乙個的區別)。

網上改頭換面的三門問題答案的關鍵也在主持人身上,如果他都知道三扇門門後是什麼,總是別有用心的選擇背後是羊的一扇門開啟給**者看,那麼**者就該選擇換門;如果主持人只是隨意的開啟一扇門,而門背後正好是羊,那麼**者可以不換。

思考這個問題得到的體會:

彙編中乙個有趣的問題

int main 問題是下面哪個關係成立 a b c還是 a b c?我們知道區域性變數是存放在棧中的,a先push,然後是b,最後是c。而棧指標sp是從高位址 低位址方向移動的,所以 a b c。如果void f int a int b,int c 這裡就是 a b c,因為引數是逆序進棧的。網上...

彙編中乙個有趣的問題

intmain 問題是下面哪個關係成立 a b c還是 a b c?我們知道區域性變數是存放在棧中的,a先push,然後是b,最後是c。而棧指標sp是從高位址 低位址方向移動的,所以 a b c。如果void f int a int b,int c 這裡就是 a b c,因為引數是逆序進棧的。網上有...

socket開發中乙個小問題

首先宣告,本人是c開發方面的菜鳥,目前正在努力學習中,所以哪位高手看到本文所提的問題很弱智,莫要嘲笑!此文沒有什麼高明的演算法,只作為自己學習過程的乙個筆記,總結經驗,提醒自己而已!最近本人在學習linux下的socket程式設計,要實現乙個檔案傳輸的程式。client端傳送檔案,server端接收...