概率论学习笔记
原文鏈接www.cnblogs.com/zhouzhendong/p/probablity.html
概率論學習筆記
前言
博主不會做概率題,一遇到這種題就只會通過尋找容易理解的模型來做。但是概率題往往可以用更為抽象的公式來簡單解決。
所以我決定系統地學習一下概率論相關的知識。
我學習與參考的材料是 2013年候選隊員論文 中 胡淵鳴 的《淺析信息學競賽中概率論的基礎與應用》。可以將本文看作論文的摘錄和我個人的一些理解與補充。
定義和公式
概率:對某件事情發生的可能性的度量。
樣本空間(Omega):某個隨機事件的所有可能結果的集合。論文中提到,在競賽中,往往可以認為 (Omega) 每個自己都是一個事件。
事件集合(F):事件集合是樣本空間的所有子集所構成的集合。
概率測度(P):是事件集合到實數的一個函數,表示某個事件集合發生的概率。一個合理的概率測度乣滿足3條概率公理。
概率公理:
(1)對于任意事件 (A) ,有 (P(A) geq 0) 。
(2)(P(Omega) = 1) 。
(3)對于事件 (A) 和 (B) ,如果 (Acap B = phi) ,則 (P(Acup B) = P(A) + P(B)) 。
概率空間:符合要求的三元組 ((Omega,F,P)) 為概率空間。
條件概率:條件概率表示在一定條件下某個事件發生的概率。我們往往用 (P(A|B)) 來表示當事件 (B) 發生時,事件 (A) 發生的概率。計算條件概率的公式如下:
[P(A|B) = cfrac{P(AB)}{P(B)}
]
這里我們把 (Acup B) 寫成了 (AB),在后面的表述中, (A,B) 也將有相同的含義。
對于上式,當發生特殊情況 (Acap B = phi) 時,可以得到:
[{m If Acap B = phi then P(A|B) = cfrac{P(AB)}{P(B)} = P(A)}.
]
全概率公式:如果 (B_1, B_2, cdots, B_n) 是樣本空間 (Omega) 的一個劃分,那么
[egin{eqnarray*}P(A) = sum_{k} P(A,B_k) = sum_{k} P(A|B_k)P(B_k)end{eqnarray*}
]
如何理解這個公式?因為 (B_1,B_2,cdots , B_n) 是樣本空間 (Omega) 的一個劃分,所以我們可以認為事件 (A) 被劃分成了事件 (AB_1,AB_2,cdots ,AB_n) ,即 (A = AB_1+AB_2+cdots AB_n) 。
(m Bayes)公式:因為 (P(A|B)P(B) = P(AB) = P(B|A) P(A)) ,所以可以得到 (m Bayes)公式:
[P(A|B) = cfrac {P(B|A)P(A)}{P(B)}
]
將 (m Bayes)公式 與全概率公式結合,可以得到
[P(B_k|A) = cfrac{P(A|B_k)P(B_k)}{P(A)} = cfrac{P(A|B_k)P(B_k)}{sum_{i}P(A|B_j)(B_j)}
]
隨機變量(m(random variable)):隨機變量不是變量,而是定義在樣本空間(Omega) 上的一個實值函數。形式化地說
函數 (X:Omegaightarrow mathbb{R}) 被稱為一個隨機變量。
論文中提到,在大多數情況下,有了隨機變量之后就可以拋棄對原先樣本空間的關注,而是集中注意于對于每個實值,隨機變量能取得該值的概率。這個過程實際上是對樣本空間重新劃分的一個過程,將在這個函數下取得同意實數值的樣本空間中的元素合并了。
期望((m expectation)):是對隨機變量表現出的平均情況的一種刻畫。
對于一個隨機變量,第一其期望如下:
[egin{eqnarray*}E[x] = sum_{omega}P(omega)X(omega) = sum_{x} xP(X = x)end{eqnarray*}
]
隨機變量的獨立性:隨機變量的獨立性是指兩個隨機事件在其輸出層上的屬性。對于兩個隨機事件 (X_1,X_2) 和實數 $x_1 in X_1(Omega), x_2 in X_2 (Omega) $ ,如果 (P(X_1 = x_1,X_2 = x_2) = P(X_1 = x_1) P(X_2 = x_2)) 就稱 (X_1,X_2) 互相獨立。
乘積的期望:如果兩個隨機變量互相獨立,那么其積的期望等于其期望的積。證明:
[egin{eqnarray*} E[X_1X_2] &=& sum_{xin(X_1X_2)(Omega)} xP(X_1X_2=x)\ &=&sum_{xin (X_1X_2)(Omega) }sum_{x_1in X_1(Omega)} x_1 cfrac x {x_1} P(X_1 = x_1)P(X_2 = cfrac x {x_1})\&=&sum_{x_1in X_1(Omega)} x_1 P(X_1 = x_1)sum_{xin (X_1X_2)(Omega) }cfrac x {x_1} P(X_2 = cfrac x {x_1})\&=&sum_{x_1in X_1(Omega)} x_1 P(X_1 = x_1)sum_{x_2in X_2(Omega)} x_2 P(X_2 = x_2)\&=& E[X_1]E[X_2]end{eqnarray*}
]
期望的線性性:不管隨機變量 (X_1,X_2) 是否獨立,總有
[E[alpha X_1+eta X_2] = alpha E[X_1] + eta E[X_2]
]
全期望公式:類似于條件概率,全期望公式是指當一個時間一定發生時,隨機變量 (X) 的期望。
首先我們寫出條件概率的式子:
[P((X|A) = x) = cfrac{P(X=x,A)}{P(A)}
]
接下來給出全期望公式:
[E[E[X|Y]] = E[X]
]
證明:
[egin{eqnarray*} E[E[X|Y]] &=& sum_{yin Y(Omega)} E[X|Y=y] P(Y=y)\&=& sum_{yin Y(Omega)} sum_{xin X(Omega)}x P(X=x|Y=y)P(Y=y)\&=&sum_{yin Y(Omega)} sum_{xin X(Omega)}x P(X=x,Y=y) \&=&sum_{xin X(Omega)}xsum_{yin Y(Omega)} P(X=x,Y=y)\&=& sum_{xin X(Omega)} xP(X = x)\&=&E[x] end{eqnarray*}
]
Markov不等式:
[forall a>0,P(Xgeq a ) leq cfrac{E[X]}a
]
這個不等式給出了隨機變量的取值大于某一個值的概率的一個粗略上界。可以用于證明某些隨機算法的在時間消耗上的可行性。
例子與一些拓展
CF123E 推論
有一棵有根樹 (T),設根節點為 (1) ,(t) 為某個葉子節點,(S(x)) 為節點 (x) 的子節點序列。
計數器 C 的初始值為 0。考慮以下 DFS 的過程(初始時調用 DFS(1) ):
DFS(x){
若 x = t,則終止程序。
random_shuffle(S(x));
For y in S(x) {
C <- C+1;
DFS(y);
}
C <- C+1;
}
求證:若有根樹 (T) 的節點個數為 (n) ,則 (E[C] = n-1) 。
證明
首先,根據期望的線性性,可以得到
[E[C] = sum_{ein {mathbb E}} E[e被經過的次數]
]
其中 “經過邊e一次” 表示沿著邊e遞歸或者回溯一次。
于是我們將所有的邊分兩種來考慮:
從根到 (t) 路徑 (a) 上的邊:顯然這中的邊會且只會被一次。
對于其他的邊,它們只會被經過 0 次或者 2 次。那么,我們要求具體期望的話,需要知道這兩種情況發生的概率之比。考慮一條邊向上第一次走到 (a) 上的節點。對于其子節點的排列,如果它所在的子樹在 (t) 所在子樹之前,那么他就會被訪問,否則就不會,所以概率均為 (0.5) ,所以期望為 (1) 。
由于總邊數為 (n-1) ,每條邊期望被經過一次, 所以 (E[C] = n - 1) 。
最小點覆蓋隨機增量法退化成 (O(n^2)) 的一個概率上界
我們都知道最小點覆蓋的期望時間復雜度為 (Theta (n)) 。
那么它退化為 (n^2) 的概率的一個上界是什么呢?
根據Markov不等式,可得
[P(Xgeq n^2)leq cfrac{E[x]}{n^2}=cfrac 1n
]
一般來說 (n) 的大小為 (10^5) 級別。所以退化的概率的一個上限在 (10^{-5}) 級別,非常小,不必擔心。事實上,這只是一個不緊的上界,也許可以通過更加精妙的證明得到更好的上界。
概率轉移網絡上的經典問題
概率轉移網絡是一個有向網絡,由點集(狀態集)V,轉移概率矩陣(一個二元函數)$$G : V imes V ightarrow [0,1]$$ ,以及起點 (v_0) 組成。其中,對于每個 (uin V),有 (sum_v G[u,v] leq 1) 。
這類問題常常會以 “圖上隨機游走” 的模型出現。設節點 (x) 到達終點的期望步數為 (E[x]) ,建立方程組之后直接采用高斯消元算法即可在 (O(n^3)) 的時間復雜度內解決問題。特別地,當圖較為稀疏時,存在更加高效的做法。但這與概率期望的建模關系不大,主要在于優化稀疏矩陣高斯消元,故這里不做展開。詳見 IOI2019中國國家候選隊論文集 中 王修涵 的《淺談圖模型上的隨機游走問題》。
UOJ#299. 【CTSC2017】游戲
題意自行查看,不再贅述。
做法:
首先,根據期望的線性性,容易得知,總期望等于以已知點為界的各個未知段的期望之和加上已知點的和。易知每段區間的期望只和自身轉移系數和這段區間兩端的已知點信息有關。
考慮到每次加入和刪除信息時,只會影響 (O(1)) 段區間的兩端節點。
形式化地,我們設 (R_i) 表示事件 “(R) 在第 (i) 局中勝出”, (B_i) 表示事件 “(B) 在第 (i) 局中勝出”。
題意中提到的獲勝概率可以表示為
[P(R_i|R_{i-1}) = p_i,P(B_i|R_{i-1}) = 1-p_i\P(R_i|B_{i-1}) = q_i,P(B_i|B_{i-1}) = 1-q_i
]
設行向量 (L_i = [P(R_i),P(B_i),E[R_i],E[B_i]]),其中 (E[R_i],E[B_i]) 到第 (i) 局 (R) 獲勝和 (B) 獲勝時,(R) 獲勝局數的期望。
建立概率期望轉移矩陣 (M_i),使得 (L_i M_i = L_{i+1})。容易得到:
[M_i = egin{bmatrix}p_i& 1-p_i& p_i & 0\q_i& 1-q_i& q_i& 0\0& 0& p_i&1-p_i\0 &0 &q_i &1-q_iend{bmatrix}
]
假設我們已經推得了某個區間的最后一個位置的概率行向量。接下來我們還要加上右側已知信息對概率期望的影響。
我們直接求得 (L_{i+1}),根據條件概率的計算公式,可以直接計算答案。
為了方便,我們可以設 (P(R_0) = 0, P(B_0) = 1)。
由于本題涉及 double 類型的精度問題,所以對矩陣求逆會導致過大的精度誤差,所以只能使用線段樹來得到區間矩陣積。
每次在修改操作的時候重算 (O(1)) 個區間對答案的貢獻即可。
時間復雜度 (O(mlog n)) 。
總結
- 上一篇: 使用OpenGL绘制圆环体(Torus)
- 下一篇: MsgPack MessagePack