[學習筆記] 概率與期望及其應用

前言

這是一篇初學者的學習筆記,可能有些不準確或者遺漏的地方,還請各位指出。

可以通過 目錄 或者 Ctrl + F 尋找所需內容。

點擊展開目錄

引入 – 蒙提霍爾問題

如果不需要可以跳過。

你正在參加活動。在你面前有三扇關閉的門,其中一扇門後面是獎品,另外兩扇門後面是空的。你希望能獲得獎品。

在這個題目背景下,有以下幾個問題:


你選定了一扇門後直接打開。

此時獲得獎品的概率為 \(\frac {1} {3}\)


在你選定了一扇門後,主持人隨機打開剩下兩扇門中的一扇,如果發現是空的,他會問你是否更換選擇。你的決定是?

考慮以下情況:

  • 你最開始選的門為獎勵門(概率為 \(\frac{1} {3}\)),在主持人開了空門(概率為 \(\frac{1} {2}\))後,選擇換門。獲得獎品的概率為 \(0\)
  • 你最開始選的門為獎勵門(概率為 \(\frac{1} {3}\)),在主持人開了空門(概率為 \(\frac{1} {2}\))後,選擇不換門。獲得獎品的概率為 \(\frac{1} {3}\)
  • 你最開始選的門為空門(概率為 \(\frac {1} {3}\)),在主持人開了空門(概率為 \(\frac {1} {2}\))後,選擇換門。獲得獎品的概率為 \(\frac {1} {3}\)
  • 你最開始選的門為空門(概率為 \(\frac {1} {3}\)),在主持人開了空門(概率為 \(\frac {1} {2}\))後,選擇不換門。獲得獎品的概率為 \(0\)
  • 你最開始選的門為空門(概率為 \(\frac {1} {3}\)),在主持人開了獎勵門(概率為 \(\frac {1} {2}\))後,選擇換門。獲得獎品的概率為 \(0\)
  • 你最開始選的門為空門(概率為 \(\frac {1} {3}\)),在主持人開了獎勵門(概率為 \(\frac {1} {2}\))後,選擇不換門。獲得獎品的概率為 \(0\)

綜上,無論換不換門,獲得獎品的概率都為 \(\frac{1} {3}\)


在你選定了一扇門後,主持人打開剩下兩扇門中的一扇空門,然後他問你是否更換選擇。你的決定是?

考慮以下情況:

  • 你最開始選的門為獎勵門(概率為 \(\frac{1} {3}\)),在主持人開了空門後,選擇換門。獲得獎品的概率為 \(0\)
  • 你最開始選的門為獎勵門(概率為 \(\frac{1} {3}\)),在主持人開了空門後,選擇不換門。獲得獎品的概率為 \(\frac{1} {3}\)
  • 你最開始選的門為空門(概率為 \(\frac{2} {3}\)),在主持人開了空門後,選擇換門。獲得獎品的概率為 $\frac{2} {3} $。
  • 你最開始選的門為空門(概率為 \(\frac{2} {3}\)),在主持人開了空門後,選擇不換門。獲得獎品的概率為 \(0\)

綜上,換門獲得獎品的概率為 \(\frac {2} {3}\)不換門獲得獎品的概率為 \(\frac {1} {3}\)


通過以上問題的討論,你已經初步接觸了概率論。下文會繼續講解相關內容。

1. 事件的概念、運算與關係

1.1 基礎概念

1.1.1 隨機試驗

具有以下特點的試驗稱為隨機試驗

  • 試驗可在相同條件下重複進行。
  • 試驗可能出現多種結果,且試驗前已知所有結果的可能性。
  • 無法預測試驗出現哪一結果。

通常用 \(E\) 來表示隨機試驗。

舉個栗子:

  • E1:搖一次骰子,觀察點數出現情況。
  • E2:拋一次硬幣,觀察正反面出現情況。

1.1.2 基本事件

隨機試驗中可能出現的每一個結果,也稱樣本點。記作 \(\omega\)

舉個栗子:

  • 前文 E1 有六個基本事件,其中第 \(i\) 個基本事件為出現點數為 \(i\)
  • 前文 E2 有兩個基本事件,出現正面 和 出現反面。

1.1.3 樣本空間

隨機試驗中所有基本事件構成一個集合,稱為樣本空間。記作 \(\Omega\)

