注册 | 登录

游侠NETSHOW论坛





游侠NETSHOW论坛 游侠NETSHOW论坛 游侠PC游戏综合讨论区 在三门问题中,解释为什么1/2和2/3都有道理,而2/3又是 ...
查看: 7164|回复: 5
打印 上一主题 下一主题

[讨论] 在三门问题中,解释为什么1/2和2/3都有道理,而2/3又是最终答案 (骑兵) [复制链接]

帖子
4833
精华
3
积分
3417
金钱
6792
荣誉
40
人气
2
评议
0

跳转到指定楼层
楼主
发表于 2011-8-10 11:36:48 |只看该作者 |倒序浏览
本帖最后由 YXWScan 于 2011-8-10 12:06 编辑

同志们,我承诺这是最后一次用三门来恶心你们了...



三门问题又叫蒙特霍问题(Monty Hall problem):
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门,或者说:换另一扇门会否增加参赛者赢得汽车的概率?

刚看到这题目的时候,人们凭常识会说答案是不必换门,因为剩下两扇门赢得汽车的概率都是1/2,不少人更会说对这种简单的概率题都还纠缠不清简直白上中学了之类,因而不屑于和认为换门胜率是2/3的人进一步讨论,认为后者是昏了头。
但是就各方面资料显示的蒙特霍问题的结论来说,2/3是正确答案。

先来谈1/2:
我们知道,最初参赛者选择门后,门后是车的概率是1/3,而主持人在剩下的门中随机开门,开到是车的几率也是1/3,这里的问题是,如果在节目中,主持人开门遇到是车,之后节目会怎么进行呢?答案是,当天的节目终止,参赛者不可能获胜了。因此,讨论的问题是:在成功的节目中,即主持人没有选中车的节目中,参赛者换门后获胜的概率。
情况很简单了,我们假设概率能够真实的均匀分布,连续做3天的节目的话,其中有1天车在参赛者最初选择的门后面,有1天车在主持人从剩下两扇门中随机打开的那扇门后,剩下1天车在让参赛者考虑要换的门后面。因为3天节目中有一天节目因为主持人开门遇到车而结束,剩下2天里,有1天车在参赛者最初选择的门后,故换门不能提高胜率,两扇门胜率都是1/2。
一个很简单的概率问题,描述得那么多,是不是在故意把问题搞复杂呢?我写这么多,是想强调一个事实,是即使最后承认2/3是最终解的情况下也不能否认的事实:参赛者最初选择的门有1/3的胜率,主持人事件的确将最初的门的胜率提高到1/2!
因为总有人要程序说事,这里是C++代码:
#include <ctime>
#include <iostream>
enum DoorItem { DT_Sheep, DT_Car, };
int main()
{
    int winGameCnt = 0;                 // 不换门赢得节目的次数
    int succGameCnt = 0;                // 成功举办节目的次数
    const int MAX_GAME_CNT = 100000;    // 举办节目的次数
    DoorItem doors[3];                  // 三扇门
    srand((unsigned)time(NULL));        // 初始化随机发生器
    for (int i = 0; i < MAX_GAME_CNT; ++i)
    {
        // 随机放置车
        doors[0] = doors[1] = doors[2] = DT_Sheep;
        doors[rand() % 3] = DT_Car;
        // 因为参赛者最初选门的时候,各门无区别,我们让参赛者总是选
        // 第1门,因此主持人总在后两门中随机
        if (doors[rand() % 2 + 1] == DT_Car) continue; // 主持人选到车,失败的节目
        ++succGameCnt;                        // 成功的节目
        if (doors[0] == DT_Car) ++winGameCnt; // 不换门赢得节目
    }
    std::cout
        << "不换门赢得节目的次数:"
        << (float)winGameCnt / succGameCnt;
}

