三門問題詳解+python模擬

最近看了一個很有趣的問題:三門問題

問題簡述:
一個抽獎遊戲。從三扇門(其中有兩扇門後羊,一扇門後是車)中選中門後有汽車的門。
參賽者一開始從3個門裏面選一個門(先不打開門)
然後主持人(主持人知曉門後的情況)把另一個門後是羊的門打開
最後只剩兩扇未知的門,問你要不要把原來的選擇換成另一扇門。

答案:
要換,換了之後,選中車的概率是2/3,選中羊的概率是1/3。

這個問題一開始看了好多解說都覺得好難理解,直到我看了李永樂老師的科普視頻之後,恍然大悟!李老師的b站視頻

疑惑:
大多數人會覺得,最後只剩2扇門(其中一扇是你一開始選的),二選一,應該是1/2的概率纔對,但是注意了。。你一開始選的門是在原來的3扇門中選的,而不是在後面的兩扇門中選的,所以這扇門是車的概率是1/3,不是1/2。主持人的操作不影響它的概率。

解答:

  1. 我們先看不換的情況:
    因爲不換門,後面主持人怎麼操作,對概率沒有影響。就是三選一。
    所以:車的概率:1/3, 羊的概率:2/3

  2. 換的情況:
    這裏注意,主持人把其中一扇羊門打開,所以只剩下一扇車門和一扇羊門。換門就等於改變結果。
    一開始選的如果是車的門,換了另一扇門肯定是羊的門;同理,一開始選的如果是羊的門,換了就是車。
    那我問你
    一開始選中車的概率是多少?1/3。
    一開始選中羊的概率多少?2/3。
    你說換不換?肯定換啊!因爲一開始選的很可能不是車,有2/3的概率是羊,最後換個門就反轉了,有2/3的概率是中車。
    所以:車的概率:2/3, 羊的概率:1/3

圖:
在這裏插入圖片描述
看圖也看的出來,一開始選的羊的,換門後都變成車了

總結:
不換門:中車的概率:1/3, 中羊的概率:2/3
換門:中車的概率:2/3, 中羊的概率:1/3

其實並不是條件概率,只是反轉而已。主持人把一扇羊門打開後,換門就會反轉結果。

舉一反三:
如果有100扇門,只有一扇門後是車,規則也一樣,主持人在你選了一扇門後,把另外的羊門打開,只剩兩扇門,這時候怎麼考慮呢?
只剩最後兩扇門的時候,和三門問題一樣,換門是會反轉結果的,所以換門是最好選擇,因爲你一開始有99/100的概率選中的是羊。換了之後會反轉,羊換車,變成99/100的概率選中車。
不換門:中車的概率:1/100, 中羊的概率:99/100
換門:中車的概率:99/100, 中羊的概率:1/100

題外話:
主持人那麼好都幫你把其他無關選項都排除了。肯定要換啊。。你一開始選的門中車概率比較低,很不靠譜的。

python程序模擬:

import random


class MontyHallGame:
    def __init__(self, door_cnt=3):
        self.door_cnt = door_cnt  # door_cnt >= 3
        self.door_arr = [False] * door_cnt  # False: Goat, True: Car
        self.door_arr[random.randint(0, door_cnt - 1)] = True

    def play(self, select_idx, exchange):
        if exchange:
            # 不管幾道門,最後都會只剩下兩道門給你選擇,互爲對立面,一門有車,一門有羊
            # 選了車的,換門後就是羊;同理選了羊的,換門後就是車
            # 所以只要反轉一下結果就行,不用再模擬主持人的開門操作了
            return not self.door_arr[select_idx]
        else:
            return self.door_arr[select_idx]


if __name__ == '__main__':
    game_times = 100000

    # test1
    door_cnt = 3
    print('{}道門,換與不換各自都玩{}盤遊戲'.format(door_cnt, game_times))

    # 不換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame()
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, False)
        car_cnt += 1 if result else 0
    print('不換門的情況:選中車的有{}盤,選中車的比例{}'.format(car_cnt, car_cnt / game_times))

    # 換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame()
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, True)
        car_cnt += 1 if result else 0
    print('換門的情況:選中車的有{}盤,比例{}'.format(car_cnt, car_cnt / game_times))

    print()

    # test2
    door_cnt = 10
    print('{}道門,換與不換各自都玩{}盤遊戲'.format(door_cnt, game_times))

    # 不換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame(door_cnt)
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, False)
        car_cnt += 1 if result else 0
    print('不換門的情況:選中車的有{}盤,選中車的比例{}'.format(car_cnt, car_cnt / game_times))

    # 換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame(door_cnt)
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, True)
        car_cnt += 1 if result else 0
    print('換門的情況:選中車的有{}盤,比例{}'.format(car_cnt, car_cnt / game_times))

    print()

    # test3
    door_cnt = 100
    print('{}道門,換與不換各自都玩{}盤遊戲'.format(door_cnt, game_times))

    # 不換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame(door_cnt)
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, False)
        car_cnt += 1 if result else 0
    print('不換門的情況:選中車的有{}盤,選中車的比例{}'.format(car_cnt, car_cnt / game_times))

    # 換門
    car_cnt = 0
    for i in range(game_times):
        game = MontyHallGame(door_cnt)
        select_door = random.randint(0, game.door_cnt - 1)
        result = game.play(select_door, True)
        car_cnt += 1 if result else 0
    print('換門的情況:選中車的有{}盤,比例{}'.format(car_cnt, car_cnt / game_times))

# 結果
# 3道門,換與不換各自都玩100000盤遊戲
# 不換門的情況:選中車的有33430盤,選中車的比例0.3343
# 換門的情況:選中車的有66552盤,比例0.66552
#
# 10道門,換與不換各自都玩100000盤遊戲
# 不換門的情況:選中車的有10176盤,選中車的比例0.10176
# 換門的情況:選中車的有90055盤,比例0.90055
#
# 100道門,換與不換各自都玩100000盤遊戲
# 不換門的情況:選中車的有1003盤,選中車的比例0.01003
# 換門的情況:選中車的有99019盤,比例0.99019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章