舉個栗子:

  • 前文 E1 的樣本空間為 \(\{1,2,3,4,5,6\}\)
  • 前文 E2 的樣本空間為 \(\{正面,反面\}\)

1.1.4 隨機事件

隨機試驗中部分基本事件構成一個集合,稱為隨機事件。隨機事件是樣本空間的子集。使用大寫字母進行表示。

舉個栗子:

  • 前文 E1 中出現偶數點數的事件可表示為 \(A=\{2,4,6\}\)
  • 前文 E1 中出現奇數點數的事件可表示為 \(B=\{1,3,5\}\)

1.1.5 事件發生

當某一事件所包含的基本事件中至少有一個發生,那麼該事件發生了。

好像有點廢話

1.1.6 必然事件

一定發生的事件。也就是樣本空間 $ \Omega$。

1.1.7 不可能事件

一定不發生的事件。記作 \(\Phi\)(然而我並不是很清楚這是什麼符號,有沒有大佬給個解答)


1.2 事件運算

1.2.1 事件的和(並)

事件 \(A\) 與 事件 \(B\) 至少有一個發生,這個事件稱為 事件 \(A\) 與 事件 \(B\) 的和(並),記作 \(A+B\)\(A\cup B\)

舉個栗子:

\(A=\{1,2\}\)

\(B=\{3,4,5\}\)

\(A+B=\{1,2,3,4,5\}\)

1.2.2 事件的差

事件 \(A\) 發生而 事件 \(B\) 不發生,這個事件稱為 事件 \(A\) 與 事件 \(B\) 的差,記作 \(A-B\)\(A-B=\complement_A(A\cap B)\)

舉個栗子:

\(A=\{1,2,4,5\}\)

\(B=\{1,4\}\)

\(A-B=\{2,5\}\)

1.2.3 事件的積(交)

事件 \(A\) 與 事件 \(B\) 同時發生,這個事件稱為 事件 \(A\) 與 事件 \(B\) 的積(交),記作 \(AB\)\(A\cap B\)

1.2.4 推廣

事件的和與積可推廣到多個事件,而差不可以。

為什麼差不可以推廣?

和與積的推廣長這樣:

\(A+B+C=A\cup B\cup C\)

\(ABC=A\cap B\cap C\)

然而當你計算差時:

\(A-B-C=(A-B)-C=\complement_A(A\cap B)-C=\complement_{\complement_A(A\cap B)}(\complement_A(A\cap B)\cap C)\)

它似乎……不大一樣呢?


1.3 事件關係

1.3.1 包含

若 事件 \(A\) 發生,那麼事件 \(B\) 必然發生。

具體表示 \(A\subset B\) 或者 \(B\supset A\)

注意:\(\Phi \subset A\subset\Omega\)

1.3.2 相等

\(A\subset B\)\(B\subset A\),那麼 \(A=B\)

1.3.3 互斥

若 事件 \(A\) 與 事件 \(B\) 不能同時發生(\(AB=\Phi\)),則稱 事件 \(A\) 與 事件 \(B\) 互不相容互斥\(A\)\(B\) 互不相容意味着 \(A\)\(B\) 不含公共基本事件。

1.3.4 對立(互逆)

若 事件 \(A\) 與 事件 \(B\) 發生了有且僅有一個,且 \(A\cup B=\Omega\)\(A\cap B=\Phi\),則稱 事件 \(A\) 與 事件 \(B\) 對立(互逆)。

其中 事件 \(B\) 叫做 事件 \(A\) 的逆事件,記作 \(B=\overline{A}\)。事件 \(A\) 叫做 事件 \(B\) 的逆事件,記作 \(A=\overline{B}\)

1.3.5 舉例理解

進行三次射擊,\(A_i\) 表示第 \(i\) 次擊中。

\(A_1+A_2\) 表示前兩次射擊至少擊中一次

\(\overline{A_2}\) 表示第二次未擊中。

\(A_2-A_3=\complement_{A_2}(A_2\cap A_3)=A_2\overline{A_3}\) 表示第二次擊中而第三次未擊中。


2. 概率

2.1 概率的數學定義

\(\Omega\) 是隨機試驗 \(E\) 的樣本空間,找到一個對應法則,使得 \(E\) 的每一個事件 \(A\) 都對應一個實數,這記為 \(P(A)\)


2.2 概率的性質及應用

