以下描述来自百度百科: ' P Z. F3 t, t- n三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。 1 \2 v8 ~6 M' j4 o& e3 A6 {& ? 1 s4 J8 C% ]) v0 v: m0 d; d鄙人谈几句话:7 b7 {6 h! ?+ M9 M3 S8 J
很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。0 q4 h2 {9 u' j5 C; a2 ^
9 ~9 h6 j/ W3 A
以下是鄙人的python模拟程序: ) L4 u6 Y! k. ]; i, V4 p% \
#Author : Naupio, J( F. \- [8 d; U* L; E
import random as rd 5 T( @4 b# h/ |3 C a5 }" bchange = True 7 _. @1 X% p$ i0 t: [/ gdef moni(times=10000):/ s/ r% P) `% B0 \$ E3 d7 T3 {# B
counts = 0.0 5 }$ k0 \0 A4 ~0 u& n5 [- r for i in range(times): 6 L7 _9 [6 F( a; D+ M rightaim = int(rd.random()*3) #汽车所在的门8 T6 L1 ]' ^& h. m
guss = int(rd.random()*3) #第一次猜的门 2 c: U: g9 l" l& B) x aim=[0,1,2] #初始化三个门 }( Y* k( J" K# n. ~4 Y" J9 _4 w & Y. \+ g! Q D
#找出要主持人打开的门 , b$ t q0 u3 J# g; B7 q6 h3 w for j in aim: 7 A; l" }* \6 ]$ a. \8 a5 B' ] if (j!=guss and j!=rightaim): ) K' r. b g5 y1 e openaim = j ) \1 q1 ^ l" U( B0 Y break t, `1 T" u! P9 R
8 {' L- B! n$ J# D #找出另一个门 9 ^0 N! a7 t' W) K, Q6 V2 S- n for j in aim:8 _7 v- {1 k; e1 \- g
if (j!=guss and j!=openaim):& s1 ?' G+ ^" s) T; d
otheraim =j ) p5 A) ^( {1 ` break6 g. } q, o0 I# c. U. p& V" D
& F' R4 g$ i' \' ?: I' a
6 `! S1 X7 A' H
#改变选择 " G* Q% P+ r' L. H
if change: , g# K7 u4 C) Y8 _; D) Z1 B* I guss = otheraim' a1 G/ t9 j( j2 p3 q9 p5 o$ V
1 k4 e$ N( j8 V
#改变选择之后猜中汽车的次数统计 ; Y3 K4 ~0 h P6 O
if guss==rightaim:7 _$ q3 F/ R) M7 |( g7 H% W
counts+=1& F B v `3 \
2 e. d- Z( Q l9 Q. H! I1 s #返回改变选择之后猜中汽车的概率 $ ^! D5 w, t: k" R+ I! l
return counts/times h' A6 Y( S' B, l
print "改变选择之后的模拟一千次结果是:",moni(1000)0 o8 g; O6 \; ]+ n* |( m
print "改变选择之后的模拟一万次结果是:",moni(10000) + h4 z, h! s( {' g7 C( x6 xprint "改变选择之后的模拟十万次结果是:",moni(100000)! X( L$ Z- s E" w5 l, v3 \1 e
print "改变选择之后的模拟一百万次结果是:",moni(1000000) : R4 F/ w; `9 y) q$ l6 |/ l7 wprint "改变选择之后的模拟一千万次结果是:",moni(10000000) 2 |, P- E T# t7 ^8 z3 R5 t. H2 h w' O; |
以下是模拟效果截图: 6 N3 s' f+ g6 |8 b% n& O# [ - W, z/ \! D: V& \* B7 L- U+ H5 M% h9 ?9 u" d, Y5 `; k$ Z
鄙人最后说几句:8 g3 ~9 o' r' I7 j2 ~
从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。* @" F& Q& l! h, E* n; j) i @百年孤独@数学中国—罂粟@madio $ Y2 R$ e- f A* h4 |) I# {( Zps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。; W2 q o( k, F. c5 Q. A3 Z/ {
7 z* a1 c& P( t) {4 S* T$ z8 r- X1 _. V3 @" Z
# [" {0 D. F) W3 u/ H