三門問題詳解(附C語言實現)

三門問題——違背直覺的概率現象

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

  1. 第一種方法是從概率合併的角度,最容易理解也最直觀,在遊戲開始之初,A、B、C三扇門的背後有汽車的概率分別爲三分之一,那麼A門+B門背後有汽車的概率將會是三分之二,而主持人打開B門之後,A門+B門背後汽車的概率爲三分之二的這個事實並不會發生改變,那麼這就意味着,此時A門背後有汽車的概率已經從最初的三分之一上升到三分之二。主持人打開空門的操作將換門的選項從兩個減少到一個,所以概率也隨之上升了,所以當然應該改變選擇。考慮一種極端的情況,即10000扇門的情況下,換門的成功率將提升至9999/10000。

  2. 第二種方法則是老老實實的列表計算,該方法最簡單,只需列舉各種情況再計算相應概率即可。
    在這裏插入圖片描述
      直白地講,就是把第一次選擇和第二次選擇的所有情況進行細化,分析出每一種情況下的條件概率,再把這些概率進行加總,得到了最終的結果:

    不換門的獲獎率 = (1/3 X 100%)+(1/3 X 0%)+(1/3 X 0%)=1/3
    換門的獲獎率 = (1/3 X0%)+(1/3 X 100%)+(1/3 X 100%) =2/3

      用圖解的方式也可以更直觀地進行理解:在這裏插入圖片描述

  3. 第三種方法則是通過貝葉斯公式,即
    加粗樣式
    也可以很簡單地解決這個問題,但是得明確裏面的事件A和事件B是代指什麼。
      我們用事件A代表你第一次選擇的門後是汽車,B代表主持人翻開的門後是山羊。那麼已知B的情況下,A發生的條件概率 P{A|B} 顯然,第一次選對的概率,即 P{A}=1/3,無需贅述。但是由於不知道主持人的行爲,所以無法計算 P{B|A} 和P{B}。
      那麼我們具體分析:因爲主持人知道門後對應的東西,所以只選擇開啓有羊的門,於是主持人一定選擇山羊,事件 B 一定發生:P{B|A} = 1 主持人一定選擇山羊,事件 B 一定發生:P{B} = 1,那麼 P{A|B} = 1/3,所以不換的勝率是1/3,因此一定要換。

      那麼如果改變條件,主持人並不知道門後有什麼東西,那麼:P{B|A} = 1而 P{B} = 1/3 * 1 + 2/3 * 1/2 =2/3,得到 P{A|B} = 1/2 。
      也就是是說,這種情況下才是換與不換都無所謂的1/2,而顯然要求的主持人不知道門後有什麼東西,和遊戲的限制條件不符合。也就是說1/2肯定是錯誤的。
      多的不說了 附上代碼與實驗截圖
    在這裏插入圖片描述

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<typeinfo>
#include<Windows.h>
static const int testCount = 10000;
static int findSwap(int *p, int n, int choose);
int main() {
	int n;
	printf("請輸入門數\n");
	scanf("%d", &n);
	while (n < 1) {
		printf("請重新輸入門數\n");
		scanf("%d", &n);
	}
	int *p = (int *)malloc(sizeof(int)*n);
	
	int swapSuccess = 0;
	int nonSwapSuccess = 0;
	srand((unsigned)time(0));

	//重複10000次隨機試驗
	for (int i = 0; i < testCount; i++) {

		//有汽車的那扇門
		int car = 1 + rand() % n;
		//printf("汽車在第%d 扇門\n",car);

		for (int i = 0; i < n; i++) {
			*(p + i) = 0;
		}

		//參賽者選擇的門
		int choose = 1 + rand() % n;
		//printf("參賽者選擇第%d 扇門\n", choose);

		int count = 0;
		for (int i = 1; i <= n; i++) {
			if (i != choose && i != car) {
				//printf("打開第%d 扇門\n", i);
				*(p + i - 1) = 1;
				count++;
			}
			if (count == n - 2) {
				break;
			}
		}
		int swap = findSwap(p, n, choose);
		//printf("剩下第%d 扇門,是否交換?\n", swap);
		//swap == car ? printf("交換成功\n") : printf("交換失敗\n");
		swap == car ? swapSuccess++ : nonSwapSuccess++;

	}

	printf("交換的成功次數爲%d 不交換的成功次數爲%d\n", swapSuccess, nonSwapSuccess);
	printf("交換成功率爲%4.2f\n", swapSuccess*1.0 / testCount);
	
	system("pause");
}

