看的见的算法——三门问题
在美国的电视节目中有一个非常有意思的游戏:有三个门其中一个们后面有奖品,主持人会先让你选择一扇门,而后主持人打开一扇没有奖品的门,然后问你要不要换门,那么问题来了:换门中奖的概率高还是不换门高还是都一样首先我们先使用程序来看看这个问题:
package com. lipengge. threegatesproblem;
public class ThreeGatesExperiment {
private int win;
public ThreeGatesExperiment ( int gameNumber, boolean isChange) {
if ( gameNumber< 0 ) {
System. out. println ( "输入不合法" ) ;
}
play ( gameNumber, isChange) ;
}
public void play ( int gameNumber, boolean isChange) {
for ( int i= 0 ; i< gameNumber; i++ ) {
if ( run ( isChange) ) {
win++ ;
}
}
System. out. println ( ( double ) win/ gameNumber) ;
System. out. println ( 1 - ( double ) win/ gameNumber) ;
}
public boolean run ( boolean isChange) {
int choiceDoor= ( int ) ( Math. random ( ) * 3 ) ;
int prizeDoor= ( int ) ( Math. random ( ) * 3 ) ;
if ( choiceDoor== prizeDoor) {
return isChange? false : true ;
} else {
return isChange? true : false ;
}
}
public static void main ( String[ ] args) {
new ThreeGatesExperiment ( 10000 , true ) ;
}
}
我们通过实验10000次来计算换门中奖的概率isChange是让用户输入换门还是不换门我们来看看结果:
第一行为换门中奖的概率为0.66约2/3
第二行为换门不中奖概率约为0.338 约1/3
由此得出结论换门得奖的概率高一些那么是为什么呢?
我们来分析一下:
刚开始选一个门中奖的概率为:1/3,不中奖的的概率为两扇门概率值和2/3
那么主持人打开一扇门你选的那扇门的中奖概率仍为1/3,由于已经确认没奖的一扇门的概率为0那么剩余一扇门的概率为:刚才两扇门概率之和2/3是不是和结果一致