搜狐2017實習生筆試題_機率問題

題目

工程師 M 發明了一種遊戲:M 將一個小球隨機放入徹底相同的三個盒子中的某一個,玩家選中裝有球的盒子即獲勝;開始時 M 會讓玩家選擇一個盒子(選擇任何一個獲勝機率均爲 1/3 );玩家作出選擇後,M 會打開沒有被選擇的兩個盒子中的一個空盒,此時 M 會詢問玩家是否更改選擇(能夠堅持第一次選擇,也能夠選擇另外一個沒有打開的盒子),下列敘述正確的有()。java

A. 改選後,玩家獲勝的機率仍是 1/3
B. 若不改選,玩家的獲勝機率是 1/2
C. 不管怎麼選擇,獲勝的機率都是 1/2
D. 堅持原來的選擇獲勝機率更高
E. 選擇另外一個沒有被打開的盒子獲勝機率更高
F. 獲勝機率取決於隨機因素(如小球的實際位置)面試

2、解題

一開始看到這個題的時候,本人堅決果斷的選擇了 A ,而後再仔細想了一下,不對啊,這題跟經典的三門問題很像,並且也要知道玩家第一次選擇和是否更改選擇的兩個事件不是相互獨立的,所以答案不是這個了,具體答案是什麼呢?也歡迎讀者留言寫下本身的看法。dom

再說答案以前,先來了解一下經典的三門問題:ui

三門問題( Monty Hall problem )亦稱爲蒙提霍爾問題、蒙特霍問題或蒙提霍爾悖論,大體出自美國的電視遊戲節目 Let’s Make a Deal 。問題名字來自該節目的主持人蒙提·霍爾( Monty Hall )。參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車,選中後面有車的那扇門可贏得該汽車,另外兩扇門後面則各藏有一隻山羊。當參賽者選定了一扇門,但未去開啓它的時候,節目主持人開啓剩下兩扇門的其中一扇,露出其中一隻山羊。主持人其後會問參賽者要不要換另外一扇仍然關上的門。問題是:換另外一扇門會否增長參賽者贏得汽車的機率?若是嚴格按照上述的條件,即主持人清楚地知道,哪扇門後是羊,那麼答案是會。不換門的話,贏得汽車的概率是1/3。換門的話,贏得汽車的概率是2/3。
這個問題亦被叫作蒙提霍爾悖論:雖然該問題的答案在邏輯上並不自相矛盾,但十分違反直覺。這問題曾引發一陣熱烈的討論。spa

三門問題的解法:

三門問題一共有三種可能性:
(1)參賽者挑山羊一號,主持人挑山羊二號。轉換將贏得汽車。
(2)參賽者挑山羊二號,主持人挑山羊一號。轉換將贏得汽車。
(3)參賽者挑汽車,主持人挑羊一號。轉換將失敗和參賽者挑汽車,主持人挑羊二號。轉換將失敗,不會贏得汽車。.net

這裏要注意了,第三種可能性的時候,機率仍是 1/3 ,由於 1/3*1/2+1/3*1/2=1/3 ,因此上面的三種可能性都是相等的,都是 1/3 。從上面對的三種狀況能夠看到,若是參賽者從新選擇另外一扇門的話, 獲得汽車的機率就會變成 2/3 ,因此從新選擇會更加的有利。一開始這個解釋都不會讓人信服的,由於此時咱們還在糾結的是一開始分配的機率是1/3,而後去除了一個沒有汽車的門後,兩個選擇,因此機率就是 1/2 ,還有一種糾結就是不管咱們怎麼選,三種狀況,每次選擇的機率都是 1/3 啊,固然,第二種選擇很容易就給推翻了,由於主持人明確的去除了一個不會獲得汽車的門,所以機率不會是 1/3 的。一開始我也在糾結這個,查了一下,就經典的解釋就是把門的數量增多,好比:code

如今擺在咱們面前的有100扇門,只有其中一扇門後是汽車,而其餘的99扇門後都是山羊。好了,你選擇其中一扇門。天然,你選取汽車的機率只有1/100。遊戲

而後,知道汽車存放處的主持人一口氣打開了99扇門中的98扇,其後面都是山羊。此時你能夠堅持最初的選擇,也能夠改變選擇。你是否應當改變選擇?你是否還認爲在你最初選擇的門與其餘99扇門中惟一沒有打開的那扇門背後有汽車的機率是相同的?事件

事實是,若是你拒絕改變,你只有在一開始就選擇了正確的門的狀況下才能獲取汽車,這個機率只有1%。在另外99%的狀況下,你最初選擇的是一個後面是山羊的門,而另外的98扇已經打開,你這時改變最初的選擇就能夠成功。因此,在99%的機率下,改變選擇是正確的。get

三門問題是一個理性選擇和機遇博弈問題,是關於不徹底信息博弈中如何正確理解機率的含義和機率變化的問題。可見這個問題咱們仔細琢磨一下,仍是能夠作出正確的選擇的。

顯然這個仍是不能太讓人接受,所以寫個 Java 程序來模擬一下這個場景:

package com.liangdianshui;

import java.util.Random;

public class MontyHallProblem {

    public static void main(String[] args) {
        // 重複五次
        for (int i = 0; i < 4; i++) {
            montyHallProblem();
            System.out.println("----------------------------------");
        }
    }

    public static void montyHallProblem() {
        Random random = new Random(); // 這裏不討論Random爲僞隨機的問題
        int changeCount = 0;
        for (int i = 0; i < 1000000.0f; i++) { // 模擬一百萬次
            // 假設有三個門
            int[] doors = new int[3];

            // 隨機抽取一扇門 ,在門後放獎品
            int rIndex = random.nextInt(3);
            doors[rIndex] = 1;

            // 觀衆選的門號
            int randomSelect = random.nextInt(3);

            // 主持人從剩下的兩扇門中排除一個
            while (true) {
                int randomDelete = random.nextInt(3);
                // 主持人不會打開參賽者已經選了的門(排除參賽者選擇的門)
                if (randomDelete == randomSelect) {
                    continue;
                }
                // 主持人不會打開有獎品的門(排除有獎品的門)
                if (doors[randomDelete] == 1) {
                    continue;
                }

                for (int j = 0; j < 3; j++)// 換門
                {
                    if (j == randomSelect)// 不換門(由於咱們要獲得的是換門的機率,所以把不換門的排除掉)
                        continue;
                    // 排除主持人打開了那個門(由於門已經打開,因此不能換,排除掉)
                    if (j == randomDelete)
                        continue;
                    if (doors[j] == 1) {
                        changeCount++;// 換了門後中獎的次數
                        break;
                    }
                }
                break;
            }
        }
        System.out.println("換門中獎率:" + changeCount / 1000000.0f);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

最後運行的結果:

三門問題JAVA運行結果

根據結果可見,這裏重複了四次,每次都模擬了一百萬次的選擇換門的狀況,發現換門中獎的概念都是 0.66 左右,也就是 2/3 。

總結

可見咱們這個面試題跟三門問題基本同樣,因此最終選擇的答案是E,也就是選擇另外一個沒有被打開的盒子獲勝機率更高。

相關文章
相關標籤/搜索