以下描述来自百度百科: ; i* A( K/ {, a, ]9 i4 t
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。 : {4 J- C0 b+ X/ M+ P ( Y5 \% J2 y8 B鄙人谈几句话: - N+ {7 u, L/ J5 [3 A5 {很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。 - W; `9 w z8 @% R! Q, K! y5 `& Y
以下是鄙人的python模拟程序: * ^; n1 `7 O- I7 w2 K
#Author : Naupio8 ^, h6 }1 I/ V
import random as rd2 b% N' `% }2 c
change = True0 v& H* N, {( ?
def moni(times=10000): 4 K; r% o! _9 Q. V# o( y counts = 0.0; C2 p: a$ I1 w' Y+ F, K: m X
for i in range(times):" C2 y X4 c7 s) ~, k2 U3 Z) j* I
rightaim = int(rd.random()*3) #汽车所在的门 f+ C \7 E. T) i- H1 T
guss = int(rd.random()*3) #第一次猜的门 , d8 v% {, I$ c y7 F; { aim=[0,1,2] #初始化三个门% D& Z! d+ b+ W0 R6 a a, x
) \& `/ A F5 g1 V' Y
#找出要主持人打开的门 7 m2 t) g0 w a ]
for j in aim:- E6 q5 j6 }* \5 h% c7 M4 k, c% d
if (j!=guss and j!=rightaim): 2 ^2 r m' ~( d openaim = j , u2 V A5 f2 e4 \ break5 w2 {9 Q" F0 i& G3 G, r$ V u
/ T8 B0 P8 R; G3 i* B; ? #找出另一个门 0 X- H' _7 o/ A9 g. P for j in aim:, ]" ~2 Y( `7 F5 E8 Y& P7 ?6 y( G
if (j!=guss and j!=openaim):- O7 |3 x6 A; C; @: T& J
otheraim =j9 k6 |% y5 Y6 m0 M/ j r. w3 l
break 2 t2 P$ _- B# J) J, v, z1 H, \ " ?' I6 P5 F$ b* A) W1 b0 a' z; m & x: Y$ V" i& v( L0 V #改变选择 0 q O* Z0 N9 t" ]; B. x
if change:6 ~* l+ l2 P4 P& G$ @: w
guss = otheraim . c7 s' I! H! b4 x 6 k9 |+ B$ x! A0 T: \& U1 h2 m #改变选择之后猜中汽车的次数统计 ( K, m% M! `+ S5 z6 `: j6 N* ]5 \ if guss==rightaim: . t" `6 W! Q4 [* L9 n! ? counts+=1" [$ k2 k" t& c* f
+ T4 X7 |$ T- V& F" s #返回改变选择之后猜中汽车的概率 ! s' d1 V$ e L0 U return counts/times! c8 L: j! Q0 J3 x( ^+ q, y: _1 c
print "改变选择之后的模拟一千次结果是:",moni(1000). \3 b5 l$ O7 a5 t: V+ y
print "改变选择之后的模拟一万次结果是:",moni(10000) ! R% T" `3 o; J5 J2 U5 Tprint "改变选择之后的模拟十万次结果是:",moni(100000) 8 O u6 M1 q. P0 a+ b0 ]print "改变选择之后的模拟一百万次结果是:",moni(1000000) # v# R+ R! j0 @& e( O7 Eprint "改变选择之后的模拟一千万次结果是:",moni(10000000) ; g/ j* ~$ W. M; Y' P& x% s! D 3 E1 ~$ n5 {( y4 `1 b! W以下是模拟效果截图: 8 e# n1 K5 q1 ?% G. V, ^ 5 T \. v2 X7 T9 r' \9 t$ }- k! a; r$ y. @# ^8 E( Q6 W
鄙人最后说几句: ' T4 C& ]+ D g, y d 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。 6 H4 F% q' z% a1 t@百年孤独@数学中国—罂粟@madio . q0 r9 _- y3 |. P! ops:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。 + a8 a \8 O. p& a4 u) h% r$ j- \, q/ l; Z* `9 I
5 V% L* | @$ G" Z0 M& p9 M: Z5 |