三门问题的理解和
Java实现
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。
参赛者会看见三扇关闭的门,其中一扇门后面有一辆汽车,选中后面有车的那扇门就能赢得汽车,而另外两扇门后面P都没有。当参赛者选定一扇门,准备开启的时候,节目主持人会开启另外两扇门的其中一扇,这扇门后面一定没有汽车,主持人会问参赛者要不要换另一扇门。问题是:换另一扇门会不会增加参赛者获奖的概论????
按一般直觉来想,主持人打开那扇门,似乎不影响参赛者的中奖机率,剩下的两道门必定有一个有车一个无车,中奖机率是二分之一。但是,严谨的数学表明并不是这样的,真正的概论应该是
换门的话,中奖的概率是 2 3 \frac{2}{3} 32
不换门的话,中奖的概率是 1 3 \frac{1}{3} 31
由于我们在短时间内无法用严谨的数学方法说明,方便起见,我们用蒙特卡罗方法来实现这个概率
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
以下为Java的代码实现
package 三门问题;
import 作业.成员内部类.iner;
public class threeDoors{
private int N;//定义N来表示进行实验的次数
public threeDoors(int N)
{
if(N<=0)
{//检测N是否小于0,若是 抛出非法参数异常
throw new IllegalArgumentException("N必须大于0");
}
//保存传入的N
this.N=N;
}
public void run(boolean changeDoor)
{
int wins=0;//用来记录中奖次数
for(int i=0;i<N;i++)
{
//传入是否换门的参数给play()方法,play()方法返回在换门/不换门情况下的是否中奖,中奖返回true,没中返回false
if(play(changeDoor))
{
wins++;//若中奖,次数+1
}
}
//输出前提语句
System.out.println(changeDoor?"换门":"不换门");
//用中奖的次数除于总次数N得到概论
System.out.println("中奖的概论是:"+(double)wins/N);
}
//定义一个play()方法,模拟参赛者抽奖过程
private boolean play(boolean changeDoor)
{ //1,2,3号门中随机一个为中奖门
int prizeDoor=(int)(Math.random()*3);
//1,2,3号门中玩家随机选一个门
int playerChoice=(int)(Math.random()*3);
if(prizeDoor==playerChoice)
{
//当玩家选的门是有车的门时,换门=输 不换门=赢
return changeDoor?false:true;
}
else {
//当玩家选的门是无车的门时,换门=赢,不换门=输
return changeDoor?true:false;
}
}
public static void main(String[] args) {
//设置N的大小,数值越大,实验结果越准确,这里设置为一百万次
int N=1000000;
//创建threeDoors的对象,传入参数N
threeDoors s=new threeDoors(N);
s.run(true);
System.out.println();//换行
s.run(false);
}
}
运行后结果为:
换门
中奖的概率是:0.667196 (约等于2/3)
不换门
中奖的概率是:0.333385 (约等于1/3)
通过蒙特卡咯方法,进行一百万次的抽奖模拟,我们能得出这个问题的大概结果。
但是我们可能还是不明白为什么换门就比不换门中奖概率高呢?以下我们可以用一些简单的数学推理来理解三门问题:
在游戏开始的时候,1,2,3号门中奖的概率是相等的,都是1/3
P(1号门中奖)+P(2号门中奖)+P(3号门中奖)=1
当玩家选择了1号门时,玩家中奖的概率即为1/3
P(1号门中奖)=1/3
那剩下的2,3号门的中奖概率就为2/3
P(2号门中奖)+P(3号门中奖)=2/3
此时,主持人将2号和3号门中没有奖的2号门打开了,并确认地告诉你这个门没有奖,则2号门中奖的概率为0,那3号门中奖的概率为2/3,即为玩家选择的1号门的两倍
P(2号门中奖)=0=>P(3号门中奖)=2/3
所以当玩家换3号门时中奖概率为2/3,不换门时中奖概率为1/3