車羊問題的一種簡潔證明

2021-06-15 05:37:01 字數 1631 閱讀 7377

在csdn上看到一篇關於車羊問題的文章(我編了個程式證明了結論,然後給出了一種簡潔的數學證明。如下:

車羊問題(car and goats problem)又叫蒙提霍爾問題(monty hall problem)或三門問題。這個問題**於美國電視娛樂節目let』s make a deal,問題的名字則來自該節目的主持人蒙提·霍爾(monty hall)。問題是這樣的:參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車,選中後面有車的那扇門就可以贏得該汽車,而另外兩扇門後面則各藏有乙隻山羊。當參賽者選定了一扇門,但未去開啟它的時候,節目主持人會開啟剩下兩扇門的其中一扇,露出其中乙隻山羊。主持人其後會問參賽者要不要換另一扇仍然關上的門。明確的限制條件如下:參賽者會被問是否保持他的原來選擇,還是轉而選擇剩下的那一道 那麼換與不換,哪種策略答對的機率高呢?

思考了一下,感覺換的概率可能是1/3,1/2,2/3,無法確定,於是寫個程式找到正確答案先:

程式證明

static random random1 = new random();

static random random2 = new random();

static random random3 = new random();

static int count = 100000000;

public static void main(string args) else

} system.out.println("retry:" + retry + ",got car:" + got + ",count="

+ count + ",probability=" + got * 1.0 / count);

} static int excluse(int c, int p) else if (c + p == 2) else if (c + p == 3)

return -1; }

static int prompt(int data, int c)

} if (choise[0] >= 0 && choise[1] >= 0) else if (choise[0] < 0) else

} /**

* 1 for car,0 for goat

*/static int generatedata()

上面的程式,當把retry設成true和false,count設成1億,得到的輸出分別是:

// retry:true,got car:66671490,count=100000000,probability=0.6667149

// retry:false,got car:33331411,count=100000000,probability=0.33331411

從而從程式的角度證明:不換獲得車的概率是1/3;換,獲得車的概率是2/3.

數學證明

其實用逆推法很容易得出2/3的結論,仔細思考一下,就會發現:

參賽者換了門而且獲得了車,當且僅當參賽者第一次選擇的門後面是羊。根據等價事件的概率相等的數學原理,問題轉換成參賽者第一此選擇的門後是羊的概率,也就是2/3.

實現檔案拖放的一種簡潔方法

1 自已編寫專用的類,程式複雜 維護麻煩 2 必須要將檔案拖到對話方塊中的編輯控制項上,拖動的檔名才被接受,而標準的windows程式只須將檔案拖放到對話方塊即可被接受 3 只能接受乙個拖放的檔案。本文要介紹的這種方法只須呼叫乙個windows api函式dragqueryfile即可實現檔案的拖放...

php 使用post,get的一種簡潔方式

近來看到了乙個巧妙地方法,原理是 var a var b var a test 則echo var b 為 te 因此可以這樣處理 複製 如下 foreach array cookie post get as request www.cppcns.com key addslashes value 這...

Dijkstra演算法的另一種證明

按 今天看tanenbaum的計算機網路時講到了dijkstra演算法。關於演算法的正確性,演算法導論 給出了嚴格的證明。clrs的證明基於乙個通用的框架,非常清晰。今天只是隨意想想是否有其他證明的方式,結果發現是有的。雖然這種證明方法可能早已有人用過,不算新鮮。不過自己想了一通就把它放到這裡純粹博...