首页 > 其他分享 >三门问题浅析

三门问题浅析

时间:2024-07-18 15:57:14浏览次数:16  
标签:选择 frac 参赛者 问题 三门 hostChoice 中奖 myChoice 浅析

三门问题曾出现在我遇到过的一次笔试题中,也困扰了我很长一段时间。翻看了一些博客,现进行一下总结,供以后查阅。

0. Introduction

三门问题——亦称为蒙提霍尔问题,出自美国的电视游戏节目Let's Make a Deal. 问题描述如下:

参赛者面前有三扇关闭着的门,其中只有一扇门的后面是汽车,另外两扇门后面则各藏有一只山羊,选中后面有车的那扇门就可以赢得该汽车。当参赛者选定了一扇门,但未开启时,主持人会开启剩下两扇门中的一扇,露出其中一只山羊(为参赛者排除一扇错误的门)。主持人其后会问参赛者要不要更换选择,选另一扇仍然关着的门。
问:参赛者是否应该选择换门?

注意:主持人必定打开藏有山羊的门。他知道哪扇门有奖品。他不会打开你选择的门。

据说此节目一经播出就引起了热烈的讨论,有人说应该换,有人认为换不换都一样。

观点一:换或者不换都一样,中奖几率都是50%。
解释:当参赛者选择一扇门时,他中奖的几率确实只有1/3。但当主持人帮忙排除掉一扇门时,车要么在参赛者所选的这个门中,要么在剩下的未被选择的那扇门中。此时参赛者二选一,无论是否变更选择,中奖几率都是1/2。

观点二:不换的中奖几率是1/3,换的话将有2/3的几率中奖,因此当然应该换。
解释:0号门,1号门,2号门(假设奖品在0号门后),如果选择不换门,即忽略主持人,中奖率是1/3。
如果选择换门,有如下三种情况:

结论:如果第一次选的是0,最后不中奖,如果第一次选的1或者2,最后必然中奖,即换门中奖概率为 2/3 。应该换门

1. 解析

这两种观点乍一看似乎都有道理,但实际上第一种观点是错误的。因为1/2这个概率只考虑了第二次选择,而忽略了第一次选择。

来看另外一个例子:

假设有2个参赛者A和B,参赛者A按照原来的流程先选择一扇门,此时主持人把一扇有山羊的门排除掉了。此时又来了一个参赛者B,他并不知道之前发生的事情,此时他在剩下的两扇门中随便选择一扇门。
问:参赛者A和B中奖的概率一样吗?

答案是不一样的。因为在整个过程中,A比B多掌握了一点信息。
A了解到的是:剩下的两扇门中被排除了一扇。于是站在A的角度,如果换门,中奖概率是(第一次没中第二次中了) \(\frac{2}{3}*1=\frac{2}{3}\)
而对B来说,他看到的是:三扇门中被排除了一扇。于是站在B的角度,只能在剩下的两扇门中二选一,中奖概率是\(\frac{1}{2}\)

正是因为掌握的信息是不对称的,因此A能够比B更加准确地做出判断,进而影响到决策的正确性。如果抽奖重复很多次,A每次都更换选择而B是随机选择,那么A将大约比B多 \(\frac{2}{3}-\frac{1}{2}=\frac{1}{6}\) 的中奖机会。

可以发现,这里的参赛者B其实就是上面观点一的另一种表述方式(忽略了第一次选择)。


站在另外一个角度来思考,三门问题应该换门的前提是主持人知道门后是否有奖品,他一定会打开藏有山羊的门。(也即排除了一个错误答案,也使得样本数-1)
如果我们稍稍改变一下前提:

主持人事先也不知道汽车在哪个门后面,他只是随便打开两扇门中的一扇,并且恰好这扇门后面是山羊,那么此时的情况又是怎样呢?

在某一次特定的选择中,这两种情况并没有不同,但实际上两种前提隐含的样本数却是不同的。
假设这个节目在播出前录制了一万次。(这实际就变成了不放回抽样的问题。每次抽取,都有1/3的概率抽中汽车。)
主持人有1/3的可能会选中汽车,这与节目的要求是不符的。因此最终只有大约6700次录制是有效的。

按照前面的分析,当选择A门后,A门中奖概率不再改变(\(\frac{1}{3}\)),但由于现在样本数变为了原来的\(\frac{2}{3}\),此时A门的新的中奖几率将变为:\(\frac{1}{3}\div\frac{2}{3}=\frac{1}{2}\)

仍然可以用之前的方法来考虑这个问题,只是可能的情况由3种变成了6种:

6种情况的几率都是1/6,但是3和5两种情况是无效的(于是一共剩4种情况),如果换门,1/2的概率中奖。因此无论是否变更选择,都各有一半的几率会中奖。

2. n门问题

需注意,1 - 1/3 (不换的中奖率)= 2/3(换的中奖概率),只是特例。
若有10扇门,不换的中奖率是0.1, 换的中奖率不是0.9,而是 \(\frac{9}{10} * \frac{1}{8} = \frac{9}{80} = 0.1125\) (换且中奖等于第一次没选对加第二次选对)

总结: n门问题(前提:主持人只会开空门)
不换,中奖概率是\(\frac{1}{n}\),
换,中奖概率是 \(\frac{n-1}{n} * \frac{1}{n-2} = \frac{n-1}{n(n-2)}\)
换比不换中奖概率高 \(\frac{1}{n(n-2)}\)

3. 程序模拟