再说2/3的情况,这是1/2的坚持者很难接受的:
节目一开始,主持人和参赛者的初选会开到车的概率各是1/3,问题是,如果主持人开到车的话,除了判定这是一次失败的节目外,更可能的节目运行流程是怎样的呢?考虑到其他各种商业因素,节目不会中断,主持人会抵赖,主持人会重新选择一扇没车的门,或者说,主持人在节目一开始就知道车在哪一扇门后,部分三门问题的描述中甚至直接强调了规则:主持人打开的门一定是羊!
我们还是模拟3天节目,1天车在参赛者最初的门后,1天车在要求参赛者考虑要换的门后,1天车在主持人选择的门后。等等,这里主持人要作弊,按概率分配下来,主持人最初想要打开的门后是车时,主持人会选择打开两扇门中的另外一扇,因此第3天如果参赛者换门的话,要换的门就是主持人刚刚已经确认有车的门!结果就是第1天车在参赛者最初的门后,第2、3天车都在主持人没选的门后(尽管第3天主持人为避免中断节目一度换过门)。因此换门的胜率是2/3!这2/3是由1/3的偶然加上主持人偷偷换选带来的1/3的必然组成的!
如果进行大量重复试验,在1/2结论的规则下,有1/3的试验会被剔除,而在2/3结论的规则下,任何试验都不回被剔除。前一种情况不换门的胜率是1/2 = (1/3 ) / (2/3),总的试验量下降了;后一种情况不换门的胜率1/3 =  (1/3) / (1),总的试验量被人为保持住了。
将1/2的C++代码稍作修改得到2/3的代码:
#include <ctime>
#include <iostream>
enum DoorItem { DT_Sheep, DT_Car, };
int main()
{
    int winGameCnt = 0;                 // 换门赢得节目的次数
    const int MAX_GAME_CNT = 100000;    // 举办节目的次数
    DoorItem doors[3];                  // 三扇门
    srand((unsigned)time(NULL));        // 初始化随机发生器
    for (int i = 0; i < MAX_GAME_CNT; ++i)
    {
        // 随机放置车
        doors[0] = doors[1] = doors[2] = DT_Sheep;
        doors[rand() % 3] = DT_Car;
        // 因为参赛者最初选门的时候,各门无区别,我们让参赛者总是选
        // 第1门,因此主持人总在后两门中随机
        int hostChoice = rand() % 2 + 1;    // 主持人最初的选择
        // 主持人的选择只能是1或者2,因此换门就是3-hostChoice
        if (doors[hostChoice] == DT_Car) hostChoice = 3 - hostChoice; // 主持人换选,避免中断节目
        // 这里我统计参赛者换门赢得节目,让主持人看起来做了点事的样子...
        // 其实如果统计不换门,就会发现主持人就只在瞎折腾
        if (doors[3 - hostChoice] == DT_Car) ++winGameCnt; // 参赛者换门赢得节目
    }
    std::cout
        << "不换门赢得节目的次数:"
        << (1 - (float)winGameCnt / MAX_GAME_CNT);
}

如果认为主持人开到羊只是偶然下的一个即成的事实,本次节目情况只是大量随机事件中的一个普通样本的话,那就不必换门;但如果相信主持人开到羊是必然,节目有特殊的规则的话,换门就有高达2/3的获胜率。无论主持人开门的结果是由以上那种假设导致的,至少换门的胜率不会低于50%。
其实1/2就是纯粹的数学结论,自然规律,而2/3则是人事,是社会,是现实因素。既然三门问题是现实问题,那如果你要作为参赛者,最好就去遵循组织方制定的规则,换门。



正しき者の唇は叡智を陈(の)べ
その舌は正义をものがたる
试练に耐えうる者は幸いなり
何となれば、いったん评価されしときは
人生の王冠を受くるべし
主よ、圣なる炎よ、怜れみ给え
おお、いかに圣(きよ)く、いかに静けく
いかに慈悲深く、いかに情厚く
おお、纯洁なる白百合

使用道具 举报

帖子
1494
精华
0
积分
769
金钱
7219
荣誉
2
人气
18
评议
0
沙发
发表于 2011-8-10 12:31:38 |只看该作者
一这为借口来搞基已经过时了!

使用道具 举报

帖子
627
精华
0
积分
315
金钱
4919
荣誉
0
人气
12
评议
0
板凳
发表于 2011-8-10 12:37:41 |只看该作者
为什么要纠缠与主持人呢。主持人告诉你某一个门后面不是奖品,这本来就是问题的设定条件。根本不需要考虑主持人开了一扇中奖门的问题。

使用道具 举报

帖子
9297
精华
0
积分
4785
金钱
14425
荣誉
13
人气
33
评议
0
地板
发表于 2011-8-10 12:38:49 |只看该作者
总结一下,如果主持人知道哪个门后无奖,而必定打开无奖门的话,剩下那扇门概率是2/3;如果主持人不知道哪个门后无奖而随即打开一扇,碰巧打开了无奖门的话,剩下那扇门概率是1/2. 这两者不矛盾,因为第二种假设下还会出现主持人碰巧打开了有奖门的情况,那时剩下门概率就变成0了,而第一种假设不存在这种情况。

使用道具 举报

帖子
4833
精华
3
积分
3417
金钱
6792
荣誉
40
人气
2
评议
0

5#
发表于 2011-8-10 12:42:17 |只看该作者
icefox1983 发表于 2011-8-10 12:38
总结一下,如果主持人知道哪个门后无奖,而必定打开无奖门的话,剩下那扇门概率是2/3;如果主持人不知道哪 ...

对的!那些写代码的,不过是按2/3或者1/2的某种写法来写而已。
其实原题就问的很好,问你要不要换门,而不直接问你概率,无论哪种理解,换门都不吃亏。

正しき者の唇は叡智を陈(の)べ
その舌は正义をものがたる
试练に耐えうる者は幸いなり
何となれば、いったん评価されしときは
人生の王冠を受くるべし
主よ、圣なる炎よ、怜れみ给え
おお、いかに圣(きよ)く、いかに静けく
いかに慈悲深く、いかに情厚く
おお、纯洁なる白百合

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-27 15:52 , Processed in 0.340842 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到