最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • javascript 验证“三门问题”

    正文概述 掘金(晴天同学98202)   2021-08-25   491

    这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

    啥是三门问题

    三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论。最初来源于漂亮国的一个游戏类的电视节目。节目名字叫做《Let's make a deal》.

    从名字上大概能看出,节目就是出一些选择性质的题目,让参与者做决定。

    下面是一道题目的内容:

    “假设你正在参加一个游戏节目,你被要求在三扇门中自由选择一扇门:其中一扇后面有一辆车;其余两扇后面则是山羊。你将得到的奖品是你选择的门的后面的物品(山羊或者汽车)。

    你随机选择了一扇门,假设是一号门,然后知道门后面有什么的主持人,开启了另一扇后面有山羊的门,假设是三号门。他然后问你:“你想改变之前的选择,重新选择二号门吗?”

    在这个题目中,选中门后有汽车的门奖品就是汽车,否则奖品就是山羊,大部分参与者都希望自己的奖品是汽车。

    那么在主持人问你之后,你会改变自己最开始选择的门吗?会从一号门选择二号门吗?

    你也许会疑问,这有什么好纠结的,换不换不是一样的吗?

    其实这个问题本质是:换另一扇门是否会增加参赛者赢得汽车的概率?

    如果严格按照上述题目的条件,即主持人清楚地帮你打开了一扇背后是山羊的门,那么答案是:会。

    不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

    看到了这里,对于你或者我或者大部分人而言,都觉得这个答案十分的出乎意料。因为日常的生活赋予我们的直觉会让我们觉得,换或者不换,赢得汽车的概率都是三分之一才对。

    这就是有趣的地方,虽然这个问题的答案在逻辑上并不自相矛盾,但十分的违反直觉。所以这个问题曾引起一阵广泛而热烈的讨论。

    逻辑上的解释

    逻辑学上有很多种解释的方案,我这里只列举两种逻辑学解释。

    第一种解释

    现在给你两种方案:

    第一种,你选择一扇门,然后坚定不移的打开它,如果它有汽车,那么你中奖了

    第二种,你选择一扇门,然后排除此门打开另外两道门,如果打开的两道门中有汽车,那么你中奖了。

    聪明如你,肯定体会到了这两种方案的差异。 其实不换门,就是第一种方案,而换门,就等同于你采用了第二种方案。

    第二种解释

    换门本质上采用了排除法。在你还没有作出选择的时候:

    • 选中山羊的概率是三分之二
    • 选中汽车的概率是三分之一。

    所以第一次你的随机选择,大概率选到了山羊(因为是三分之二的概率),然后主持人又帮你排除了另一扇有山羊的门。

    这个过程就相当于你连续选择了两次:

    • 你有三分之二的概率选择了一道有山羊的门
    • 主持人帮你选择了另一道山羊的门

    此时用排除法,将这两扇门排除-(1- 2/3 - 1)= 2/3

    那么剩下的那一扇门有汽车的概率是三分之二。

    画图来说明

    我知道很多人还是不服气的,即便上面逻辑上的解释,也不是那么容易让人信服。

    所以我画了一张图来说明答案。

    javascript 验证“三门问题” 从图中显而易见的看出,当你改变选择时,有三分之二的机会得到汽车,否则,有三分之二的机会得到山羊。

    通过程序来验证

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <meta name="x5-orientation" content="landscape" />
        <meta name="x5-fullscreen" content="true" />
        <meta name="screen-orientation" content="landscape" />
        <meta name="full-screen" content="true" />
        <meta name="viewport" content="uc-fitscreen=yes" />
        <meta name="nightmode" content="disable" />
        <title>三门问题验证</title>
        <style>
        html,
        body {
            font-size: 100px;
            height: 100%;
        }
    
        #app {
            height: 6rem;
            font-size: 0.4rem;
            text-align: center;
            display: flex;
        }
    
        button {
            font-size: 1rem;
            background-color: #0f0;
            margin: auto;
            border-radius: 8px;
        }
        </style>
    </head>
    
    <body>
        <div style="text-align:center">验证三门问题</div>
        <div id="app">
            <button onclick="init()">click ME !!!</button>
        </div>
    </body>
    <script>
    var n = 10000,
        win = 0,
        lose = 0,
        doors = null,
        chooseIndex = NaN,
        leftDoor = NaN;
    
    function random(ind) {
        return Math.floor(Math.random() * ind)
    }
    
    function randerDoors() { // 随机在一个门后放置汽车
        doors = (new Array(3)).fill(false) // 初始化门后全部是山羊
        var ind = random(3)
        doors[ind] = true
    }
    
    function chooseDoors() { // 参与者随机选择一扇门
        chooseIndex = random(2)
    }
    
    function openDoors() { // 主持人随机打开一扇门
        if (doors[chooseIndex]) { // 如果参与者第一次选中的汽车
            const ind = random(2)
            leftDoor = (chooseIndex + ind) % 3 // 剩下的那个门的索引
            lose++
        } else { // 如果参与者第一次选中的山羊
            if (doors[(chooseIndex + 1) % 3]) {
                leftDoor = (chooseIndex + 1) % 3
            } else {
                leftDoor = (chooseIndex + 2) % 3
            }
            win++
        }
    
    }
    var el = document.getElementById('app')
    
    function init() {
        for (var i = 0; i < n; i++) {
            randerDoors()
            chooseDoors()
            openDoors()
        }
        el.innerHTML = '<p>You have win <strong>' + win + '</strong> cars and <strong>' + lose + '</strong> sheep</p>'
    }
    </script>
    
    </html>
    

    注释写的很清楚,大家把代码复制到本地,就可以在浏览器打开看结果了。


    起源地下载网 » javascript 验证“三门问题”

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元