import random

def openNoPrizeOne(doors, myChoice):
    while True:
        hostChoice = random.randint(0,2)
        if hostChoice!=myChoice and doors[hostChoice]!=True:
            break
    return hostChoice


def alterChoice(myChoice, hostChoice):
    myChoice = (myChoice+1)%3 # 往后平移一个
    if myChoice == hostChoice:
        myChoice = (myChoice+1)%3  # 如果等于主持人的选择,再往后平移一个
    return myChoice
    
    
totalTimes = 1000000
bingo = 0
doors = []

for i in range(totalTimes):
    doors = [False, False, False]
    doors[random.randint(0,2)] = True  # 随机选一扇门后面放奖品
    
    myChoice = random.randint(0,2) # 参赛者随机选一扇门
    hostChoice = openNoPrizeOne(doors, myChoice) 
    myNewChoice = alterChoice(myChoice, hostChoice) # 参赛者更换选择
    
    if doors[myNewChoice]:
        bingo+=1
        

# 更换选择的中奖率
print("中奖率: {:.2f}%".format((bingo/totalTimes) * 100))

运行结果:

Ref

https://www.cnblogs.com/antineutrino/p/4821580.html
https://www.cnblogs.com/funwithwords/p/15644270.html
https://blog.csdn.net/IMWTJ123/article/details/79979120

标签:选择,frac,参赛者,问题,三门,hostChoice,中奖,myChoice,浅析
From: https://www.cnblogs.com/qypx/p/18308070

相关文章

  • Hypertale集群常见问题
    Hypertale集群常见问题1.启动: 1)Master: 问题1; ERRORHypertable.Master: main(/home/wl/src/hypertable/src/cc/Hypertable/Master/main.cc:293): Hypertable::Exception:Errorreadingmetalogfile:/hypertable/servers/master/log/mml/0:read7169/7169......
  • 如何快速排查线上问题 -copy qf
    排查流程图flowchartTBA-->B-->C-->D-->EsubgraphA[认识问题]A1[收集信息]A2[确认问题]A3[复现问题]A4[影响范围]A1-->A2-->A3-->A4endsubgraphB[诊断/确认问题]B1[检查网络连接]......
  • 大模型算法方向实习会经常提问哪些问题? ?
    现互联网研发一枚,曾拿过多个算法/研发岗SPoffer,简要介绍一下大模型算法岗面试内容和如何准备面试。大模型算法岗的面试内容,实际上可以拆解成两部分,一是算法岗通用的面试内容,二是大模型专有相关部分。算法岗通用面试内容这部分内容很重要,因为通用的面试内容可以适用于不同......
  • 【数学建模】——多领域资源优化中的创新应用-六大经典问题解答
    目录题目1:截取条材题目 1.1问题描述1.2数学模型1.3求解1.4解答题目2:商店进货销售计划题目2.1问题描述2.2数学模型2.3求解2.4解答题目3:货船装载问题题目3.1问题重述 3.2数学模型3.3求解3.4解答题目4:城市消防站选址问题 题目4.1问题重述4.2......
  • 你是如何解决go语言框架 gin跨域问题 的 ?
    我们在做前后端分离的项目,时常会听到跨域问题。经常看到有人的文章标题写着:前端支持跨域,但显然也只是个噱头而已。跨域的概念,本人才疏学浅,就不多说了。大家有兴趣可以搜搜相关的介绍。今天就聊一聊在go的web框架gin里面怎么解决跨域问题,以及在实践过程中踩的坑。大概已经抄了m......
  • 关于hive默认不能改,和查的问题
    配置好hive后默认支持查找,和增加。需要在hive-site.xml里面添加如下配置:<property> <name>hive.support.concurrency</name> <value>true</value></property><property> <name>hive.enforce.bucketing</name> <value>true</value>......
  • 并发问题的三大根源是什么?
    1.前言从进程与线程中我们了解到,一个任务中CPU的的运算速度要远远大于I0的速度,当CPU和IO一起协作时就容易产生问题,一个任务在等待I0的时候,CPU无法进行工作,所以后续为了提高CPU的利用率,进程中诞生线程,CPU添加缓存,编译程序优化指令执行次序,使得缓存能够得到更加合理地利用但是与之......
  • eureka重启后py_eureka_client库心跳包往eureka slave节点复制失败问题排查
    问题描述peer1节点(python程序往这个节点注册数据)日志:12763988:07-1718:39:45.268WARN[]--[TaskBatchingWorker-target_10.29.46.118-8]c.n.e.c.ReplicationTask:35:ThereplicationoftaskLBS-PROXY/10.30.37.85:lbx-proxy:8089:[email protected]......
  • kafka一个消费者组一直停留在rebalance状态导致无法消费问题
    问题描述线上突然出现,某一个消费者组下的部分分区无法消费。kafkabroker日志如下:[2024-07-1617:44:58,548]INFO[GroupCoordinator0]:DynamicMemberwithunknownmemberidjoinsgrouptransfer-groupinStablestate.Createdanewmemberidconsumer-22-0619b903-......
  • redis学习-12(实现分布式锁、消息队列、缓存一致性问题、单线程快的原因、跳跃表)
    引用以下内容:redis实现分布式锁:Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)Redis实现分布式锁的7种方案,及正确使用姿势!redis实现消息队列Redis的学习教程(十)之使用Redis实现消息队列缓存一致性问题想要保证数据库和Redis缓存一致性,推荐采用先更新数......