以下描述来自百度百科: ' ?) h G; L3 Q( f/ D三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。6 l' C( u+ |& e, R/ [
( x, e! o0 o$ ~0 N0 \鄙人谈几句话:7 s4 u/ k" t' g
很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。$ w8 r, W. X2 Q+ B) Z
4 F/ S% W) f1 r* @0 |
以下是鄙人的python模拟程序: - ?& L9 m) ^; Y- Y& C+ Y4 s #Author : Naupio0 S; k W, a x0 @7 A
import random as rd , Z8 g% T, ?( K Q1 x7 Q/ mchange = True a% e+ X# [, U/ s5 S8 \- S1 p3 pdef moni(times=10000): 8 e6 m5 J4 @5 F' u+ O2 x( i" R counts = 0.0 . I% @9 g* n9 N0 d5 H for i in range(times): 3 D& O" f: Y) o) A' D' \' X rightaim = int(rd.random()*3) #汽车所在的门/ i+ K4 R1 a- c3 N: H
guss = int(rd.random()*3) #第一次猜的门 r+ N2 p) H/ H aim=[0,1,2] #初始化三个门# D3 w7 d1 ]: S) N4 _
2 ^) \5 V/ ^& V
#找出要主持人打开的门 7 o( t# W6 P/ ?: G3 ~" j
for j in aim: . @ l% a! `# g1 F6 B) {- j if (j!=guss and j!=rightaim): 4 e' g! g8 O: R& a openaim = j % {! n5 k; l6 z- K& B7 E+ E break0 b6 D+ M5 _, W! ~9 ~
' Y" ^6 q" ^8 S, I8 @% M/ f
#找出另一个门 1 C0 ?* u o& t% m: N4 \
for j in aim: 6 I# k. r3 A" {7 d if (j!=guss and j!=openaim):5 u9 [6 d5 W- m. \
otheraim =j 7 l- z& f7 H! V) P( b4 }( h break4 Q" T/ t6 e+ t7 |+ f
! J. b, G# p }6 d# \* g: M 2 |; h+ b6 S6 J* F/ A7 a$ }' G, m #改变选择 + \; K) ?5 ^( T! g# F if change: , y2 P& [$ y) j2 ]& e guss = otheraim! R% f0 _" u; K
3 V8 \, l/ B7 c' l4 ~- [ #改变选择之后猜中汽车的次数统计 7 h2 g) v8 F; Y1 G if guss==rightaim: - ^3 ~9 I8 {3 H7 N! Z u" W$ `/ m counts+=1 9 j7 b( a8 }) w% f5 O- k9 X % c' G7 D2 Q* c4 f) b# |3 K
#返回改变选择之后猜中汽车的概率 8 M2 f2 D& L' q0 ]0 i, |. y' d
return counts/times ! s6 e. j, Z/ F+ r! Wprint "改变选择之后的模拟一千次结果是:",moni(1000) 1 I- B# m5 V/ X; c; E( H* y. o2 Cprint "改变选择之后的模拟一万次结果是:",moni(10000)) q s- Q- U5 S$ s% f3 R& g( d) G
print "改变选择之后的模拟十万次结果是:",moni(100000) # J# D3 k" x0 w( z: q; n* w8 Jprint "改变选择之后的模拟一百万次结果是:",moni(1000000). E/ x: S& R) H5 U. Z3 K H
print "改变选择之后的模拟一千万次结果是:",moni(10000000) 4 m# k5 y- Y0 d
! _+ B) \* x/ h以下是模拟效果截图: . {5 q e) a; Q) q * s( }" d: X5 z$ D% `. \! o e 7 V# D% J7 Z3 b. y/ H9 d1 T" F鄙人最后说几句: " {( B( [9 R) d" m. p 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。( }2 ?" X! E- m: v, A2 J4 e @百年孤独@数学中国—罂粟@madio * U0 A( F% H: G% ~8 d- Bps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。 - [. n( z* @, w6 Y, _- g 8 `6 w4 Q: L' s5 q0 G " ]4 F1 @3 c u : n" ]1 v5 u: q/ v! u6 H* T% d$ Y' }