概率论学习笔记
前言
博主不会做概率题,一遇到这种题就只会通过寻找容易理解的模型来做。但是概率题往往可以用更为抽象的公式来简单解决。
所以我决定系统地学习一下概率论相关的知识。
我学习与参考的材料是 2013年候选队员论文 中 胡渊鸣 的《浅析信息学竞赛中概率论的基础与应用》。可以将本文看作论文的摘录和我个人的一些理解与补充。
定义和公式
概率:对某件事情发生的可能性的度量。
样本空间\(\Omega\):某个随机事件的所有可能结果的集合。论文中提到,在竞赛中,往往可以认为 \(\Omega\) 每个自己都是一个事件。
事件集合\(F\):事件集合是样本空间的所有子集所构成的集合。
概率测度\(P\):是事件集合到实数的一个函数,表示某个事件集合发生的概率。一个合理的概率测度满足3条概率公理。
概率公理:
(1)对于任意事件 \(A\) ,有 \(P(A) \geq 0\) 。
(2)\(P(\Omega) = 1\) 。
(3)对于事件 \(A\) 和 \(B\) ,如果 \(A\cap B = \phi\) ,则 \(P(A\cup B) = P(A) + P(B)\) 。
概率空间:符合要求的三元组 \((\Omega,F,P)\) 为概率空间。
条件概率:条件概率表示在一定条件下某个事件发生的概率。我们往往用 \(P(A|B)\) 来表示当事件 \(B\) 发生时,事件 \(A\) 发生的概率。计算条件概率的公式如下:
\[P(A|B) = \cfrac{P(AB)}{P(B)}\]
这里我们把 \(A\cup B\) 写成了 \(AB\),在后面的表述中, \(A,B\) 也将有相同的含义。
对于上式,当发生特殊情况 \(A\cap B = \phi\) 时,可以得到:
\[{\rm If\ A\cap B = \phi\ \ then\ \ P(A|B) = \cfrac{P(AB)}{P(B)} = P(A)}.\]
全概率公式:如果 \(B_1, B_2, \cdots, B_n\) 是样本空间 \(\Omega\) 的一个划分,那么
\[\begin{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\) 。
\(\rm Bayes\)公式:因为 \(P(A|B)P(B) = P(AB) = P(B|A) P(A)\) ,所以可以得到 \(\rm Bayes\)公式:
\[P(A|B) = \cfrac {P(B|A)P(A)}{P(B)}\]
将 \(\rm 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)}\]
随机变量\(\rm(random\ variable)\):随机变量不是变量,而是定义在样本空间\(\Omega\) 上的一个实值函数。形式化地说
函数 \(X:\Omega\rightarrow \mathbb{R}\) 被称为一个随机变量。
论文中提到,在大多数情况下,有了随机变量之后就可以抛弃对原先样本空间的关注,而是集中注意于对于每个实值,随机变量能取得该值的概率。这个过程实际上是对样本空间重新划分的一个过程,将在这个函数下取得同意实数值的样本空间中的元素合并了。
期望\((\rm expectation)\):是对随机变量表现出的平均情况的一种刻画。
对于一个随机变量,第一其期望如下:
\[\begin{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\) 互相独立。
乘积的期望:如果两个随机变量互相独立,那么其积的期望等于其期望的积。证明:
\[\begin{eqnarray*} E[X_1X_2] &=& \sum_{x\in(X_1X_2)(\Omega)} xP(X_1X_2=x)\\ &=&\sum_{x\in (X_1X_2)(\Omega) }\sum_{x_1\in X_1(\Omega)} x_1 \cfrac x {x_1} P(X_1 = x_1)P(X_2 = \cfrac x {x_1})\\&=&\sum_{x_1\in X_1(\Omega)} x_1 P(X_1 = x_1)\sum_{x\in (X_1X_2)(\Omega) }\cfrac x {x_1} P(X_2 = \cfrac x {x_1})\\&=&\sum_{x_1\in X_1(\Omega)} x_1 P(X_1 = x_1)\sum_{x_2\in 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+\beta X_2] = \alpha E[X_1] + \beta E[X_2]\]
全期望公式:类似于条件概率,全期望公式是指当一个时间一定发生时,随机变量 \(X\) 的期望。
首先我们写出条件概率的式子:
\[P((X|A) = x) = \cfrac{P(X=x,A)}{P(A)}\]
接下来给出全期望公式:
\[E[E[X|Y]] = E[X]\]
证明:
\[\begin{eqnarray*} E[E[X|Y]] &=& \sum_{y\in Y(\Omega)} E[X|Y=y] P(Y=y)\\&=& \sum_{y\in Y(\Omega)} \sum_{x\in X(\Omega)}x P(X=x|Y=y)P(Y=y)\\&=&\sum_{y\in Y(\Omega)} \sum_{x\in X(\Omega)}x P(X=x,Y=y) \\&=&\sum_{x\in X(\Omega)}x\sum_{y\in Y(\Omega)} P(X=x,Y=y)\\&=& \sum_{x\in X(\Omega)} xP(X = x)\\&=&E[x] \end{eqnarray*}\]
Markov不等式:
\[\forall a>0,P(X\geq 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_{e\in {\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(X\geq n^2)\leq \cfrac{E[x]}{n^2}=\cfrac 1n \]
一般来说 \(n\) 的大小为 \(10^5\) 级别。所以退化的概率的一个上限在 \(10^{-5}\) 级别,非常小,不必担心。事实上,这只是一个不紧的上界,也许可以通过更加精妙的证明得到更好的上界。
概率转移网络上的经典问题
概率转移网络是一个有向网络,由点集(状态集)V,转移概率矩阵(一个二元函数)$$G\ :\ V\times V \rightarrow [0,1]$$ ,以及起点 \(v_0\) 组成。其中,对于每个 \(u\in 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 = \begin{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_i\end{bmatrix}\]
假设我们已经推得了某个区间的最后一个位置的概率行向量。接下来我们还要加上右侧已知信息对概率期望的影响。
我们直接求得 \(L_{i+1}\),根据条件概率的计算公式,可以直接计算答案。
为了方便,我们可以设 \(P(R_0) = 0, P(B_0) = 1\)。
由于本题涉及 double 类型的精度问题,所以对矩阵求逆会导致过大的精度误差,所以只能使用线段树来得到区间矩阵积。
每次在修改操作的时候重算 \(O(1)\) 个区间对答案的贡献即可。
时间复杂度 \(O(m\log n)\) 。