三门问题(一个有趣的概率题)

::: CJK
UTF8gbsn

三门问题是一个十分有趣的问题。 它讲述的是这样一个问题。 假如有一档节目。
节目里面有设置有三道门, 其中一道门里面有奖品。
主持人会让你选一道门。当你做出选择之后,
主持人会将你没有选择的两扇门中选择一个空门打开(主持人是知道哪扇门没有礼物的)。接下来主持人会问你,需要改变自己的选择么?
那么问题也就来了, 假如你想使得自己的获奖概率最大化,
你是选择更换自己的选择还是保持自己的选择? 而中奖概率是多少呢?

穷举法

  • 礼物在1号门

    • 第一次选择1号门

      • 主持人选择开2,或者3

        • 保持选择 (获胜)

        • 更改选择 (失败)

    • 第一次选择2号门,

      • 主持人会开3号门 (主持人只能开3号门, 因为1号门里面有礼物).

        • 保持选择 (失败)

        • 更改选择 (获胜)

    • 第一次选择3号门,

      • 主持人会开2号门 (主持人只能开2号门, 因为1号门里面有礼物).

        • 保持选择 (失败)

        • 更改选择 (获胜)

    这里有3种情况,如果第二次选择更换, 获胜概率为 2 / 3 2/3 2/3. 如果不能换 1 / 3 1/3 1/3

  • 礼物在2号门 [和1号门一样]

  • 礼物在3号门 [和一号门一样]

总结起来看, 如果更换选择我们中奖的概率是 2 / 3 2/3 2/3,
如果不更换中奖概率是 1 / 3 1/3 1/3

Analysis

我们接下来使用条件概率来分析, 更换选择和保持选择的区别。

  1. 用事件 A A A来表示第一次选择就选中了礼物 P ( A ) = 1 / 3 P(A)=1/3 P(A)=1/3

  2. 用事件 A ‾ \overline{A} A表示第一次选择没有选中礼物。

    P ( A ‾ ) = 2 / 3 P(\overline{A})=2/3 P(A)=2/3

  3. C C C表示最终获胜

根据全概率公式可得

  • 不更换选择 P ( C ) = P ( C A ) + P ( C A ‾ ) P(C)=P(CA)+P(C\overline{A}) P(C)=P(CA)+P(CA)
    P ( C A ) = P ( C ∣ A ) P ( A ) = 1 × 1 3 = 1 3 P(CA)=P(C|A)P(A)=1\times \frac{1}{3}=\frac{1}{3} P(CA)=P(CA)P(A)=1×31=31
    P ( C A ‾ ) = P ( C ∣ A ‾ ) P ( A ‾ ) = 0 × 2 3 P(C\overline{A})=P(C|\overline{A})P(\overline{A})=0\times \frac{2}{3} P(CA)=P(CA)P(A)=0×32
    也就是说 P ( C ) = 1 3 P(C)=\frac{1}{3} P(C)=31

  • 更换选择 P ( C ) = P ( C A ) + P ( C A ‾ ) P(C)=P(CA)+P(C\overline{A}) P(C)=P(CA)+P(CA)

    P ( C A ) = P ( C ∣ A ) P ( A ) = 0 × 1 3 = 0 P(CA)=P(C|A)P(A)=0\times \frac{1}{3}=0 P(CA)=P(CA)P(A)=0×31=0

    P ( C A ‾ ) = P ( C ∣ A ‾ ) P ( A ‾ ) = 1 × 2 3 P(C\overline{A})=P(C|\overline{A})P(\overline{A})=1 \times \frac{2}{3} P(CA)=P(CA)P(A)=1×32

由此可见更换选择获奖的概率大得多。而且对于不更换选择的情况。
我们可以认为用户只进行了一次3选1. 那么中奖概率当然是 1 / 3 1/3 1/3.
而从信息论的角度,
实际上主持人打开没有奖品的那扇门的时候其实给出了信息。
这样我们可以根据信息做出策略调整, 增大自己获胜的概率。
:::

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个 Java 程序实现三门问题的例子: ```java import java.util.Random; import java.util.Scanner; public class ThreeDoorsProblem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Random random = new Random(); int carPosition = random.nextInt(3); // 随机生成汽车所在的的位置(0-2) int choice = -1; // 参赛者选择的的位置 int openedDoor = -1; // 主持人打开的的位置 int switchChoice = -1; // 参赛者决定是否换后的选择 System.out.println("Welcome to the three doors problem!"); System.out.println("There is a car behind one of three doors."); System.out.println("You need to choose one door to open."); System.out.print("Please enter your choice (0-2): "); choice = scanner.nextInt(); // 主持人打开一个(非汽车且非参赛者选择的) do { openedDoor = random.nextInt(3); } while (openedDoor == carPosition || openedDoor == choice); System.out.println("The host opened door " + openedDoor + ", and it's empty."); System.out.print("Do you want to switch your choice? (0 for no, 1 for yes): "); switchChoice = scanner.nextInt(); if (switchChoice == 1) { // 参赛者换 int newChoice = -1; do { newChoice = random.nextInt(3); } while (newChoice == choice || newChoice == openedDoor); choice = newChoice; } if (choice == carPosition) { System.out.println("Congratulations! You win the car!"); } else { System.out.println("Sorry, you lose."); } } } ``` 这个程序通过随机生成汽车所在的的位置,和参赛者选择的的位置,以及主持人打开的的位置,来模拟三门问题的过程。参赛者可以选择是否换,最后根据选择的是否是汽车所在的来判断是否获胜。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值