码迷,mamicode.com
首页 > 其他好文 > 详细

羊车门问题

时间:2017-04-05 23:42:51      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:中奖概率   条件   style   copy   line   class   turn   log   richtext   

我认为 会 增加选中汽车的机会。

设总共有N扇门,其中某一扇门后面有车。

策略一:我选择某扇门,在主持人提示之后,不变更选择。
实质:决定我中奖的,是“我一次选中了有车的门”这一事件A,与后续事件无关。
事件概率/中奖概率:技术分享

策略二:我选择某扇门,在主持人提示之后,变更选择。
实质:决定我中奖的,是两个事件的发生:
  •   事件B. 我第一次选择了无车的门;
  •   事件C. 在事件B发生的条件下,我在剩余可选的门中选择了有车的门。(此时,除去第一次选择的门和主持人打开的门,剩余的可选的门只有N-2扇)
事件概率:
  • 技术分享
  • 技术分享

中奖概率:
技术分享

比较上述情况可知:技术分享
变更选择是更优策略

举例:
设N=3,依据上述公式,策略一中奖的概率是0.333,策略二是0.667;
设N=5,依据上述公式,策略一中奖的概率是0.200,策略二是0.267;

import random

def monte(N=3, rechoose=False):
    # Setup scenary.
    doors = list(range(N))
    reward = random.choice(doors)
    # My choice.
    mychoi = random.choice(doors)
    # The host‘s possible hint, excluding
    # - my choice
    # - the reward.
    tdoors = doors[:]
    tdoors.remove(mychoi)
    if reward != mychoi:
        tdoors.remove(reward)
    tempta = random.choice(tdoors)
    # My second choice, excluding
    # - the first choice
    # - the host‘s temptation
    if rechoose:
        doors.remove(mychoi)
        doors.remove(tempta)
        mychoi = random.choice(doors)
    return reward == mychoi


测试运行结果。

T = 100000

# 例一
In [1]: sum(monte(N=3) for _ in range(T)) / T
Out[1]: 0.332977

In [2]: sum(monte(N=3,rechoose=True) for _ in range(T)) / T
Out[2]: 0.667285


# 例二
In [3]: sum(monte(N=5) for _ in range(T)) / T
Out[3]: 0.200164

In [4]: sum(monte(N=5,rechoose=True) for _ in range(T)) / T
Out[4]: 0.266301

 

羊车门问题

标签:中奖概率   条件   style   copy   line   class   turn   log   richtext   

原文地址:http://www.cnblogs.com/chenweijava/p/6670969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!