2.2.1 概率的性質

  • \(P(\Omega)=1\)。(正則性)
  • \(P(\emptyset)=0\)
  • \(0\leq P(A)\leq1\)。(非負性)
  • \(A_1,A_2,A_3,…,A_n,…\) 互不相容,則 \(P\left(\bigcup_{i=1}^{\infty}A_i \right)=\sum_{i=1}^{\infty}P(A_i)\)。(可列可加性)
  • \(AB=\Phi\),則 \(P(A\cup B)=P(A)+P(B)\)。(有限可加性)(可推廣到 \(n\) 個互不相容的事件)
  • \(P(A)=1-P(\overline{A})\)
  • \(P(B-A)=P(B)-P(AB)\)
  • \(P(A\cup B)=P(A)+P(B)-P(AB)\)

應該不用證明吧?


2.3 條件概率

\(E\) 為一隨機試驗,\(A\)\(B\) 為其中的兩個事件且 \(P(A)>0\),那麼 \(\frac{P(AB)} {P(A)}\) 為發生 事件 \(A\) 的情況下 事件 \(B\) 發生的條件概率,記作 \(P(B|A)\)。所以 \(P(B|A)=\frac{P(AB)}{P(A)}\)。(公式可變形為 \(P(AB)=P(A)\times P(B|A)\)

舉個栗子:

布袋中有 \(3\) 個黑球和 \(2\) 個白球,每次隨機取出一顆球(不放回),求第兩次摸到白球的概率。

  • 如果第一次取出了黑球(概率為 \(\frac{3} {5}\)),那麼袋子中還剩下 \(2\) 個黑球和 \(2\) 個白球,第二次摸到白球的概率為 \(\frac{1} {2}\),該情況的概率為 \(\frac{3} {5}\times\frac{1} {2}=\frac{3} {10}\)
  • 如果第一次取到了白球(概率為 \(\frac{2} {5}\)),那麼袋子中還剩下 \(3\) 個黑球和 \(1\) 個白球,第二次摸到白球的概率為 \(\frac{1} {4}\),該情況的概率為 \(\frac{2} {5}\times\frac{1} {4}=\frac{1}{10}\)

第二次摸到白球的總概率就是 \(\frac{3} {10}+\frac{1} {10}=\frac{2} {5}\)

由條件概率公式可推得 \(P(AB)=P(A\cap B)=P(B)P(A|B)=P(A)P(B|A)\)

3. 公式與模型

3.1 全概率公式

如果事件 \(B_1,B_2,…,B_n\) 兩兩互不相容,且和為全集,\(\forall P(B_i)>0\)

那麼對於任一事件 \(A\) 有:。\(P(A)=\sum_{i=1}^nP(AB_i)=\sum_{i=1}^n(P(A|B_i)\cdot P(B_i))\)

特別地,對於任意兩個隨機事件 \(A\)\(B\)\(A,B\) 對立),有式子 \(P(B)=P(B|A)P(A)+P(B|\overline{A})P(\overline{A})\)


3.2 貝葉斯公式

\(B1,B2,…\) 是樣本空間 $\Omega $ 的一個劃分,則對任一 事件\(A\)\(P(A)> 0\)),有:

\(P(B_i|A)=\frac{P(B_i)P(A|B_i)} {\sum_{j=1}^nP(B_j)P(A|B_j)}\)

上式即為貝葉斯公式,\(B_i\) 常被視為導致試驗結果 \(A\) 發生的」原因「。

貝葉斯公式建立在條件概率的基礎上,尋找事件發生的原因。(即大事件A已經發生的條件下,分割中的小事件Bi的概率)


3.3 波利亞瓦罐模型

一個瓦罐中有 \(n\) 個黑球和 \(m\) 個白球。每次取出一個,記錄其顏色,再將它和另外 \(r\) 個與它同色的球放入瓦罐中,如此循環。

結論1:第 \(k\) 次取到黑球的概率為 \(\frac{n} {n+m}\),取到白球的概率為 \(\frac{m} {n+m}\)

證明

\(k=1\) 時,取到黑球的概率為 \(\frac{n} {n+m}\),取到白球的概率為 \(\frac{m} {n+m}\)

假設第 \(k\) 次成立。

考慮取到黑球的概率:

\(P(k+1)=\frac{n} {n+m}\cdot\frac{n+r} {n+m+r}+\frac{m} {n+m}\cdot\frac{n} {n+m+r}=\frac{n(n+m+r)} {(n+m)(n+m+r)}=\frac{n}{n+m}\)

