你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

三门问题(蒙提霍尔问题)验证

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


什么是三门问题

  • 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。
  • 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
  • 问题是:换另一扇门会否增加参赛者赢得汽车的机率?
  • 如果严格按照上述的条件,即主持人清楚地知道,自己打开的那扇门后是羊,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
  • 这个问题亦被叫做蒙提霍尔悖论:虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起一阵热烈的讨论。

其他解答

代码验证

  • 代码如下(java):
    public class test {
      @Test
      public void test() throws Exception {
          //三个门
          Boolean[] door = {false, false, true};
          //成功次数
          int success = 0;
          //测试次数
          int num = 10000;
          for (int i = 0; i < num; i++) {
              //我选择的门
              Integer me = new Random().nextInt(3);
              //主持人选择一个山羊的门
              Integer emcee;
              while (true) {
                  emcee = new Random().nextInt(3);
                  if (me != emcee && !door[emcee]) {
                      break;
                  }
              }
              //如果door[me]==false,说明换门后成功
              if (!door[me]) {
                  success++;
              }
          }
          System.out.println("成功:" + success + ",总次数:" + num + ",换门的正确率:" + Double.valueOf(success) / num);
      }
    }
    
  • 执行结果:

    成功:6638,总次数:10000,换门的正确率:0.6638

  • 即如果换门,会增加参赛者赢得汽车的机率。

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。