美国的一档游戏节目,在学校的时候都看到过很多的相关讨论. 题目大概是这样的:
假设你在进行一个游戏节目。现给三扇门供你选择:一扇门后面是一辆轿车,另两 扇门后面分别都是一头山羊。你的目的当然是要想得到比较值钱的轿车,但你却并 不能看到门后面的真实情况。主持人先让你作第一次选择。在你选择了一扇门后, 知道其余两扇门后面是什么的主持人,打开了另一扇门给你看,而且,当然,那里 有一头山羊。现在主持人告诉你,你还有一次选择的机会。那么,请你考虑一下, 你是坚持第一次的选择不变,还是改变第一次的选择,更有可能得到轿车?
题目我觉得不难,但是人们讨论的时候往往会混淆条件概率和独立随机概率.得出错误结论.其实用程序可以很好的模拟这个游戏过程.通过重复试验,我们可以得出无限接近真实概率的数字.
并且程序的好处是不用陷入混乱的概率类型判断中,只从输入输出得出结论.
相关PHP脚本如下,运行得出的结论是:更换选择的话概率为2/3.不更换选择的话选中概率为1/3
$c = 0 ; // 外部循环次数
$d = 0 ; // 如果不换的话正确选中的次数
$i = 0 ; // 如果更换选择的话选中的次数
while ( $c < 10000 ) // 重复试验次数
{
$f = array ();
$h = array ();
$j = 0 ;
$k = 0 ;
$a = rand ( 1 , 3 ); // 随机选择1-3号位;
$b = rand ( 1 , 3 ); // 汽车随机出现在1-3号位
if ( $a == $b )
{
$d ++ ; // 如果不改变决定的话。选中的次数++
}
for ( $e = 1 ; $e <= 3 ; $e ++ ) // 取出不是汽车也不是被选中的位号存入数组$f中
{
if ( $a != $e && $b != $e )
{
$f [ $j ] = $e ;
$j ++ ;
}
}
$g = array_rand ( $f ); // 从$f数组中随机取出一个元素。即第二次选择时打开的选位,这里肯定是羊
for ( $e = 1 ; $e <= 3 ; $e ++ ) // 取出既不是第二次已经打开又不是现在所选的号位。也就是第二次选择时如果改变的话所选的位号,存入数组$h(显然只有一个元素)
{
if ( $a != $e && $g != $e )
{
$h [ $k ] = $e ;
$k ++ ;
}
}
if ( in_array ( $b , $h )) // 如果第二次选择是汽车.选中次数++
$i ++ ;
$c ++ ;
}
// 计算概率
echo ' 不换的话几率是: ' . $d / 10000 . ' <br> ' ;
echo ' 换的话几率是: ' . $i / 10000 . ' <br> ' ;