取到白球的概率:

\(P(k+1)=\frac{n} {n+m}\cdot\frac{m} {n+m+r}+\frac{m} {n+m}\cdot\frac{m+r} {n+m+r}=\frac{m(n+m+r)} {(n+m)(n+m+r)}=\frac{m} {n+m}\)

由數學歸納法得證。

結論2:無論 \(a,b(a\neq b)\) 取什麼值,第 \(a\) 次與第 \(b\) 次同時取出黑(白)球的概率始終相等。

證明

\(P_{a,b}(n,m)\) 為對應的概率,不難求出 \(P_{1,b}=\frac{n} {n+m}\times\frac{n+r} {n+m+r}\)

同樣考慮數學歸納法。

\(P_{a,b}(n,m)=\frac{n} {n+m}\cdot\frac{n+r} {n+m+r}\cdot\frac{n+2r} {n+m+2r}+\frac{m}{n+m}\cdot\frac{n}{n+m+r}\cdot\frac{n+r}{n+m+2r}=\frac{n(n+r)(n+m+2r)}{(n+m)(n+m+r)(n+m+2r)}=\frac{n} {n+m}\cdot\frac{n+r} {n+m+r}=P_{1,2}(n,m)\)

得證。

4. 例題

兩道期望DP題。似乎和上文沒什麼關係???

4.1 綠豆蛙的歸宿

//www.luogu.com.cn/problem/P4316

4.1.1 題目大意

給一張 \(n\) 個點 \(m\) 條邊的有向圖,每條邊有邊權。現從 \(1\) 走到 \(n\),每次等概率選取一條邊走,求路徑總長度的期望。

4.1.2 思路

考慮進行期望DP。

\(f_i\) 表示從點 \(i\) 出發走到點 \(n\) 的期望路徑長度,答案即為 \(f_1\)。初始狀態 \(f_n=0\)

反向連邊建圖,在圖上跑拓撲進行轉移。

具體地講,每次取出一個入度為零的點 \(x\),枚舉它能到的點 \(v\),在正常拓撲的同時轉移,轉移式為 \(f_v=\frac{f_x+w(x,v)} {deg_v}\)

4.1.3 代碼實現

int n, m;
int last[N], cnt;
struct edge {
	int to, next, w;
} e[N << 1];
void addedge(int x, int y, int w) {
	e[++cnt].to = y;
	e[cnt].next = last[x];
	e[cnt].w = w;
	last[x] = cnt;
}
int deg[N], lne[N]; //deg為拓撲所用的入度數, lne為出邊數 
queue <int> s;
double f[N];
void topsort() {
	for (int i = 1; i <= n; i++)
		if (deg[i] == 0) s.push(i);
	while (s.size()) {
		int x = s.front(); s.pop();
		for (int i = last[x]; i; i = e[i].next) {
			int v = e[i].to; deg[v]--;
			f[v] += (f[x] + e[i].w) * 1.0 / lne[v];
			if (!deg[v]) s.push(v);
		}
	}
}
int main() {
	n = read(), m = read();
	for (int i = 1; i <= m; i++) {
		int u = read(), v = read(), w = read();
		addedge(v, u, w); deg[u]++, lne[u]++; //反向建邊 
	}
	topsort();
	printf("%.2lf", f[1]);
	return 0;
}

4.2 [NOIP2016 提高組] 換教室

//www.luogu.com.cn/problem/P1850

4.2.1 題目大意

一共有 \(n\) 個時間節點上安排了課程,對於每個時間節點 \(i\),兩節內容相同的課會佔用 \(c_i\)\(d_i\) 兩間教室。

一般來講,學生需按時間在 \(c_i\) 教室完成第 \(i\) 節課。但他們也可以通過提交申請嘗試更換教室。具體地,申請更換第 \(i\) 節課的教室通過的概率為已知實數 \(k_i\),如果申請通過,學生就可以去 \(d_i\) 教室上課。

牛牛可以提交最多 \(m\) 次申請。由於兩教室間的距離和擁堵程度不同,牛牛在前往教室時耗費的體力也不同。當第 \(i(1\leq i<n)\) 節課結束後,他會從這間教室沿耗費體力最少的路徑前往下個教室。

