以下描述来自百度百科: : {) V1 y1 z; x三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。+ \; I T' w( N6 e2 ~! ~1 H) d
& Q- U I4 U1 ~: ]0 ?7 L5 f鄙人谈几句话: 5 j8 [5 H/ v- c0 v/ b很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。 3 [- N* t% w3 d+ d% o0 N# I% ^- g% W# r5 A3 j8 l
以下是鄙人的python模拟程序: ! ~; ?' [# f0 L5 X0 l t3 o #Author : Naupio1 l5 L v) M& x3 F/ t( \5 t
import random as rd 1 g& s9 J; z4 \/ C6 T P) K& d* jchange = True- o G4 Z, k' _7 R: F
def moni(times=10000): 5 m1 c2 B- Y. ] counts = 0.0. s; w$ v; M- T; `5 o
for i in range(times):' l8 I0 h) \" V, f" A
rightaim = int(rd.random()*3) #汽车所在的门4 O8 C c9 T8 l
guss = int(rd.random()*3) #第一次猜的门 - p ?* X9 v9 E" Y: v( T aim=[0,1,2] #初始化三个门8 G' P+ G, D0 X* s( }9 q& d
( r$ z9 @* X; d! ] #找出要主持人打开的门 / I6 y) U ]( T' L! E! l* J
for j in aim: 5 @6 ~: G; O3 y, A3 p if (j!=guss and j!=rightaim): / `4 R; \2 _5 Z1 M( c openaim = j f7 @/ C% Z2 ~) g break/ k/ G! b. f, j S( K
K, }. A6 }4 x8 V% s #找出另一个门 1 ?8 v" l0 X+ t# e5 y
for j in aim: 1 s6 X% d9 r. ~" | if (j!=guss and j!=openaim):. ~, i6 n5 d, Z \& A
otheraim =j 7 b# I+ g) C8 S6 u' n% t break $ s: u* o ~: q2 x & m5 O9 a+ j& M 1 y: q$ C6 T7 q# p1 Y1 ^* D; \6 ^ #改变选择 / l1 G) f, t- x" R
if change: * J1 G( {7 Y- S( y guss = otheraim# s" k b) J4 }! g! b/ |7 [7 `
* n$ c) C$ K- p T" y$ I" h #改变选择之后猜中汽车的次数统计 / d' W8 m( m4 T v& T: i! m9 V
if guss==rightaim:$ f/ u# k) y- x2 v
counts+=15 n: `- e: P* o
" z0 j3 i s/ f7 M3 H
#返回改变选择之后猜中汽车的概率 ; T! O! _% Z; Z- T return counts/times1 r% T% Z4 C8 b9 q, m! N
print "改变选择之后的模拟一千次结果是:",moni(1000) * H& N7 |# Y0 M, i: a3 Y7 tprint "改变选择之后的模拟一万次结果是:",moni(10000)( r# g( g* M, I7 j+ k8 S: Z
print "改变选择之后的模拟十万次结果是:",moni(100000)" ]: h+ W. P8 x
print "改变选择之后的模拟一百万次结果是:",moni(1000000)' A. q+ f1 J4 s
print "改变选择之后的模拟一千万次结果是:",moni(10000000) " F, Y% s4 r" z% N. G. C& l9 v- Y& ~, P% ^$ z' [
以下是模拟效果截图: / N! B' R- V( W$ a4 I& f F7 d ' y- O e- t1 r6 z; v( N ?/ g $ }0 e# O9 ~9 `0 F& _( l# d鄙人最后说几句: 6 \2 o' h) {) X9 ] 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。9 [- c: X( ?3 E. v+ V @百年孤独@数学中国—罂粟@madio $ j g- W3 p$ ]+ M/ Nps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。4 |! d* W7 i6 K1 [
, q# J: z9 j8 B7 r: I
9 ^' _3 [0 B; _; G' @, e