//選擇是否交換的門
static int findSwap(int *p,int n,int choose) {
	for (int i = 1; i <= n; i++) {
		if (*(p + i-1)==0 && (i!=choose) ) {
			return i;
		}
	}
	return -1;
}

  選擇3門和10000門並重復進行10000次的隨機試驗
  實驗截圖如下:
在這裏插入圖片描述
在這裏插入圖片描述
  最後,讓我們來致敬一下 “三門問題” 的提出者,集才華和美貌於一身的天才人物:瑪麗蓮·沃斯·莎凡特——吉尼斯認定的最高智商人(IQ:228)。(我記得考研英語有一篇閱讀也提到過她的)

在這裏插入圖片描述
  莎凡特針對三門問題,在她專欄的回答是改選會更有優勢。
  她認爲換了之後有2/3的概率贏得車,不換的話概率只有1/3。莎凡特當時做作出了當時莎凡特的回答在美國也是引起了激烈的爭議,甚至於一些批評和人身攻擊:

  當時人們非莎凡特寄來了數千封抱怨信,很多寄信人都是具備一定文化水平的老師或學者,不少人對此猛烈批評,甚至使用了十分過激的攻擊字眼。
  比如一位來自佛羅里達大學的讀者寫道:“這個國家已經有夠多的數學文盲了,我們不想再有個世界上智商最高的人來充數!真讓人羞愧!”
  另一個人陰陽怪氣地對她嘲諷道:“我看你就是那隻山羊!”
  美國陸軍研究所的工作人員埃弗雷特·哈曼寫道,“如果連博士(莎凡特)都會犯這種錯誤,我看這個美國馬上要陷入嚴重的災難中了。”
  因爲直覺告訴這些寫信的人們:如果被打開的門後什麼都沒有,這個信息會改變剩餘的兩種選擇的概率,哪一種都只能是1/2。

  經過統計,持有上述這種觀點的大約有十分之一是來自數學或科學研究機構,有的人甚至有博士學位。
  還有大批報紙專欄作家也開始加入了聲討莎凡特的行列。在這種情況下,莎凡特選擇向全國的讀者和粉絲求救,後來有數萬名學生進行了模擬試驗。一個星期後,實驗結果從全國各地反饋回來,經過莎凡特的統計得出,結論就是2/3和1/3。
  例如根據福爾曼大學的埃勒維茲·魯迪的反饋,因爲數學課上的大部分老師認爲莎凡特是錯誤的。於是25名老師帶着學生們去中學做了大量實驗,得到了1480個樣本,最後卻證明了莎凡特是正確的,即應該換門。
  雖然上個世紀七十年代,電腦和模擬仿真都是稀罕物。但隨後,麻省理工的數學家和阿拉莫斯國家實驗室的程序員都宣佈,他們用計算機進行模擬實驗的結果,支持了莎凡特的答案。

  時隔三十多年後,著名節目《流言終結者》也做實驗,一是由於該問題的反直覺,即使時隔多年,照樣有人會感到困惑,其次是傑米和亞當這對好基友,再次強有力的印證了莎凡特的答案。
  看吧,其中後面的板子共有49個格子,左邊的代表是不換,右邊的代表是換,隨機進行49次實驗,板子上被標紅的代表選擇到了跑車大獎。換羽不換的孰優孰劣,一目瞭然。以至於主持人稱讚道“Totally confirmed”。

  質疑精神是值得鼓勵的,它推動着科學的發展和人類思想的進步,當你在現實中面臨諸如此類的“三門問題”時,應時刻保留一份警醒——感覺可能會欺騙自己。


本文參考資料:

  1. https://blog.csdn.net/bjweimengshu/article/details/93554722
  2. https://baijiahao.baidu.com/s?id=1604863307926406800&wfr=spider&for=pc
  3. https://www.jianshu.com/p/b1fb755945c0?from=groupmessage
  4. https://www.zhihu.com/question/26709273
  5. https://www.bilibili.com/video/BV1ws411j7Mb?from=search&seid=11705288125892203672
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章