“三门问题”解决方案:换不换?更换策略与贝叶斯策略?附 Java 验证代码

本文主要是介绍“三门问题”解决方案:换不换?更换策略与贝叶斯策略?附 Java 验证代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、什么是“三门问题”?
  • 二、“三门问题”解决策略详解
    • 2.1、错误策略:直觉策略与随机策略
    • 2.2、更换策略与事件分析计算
    • 2.3、贝叶斯策略及分析流程
  • 三、Java 语言验证“三门问题”
  • 总结


前言

“三门问题”作为一道经典逻辑推理题,经常被用来考察面试者的数学和逻辑思维能力,面试者需要通过掌握不同事件的属性和限制条件,运用逻辑推理和数学计算,得出不同情境下的概率。今天看到有同学面试遇“三门问题”,其中一个女孩子解答采取最稳妥的概率方法——穷举法,而大部分同学答案是“坚持不换”,选中车的概率永远是 1/n,换不换无所谓。果然经典问题是值得回味的,如果仅把思维固化在开门角度,确实选中概率永远是 1/n;如果看的是“换的角度”,当然如果你记得贝叶斯公式,那这个问题迎刃而解了,数学世界是充满无穷奥妙的!

在这里插入图片描述


声明:本文由作者“白鹿第一帅”于 CSDN 社区原创首发,未经作者本人授权,禁止转载!爬虫、复制至第三方平台属于严重违法行为,侵权必究。亲爱的读者,如果你在第三方平台看到本声明,说明本文内容已被窃取,内容可能残缺不全,强烈建议您移步“白鹿第一帅” CSDN 博客查看原文,并在 CSDN 平台私信联系作者对该第三方违规平台举报反馈,感谢您对于原创和知识产权保护做出的贡献!

文章作者:白鹿第一帅,作者主页:https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!

一、什么是“三门问题”?

“三门问题”是一道经典的逻辑推理题,也称为“三羊问题”或“蒙提霍尔问题”。

问题描述为:有三扇关闭的门,其中一扇门后面有一辆汽车,另外两扇门后面各有一只山羊。参赛者可以选择其中一扇门,然后主持人会打开另外两扇门中的一扇门,露出一只山羊。参赛者可以选择是否更换选择。

问题的关键在于,是否更换选择能够增加获得汽车的概率。这个问题常常被用来说明概率思维的重要性。

二、“三门问题”解决策略详解

解决这个问题的策略有很多,常见的包括直觉策略、随机策略、更换策略和贝叶斯策略

2.1、错误策略:直觉策略与随机策略

  • 直觉策略。最常见的直觉策略是认为参赛者选择任何一扇门的概率都是 1/3,所以如果不更换选择,获得汽车的概率就是 1/3。
  • 随机策略。如果参赛者选择随机门,即随机选择一扇门并坚持选择该门,那么获得汽车的概率仍然是 1/3。

但是,这两个策略都是错误的。很多人忽略的一点,也是这里我们需要特别注意一个事件——主持人一定会打开有山羊的一扇门,并且不能打开用户选择的门和有汽车的门! 主持人的操作已经影响到了事件的概率!为什么?别急,往下看。

今天看到有同学在面试遇“三门问题”,其中一个女孩子给了我她的解答,特别聪明但又不是很“灵巧”,她采取了最稳妥的概率计算方法——穷举法,如下是被面试女孩子的答案,大家可以看一下:

在这里插入图片描述

2.2、更换策略与事件分析计算

更换策略是一个更好的策略,选择一扇门,并在主持人展示一只山羊后更换选择。

我们列一个表,将本次所有操作事件列举出来,具体如下表所示:

第一次选择门后的物品主持人打开门后出现的物品更换门后得到的物品
山羊 1山羊 2
山羊 2山羊 1
山羊 1/山羊 2山羊 2/山羊 1

显而易见,如果不更换,事件未受影响,结果即为直觉策略与随机策略的结果,为 1/3,但是在“主持人一定会打开有山羊的一扇门,并且不能打开用户选择的门和有汽车的门”操作后,参赛者更换门后得到的物品为车的概率由 1/3 变成了 2/3。

2.3、贝叶斯策略及分析流程

贝叶斯策略是一种更加严谨的解决方式,它基于贝叶斯公式,并结合了先验概率和后验概率的概念

在这里插入图片描述
我们使用贝叶斯策略解决三门问题:假设参赛者选择门 A,然后主持人打开了门 B,揭示了一只羊。现在参赛者可以选择门 A 或门 C。

