上一篇文章分析了經典的蒙提霍爾問題,最后的結論是更換選擇后有2/3的機會中獎。蒙提霍爾問題到此已經完結,但事實卻并非如此。
在蒙提霍爾問題中,主持人事先知道汽車在哪個門后面,并且他一定會選擇沒有汽車的那扇門。如果我們稍稍改變一下前提,主持人事先也不知道汽車在哪個門后面,他只是隨便打開2扇門中的一扇,并且恰好這扇門后面是山羊,那么此時的情況又是怎樣的呢?
如果你看了上一篇文章,你可能會不假思索地認為兩者是完全一樣的,因為反正都是主持人幫我們排除掉了一只山羊嘛!
沒錯,在某一次特定的選擇中,這兩種情況并沒有不同,但實際上兩種前提隱含的樣本數卻是不同的。
現在我們假設這個節目在播出前錄制了一萬次。
第一種情況,主持人事先知道山羊在哪扇門中,那么如果不出意外的話,這一萬次錄制都能夠順利完成,作為導演,我們只需從中選擇某一次即可。因此樣本數為1萬。
但如果主持人事先并不知道山羊在哪個門中的話,那么一萬次錄制中將大約有3300次是失敗的,因為主持人有1/3的可能會選中汽車,而這與節目的要求是不符的。因此最終只有大約6700次錄制是有效的。也就是說,這種情況下的樣本數變了,變為了原來的2/3。
在上一篇文章中,我們有一個重要的結論:當選擇了A門之后,A門的中獎幾率將不再改變。注意這一結論是相對于原樣本數的幾率。也就是說我們選擇A門的中獎幾率是1/3是相對于1萬次錄制來說的。當我們把主持人選到山羊的那大約6700次錄制單獨拿出來計算A門的中獎幾率時,此時A門的新的中獎幾率將變為:
1/3 ÷ 2/3 = 1/2
仍然可以用上一篇文章的方法來考慮這個問題,只是可能的情況由3種變成了6種:
(1) 參賽者選擇山羊A,主持人選擇山羊B
(2) 參賽者選擇山羊A,主持人選擇汽車 (3) 參賽者選擇山羊B,主持人選擇山羊A (4) 參賽者選擇山羊B,主持人選擇汽車 (5) 參賽者選擇汽車,主持人選擇山羊A (6) 參賽者選擇汽車,主持人選擇山羊B 6種情況的幾率都是1/6,但是2和4兩種情況是無效的,因此無論是否變更選擇,都各有一半的幾率會中獎。
這實際上是另一種人為干預的結果,我們從結果中剔除那些不符合條件的部分從而讓事物的發展符合我們的預期。這就像人類對物種的人工選擇行為,遺傳的變異幾率在人工的選擇過程中被放大了,從而讓繁殖出的后代更加符合我們的預期。
上代碼:
int totalTimes = 1000000;
int bingo = 0;
boolean[] boxes; int actuallyTotalTimes = 0; for (int i = 0; i < totalTimes; i++) { // loop 1 million times boxes = new boolean[] {false, false, false}; boxes[random(3)] = true; int myChoice = random(3); int hostChoice = random(3, myChoice); if (boxes[hostChoice]) { continue; } actuallyTotalTimes++; if (!boxes[myChoice]) { bingo++; } } return (double ) bingo * 100 / actuallyTotalTimes;
?
主持人不再是只選擇山羊,而是在剩下的2扇門中隨機選擇。actuallyTotalTimes是有效的樣本數量,僅在主持人沒有選中汽車時才會增加,因此有效的樣本數量僅為總樣本數的2/3。
?
完整代碼下載(包括上一篇的2段代碼):?http://pan.baidu.com/s/1i3niOvF