問申請更換教室後 在教室間移動耗費的體力值的總和 的期望值 最小是多少。

4.2.2 思路

需要知道每兩間教室直接的最短路長度時多少。這可以用 Floyed 解決。

然後考慮DP,設 \(f_{i,j,0/1}\) 表示前 \(i\) 個時間節點換了 \(j\) 次教室,第 \(i\) 個時間節點 換/沒換 教室,耗費的體力值的總和的期望最小是多少。

怎麼轉移?

\(f_{i,j,0}=\min\{f_{i-1,j,0}+dis(c_{i-1},c_i),f_{i-1,j,1}+dis(d_{i-1},c_i)\times k_{i-1}+dis(c_{i-1},c_i)\times(1-k_{i-1}) \}\)

\(f_{i,j,1}=\min\{f_{i-1,j-1,0}+dis(c_{i-1},d_i)\times k_i+dis(c_{i-1},c_i)\times(1-k_i),\)\(f_{i-1,j-1,1}+dis(d_{i-1},d_i)\times k_{i-1}\times k_i+dis(d_{i-1},c_i)\times k_{i-1}\times(1-k_i)\)\(+dis(c_{i-1},d_i)\times(1-k_{i-1})\times k_i+dis(c_{i-1},c_i)\times(1-k_{i-1})\times(1-k_i) \}\)

答案即為 \(\min_{i=0}^mmin(f_{n,i,0},f_{n,i,1})\)

4.2.3 代碼實現

dp轉移太長了,代碼很醜,見諒~

const int N = 2010, M = 90010;
const double INF = 1e17;
int n, m, cntroom, cntedge, c[N], d[N];
ll dis[N][N];
double f[N][N][2], k[N];
int main() {
	n = read(), m = read(), cntroom = read(), cntedge = read();
	for (int i = 1; i <= cntroom; i++)
		for (int j = i + 1; j <= cntroom; j++)
			dis[i][j] = dis[j][i] = INF;
	for (int i = 1; i <= n; i++) c[i] = read();
	for (int i = 1; i <= n; i++) d[i] = read();
	for (int i = 1; i <= n; i++) scanf("%lf", &k[i]);
	for (int i = 1; i <= cntedge; i++) {
		int u = read(), v = read(), w = read();
		dis[u][v] = dis[v][u] = min(dis[u][v], w * 1ll);
	}
	for (int p = 1; p <= cntroom; p++)
		for (int i = 1; i <= cntroom; i++)	
			for (int j = 1; j <= cntroom; j++)
				dis[i][j] = min(dis[i][j], dis[i][p] + dis[p][j]);
	for (int i = 0; i <= n; i++)
		for (int j = 0; j <= m; j++)
			f[i][j][0] = f[i][j][1] = INF;
	f[1][0][0] = f[1][1][1] = 0;
	for (int i = 2; i <= n; i++) f[i][0][0] = f[i - 1][0][0] + dis[c[i - 1]][c[i]];
	for (int i = 2; i <= n; i++)
		for (int j = 1; j <= min(i, m); j++) {
			f[i][j][0] = min(f[i - 1][j][0] + dis[c[i - 1]][c[i]], f[i - 1][j][1] + dis[d[i - 1]][c[i]] * k[i - 1] + dis[c[i - 1]][c[i]] * (1 - k[i - 1]));
			f[i][j][1] = min(f[i - 1][j - 1][0] + dis[c[i - 1]][d[i]] * k[i] + dis[c[i - 1]][c[i]] * (1 - k[i]), f[i - 1][j - 1][1] + dis[d[i - 1]][d[i]] * k[i - 1] * k[i] + dis[d[i - 1]][c[i]]* k[i - 1] * (1 - k[i]) + dis[c[i - 1]][d[i]] * (1 - k[i - 1]) * k[i] + dis[c[i - 1]][c[i]] * (1 - k[i - 1]) * (1 - k[i]));
		}
	double ans = INF;
	for (int i = 0; i <= m; i++) ans = min(ans, min(f[n][i][0], f[n][i][1]));
	printf("%.2lf\n", ans);
	return 0;
}

參考資料

蒙提霍爾問題(又稱三門問題、山羊汽車問題)的正解是什麼? – 知乎

第一章, 隨機事件 – 帥爆太陽的男人

概率與期望及其應用 – 曹文

全概率公式、貝葉斯公式推導過程 – ohshit