我们定义事件如下:

  • A = 您一开始选择的门是 A。
  • B = 主持人打开的门是 B。
  • C = 第三扇门是 C。

确定先验概率和事件的条件概率

  • P(A) = 1/3,因为参赛者有三个门可选,每个门的选择机会相等。
  • P(B | A) = 1/2,因为主持人必须打开没有车的门,且参赛者的选择是随机的。
  • P(B | C) = 1,因为如果参赛者选择的是门 C 而不是门 A,那么主持人只能打开门 B 来揭示一只羊。
  • P(C | A, B) = 2/3,因为如果参赛者一开始选择的是门 A,那么奖品必须在门 C 或 B 中,主持人打开门 B 后,门 C 的概率变成了 2/3。

应用贝叶斯公式:P(C | B, A) = P(B | C, A) * P(C | A) / P(B | A)= 1 * (1/3) / (1/2)= 2/3

根据计算结果得知,如果参赛者选择了门 A,并且主持人打开了门 B 揭示了一只羊,那么参赛者应该选择门 C,获得大奖的概率是 2/3。

三、Java 语言验证“三门问题”

理清解决策略之后,通过 Java 语言验证三门问题那就是简简单单,实现代码如下:

package com.bailu.test;import java.util.Random;/*** "三门问题"Java验证代码* * @author bailucool**/
public class ThreeDoors {private static final int NUM_DOORS = 3;// 定义门的数量private static Random random = new Random();// 随机数生成器private static final int percent = 100;// 定义百分比public static void main(String[] args) {int totalGames = 10000;// 定义游戏总次数int stayWinCar = 0;// 定义不更换门得到车的游戏次数int switchWinCar = 0;// 定义更换门后得到车的游戏次数for (int i = 0; i < totalGames; i++) {int carDoor = random.nextInt(NUM_DOORS);// 随机一扇门后有汽车int firstChoice = random.nextInt(NUM_DOORS);// 参赛者第一次选择的门// 主持人打开另一扇有羊的门int openedDoor;do {openedDoor = random.nextInt(NUM_DOORS);// 主持人不能打开用户选择的门和有汽车的门} while (openedDoor == firstChoice || openedDoor == carDoor);// 计算不能换门,参赛者可以获得小汽车的次数if (firstChoice == carDoor) {stayWinCar++;}// 主持人打开另一扇有羊的门,独立事件——与第一次打开门无关int secondChoice;do {secondChoice = random.nextInt(NUM_DOORS);// 主持人不能打开用户选择的门和有汽车的门} while (secondChoice == firstChoice || secondChoice == openedDoor);// 计算换门后,参赛者可以获得小汽车的次数if (secondChoice == carDoor) {switchWinCar++;}}// 将次数转换为概率,输出结果double stayWinRate = stayWinCar * 1.0 / totalGames;double switchWinRate = switchWinCar * 1.0 / totalGames;System.out.println("不更换门获得小汽车的概率为:" + stayWinRate * percent + "%");System.out.println("更换门后获得小汽车的概率为:" + switchWinRate * percent + "%");}}

在如上验证代码中,我们使用了一个名为 random 的随机数生成器来随机选择门,使用 NUM_DOORS 常量表示门的数量,通过使用 for 循环来进行多次试验进行模拟,最后输出每种选择情况获胜选中小汽车的次数,通过这个程序的输出结果进一步验证了更换策略的优势。

如果多几个门呢,还会吗?可别写下面这样的答案了!感兴趣的同学可以试一下下面的“四门问题”,欢迎大家把答案留言在文章下方!

在这里插入图片描述


文章作者:白鹿第一帅,作者主页:https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!


总结

三门问题的解决方式有很多,但是更换策略和贝叶斯策略是最为精确和可靠的两种方式。但是,对于一些参赛者来说,直觉策略和随机策略可能仍然是主要的选择方式。作为面试题,“三门问题”主要考察面试者的逻辑思维能力、数学推理能力、解决问题的能力和试错能力。同时,还考察面试者对于题目的理解和分析能力,是否能够从多个角度出发,得出正确答案。此外,面试官还可以通过观察面试者的沟通能力和表达能力,来评估他们是否具备良好的团队合作能力。

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

这篇关于“三门问题”解决方案:换不换?更换策略与贝叶斯策略?附 Java 验证代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/387115

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器