概率论学习笔记
1.1 概率/期望
简而言之,一个事件出现的概率就是出现这个时间的情况数与所有可能出现的情况数之比,一个随机变量的期望就是每一种取值乘以概率的加和。
期望最重要的是它的线性性,这是对期望进行 DP 的基础。用代数表示即为 \(E(aX+bY)=aE(X)+bE(Y)\)。
P3802
记 \(N=\sum a_i\),种类为 \(m\),这边取 \(m=7\)。
首先任意 \(m\) 组按顺序的数是独立的,互不相关,这个非常重要。也就是说每一组成立的概率相同。再根据期望的线性性很容易知道答案就是每一组概率加和。
第一组可以算出来是 \(\dfrac{\prod_{i=1}^m a_i}{\prod_{i=0}^{m-1}(N-i)}\),那么每组相同,乘 \(N-6\) 即可。复杂度 \(O(m)\)。
本题最关键的也是不好理解的就是独立性的问题。也就是说我们要证明对于以 \(i,j\) 结尾的两组 \(m\) 个数成立这个事件独立。证明独立性需要证明的就是 \(P(A)P(B)=P(AB)\)。
证明:首先范围不相交明显是独立的,考虑有交的情况。作为 OIer 独立情况不多,暴力跑程序验证即可。
1.2 与动态规划的结合
期望类的动态规划与普通动态规划具有相对不一样的形式,期望/概率也常常与无穷结合不易理解,下面让我们从简单问题出发理解这部分 DP 的方式。
Problem 1
你有一个特殊的骰子,有 \(p\) 的概率得到 \(0\),有 \(1-p\) 的概率得到 \(1\),得到 \(1\) 就停下,否则继续投。求停下的概率。
从数学常识出发我们知道是 \(1\)。从严谨推导的角度讲我们要计算的就是无穷式:
当 \(P\) 趋近于 \(+\infin\) 时原式为 \(1\)。但是我们考虑到每次计算带无穷的和式是比较麻烦的,我们考虑用一种相对简单的方式。定义 \(f\) 表示目前为 \(0\) 最后得到 \(1\) 的概率,则我们有 \(1-p\) 的概率结束有 \(p\) 的概率还是面对 \(f\) 的情况,即:
后文面对无穷和式的形式我们将用这种视角推导。
Problem 2
你有一个特殊的骰子,有 \(p\) 的概率得到 \(0\),有 \((1-p)\) 的概率得到 \(1\),得到 \(1\) 就停下,否则继续投。求投骰子次数的期望。
同样定义 \(f\) 表示期望次数,则 \(f=p(f+1)+(1-p)\)。化简得 \(f=\dfrac{1}{1-p}\)。这个结果与无穷和式结果是一致的,读者可以自证。
后面我们均使用非无穷和式的形式做题。
Problem 3
有 \(n\) 种数字,每次等概率选择一种数字。问选过所有数字的期望选择次数。
在涉及到多种数字的情形,我们设 \(dp_x\) 表示现在有 \(x\) 种数字,凑集 \(n\) 种的期望次数,根据我们的分析 \(dp_x=\dfrac{x}{n}dp_x+(1-\dfrac{x}{n})dp_{x+1}+1\)。解出递推式递推即可。
为什么不采用我们常用的 \(dp_x\) 表示凑到 \(x\) 种的期望呢?我们发现对于无穷的式子,倒着就巧妙自然的包含了无穷,从无穷推无穷就显得自然;正着推不仅次数需要记录,记录后可能到无穷,无法简便计算。
本题加强版为洛谷 P4707。
Problem 4
有 \(n\) 种数字,每次等概率选择一种数字,设选择次数为 \(X\),求 \(E(\dfrac{X(X+1)}{2})\)。
需要避免的一个误区是 \(E(X^2)\not = E(X)^2\)。原式我们应当化为 \(E(\dfrac{1}{2}X^2+\dfrac{1}{2}X)\),得到 \(\dfrac{1}{2}E(X^2)+\dfrac{1}{2}E(X)\)。\(\dfrac{1}{2}E(X)\) 已经可以算出来了,我们计算 \(E(X^2)\)。
\(E(X^2)\) 怎么算呢?我们设一个 \(g_x\),转移就是 \(g_x=\dfrac{x}{n}g_x+(1-\dfrac{x}{n})(g_{x+1}+2dp_{x+1}+1)\)。同样解出递推式即可。
1.3 普通动态规划
有关期望和概率有一个常用的套路就是逆推。
卡牌游戏
从初态出发如果我们不状压我们很难知道最终剩下的是哪些卡牌,但是对于每一位玩家,终态是确定的,这启发我们逆推计算。
还有一个很重要的是在逆推下具体是哪个人被淘汰其实不重要,重要的是我们可以在后面对应上位置。
定义 \(dp_{i,j,k}\) 表示有 \(i\) 个人,\(j\) 位置的胜率。枚举所有可能的卡牌,算出胜率简单计算即可。注意默认庄家为 \(1\) 号位置。最后对号入座即可。时间复杂度 \(O(n^3m)\)。
为了方便,我们可以使用 \(0\) 下标开始的方式计算。
奖励关
看一下 \(n\) 的范围可以状压,定义 \(dp_{i,S}\) 表示选择集合为 \(S\),当前选择次数为 \(i\) 下的最大期望。问题是如果使用枚举前面状态更新新的状态取 \(\max\) 不是很好更新,而我们计算“最优期望”是不能直接往前更新的,因为期望的 \(\max\) 是 \(\max\{\sum\}\),在 \(\sum\) 没算清楚的情况下不能随意更新。
在这些基础上我们考虑倒序更新。我们计算 \(dp_{i,S}\) 的情况下能得到的最优期望,然后我们枚举计算即可。朴素计算时间复杂度 \(O(2^nn^2k)\),然后首先空间上我们可以滚动数组,时间上我们发现已经为 \(1\) 的我们不用再重复计算,这样可以得到一个 \(\dfrac{1}{2}\) 的常数。然后判断我们再用位运算可以得到 \(O(2^nnk)\) 的复杂度。
1.4 期望的拆贡献
期望良好的线性性质使得我们可以将其拆开,从而简化计算加快速度。
常用的一种拆贡献方式是将期望拆成 0/1 从而简化成概率计算问题。
Game on Tree
注意到这是一个停时问题,但是树形结构难以通过一些数字存储,没有办法应用后面的停时定理。考虑拆期望。我们发现每一时刻总是选择一个位置,我们发现事实上期望就是 \(E(\sum f_i)\),其中 \(f_i\) 表示是否选中 \(i\) 节点。然后我们根据线性性拆成 \(\sum E(f_i)\),也就是 \(i\) 节点被选中的概率。
\(i\) 节点被选中的概率只与 \(i\) 的祖先有关,设有 \(dep_i-1\) 个祖先。首先原问题等价于一个随机序列然后我们按顺序将可以删去的删去,那么有关的这 \(dep_i\) 个只有所有祖先都在 \(i\) 后面才可以获得,也就是 \(\dfrac{1}{dep_i}\) 的概率。答案是 \(\sum \dfrac{1}{dep_i}\)。
等价于一个随机序列:我们发现直接考虑每一时刻减小的个数是困难的,因为我们难以知道删去一个子树删去了多少个节点,但是我们可以把这些删去的节点加上,这样子的随机序列只要先删父节点我们就默认子节点不存在,这样子实质上在后面的序列已被删的节点只是“充数”。证明就是假设有 \(n\) 个数但实际有 \(d\) 个虚节点,则原本一个方案的概率是 \(\dfrac{1}{(n-d)!}\),而新的就是 \(\dfrac{\binom{n}{d}d!}{n!}\),等价。
1.5 与高斯消元结合
在 1.2 中我们介绍了与通常 DP 方式较为不同的期望 DP,这也启发我们期望概率类 DP 是可以视为方程甚至方程组计算的。这样期望类 DP 可以自然的与高斯消元结合在一起,去解决一类有后效性无法简便分割的 DP 问题。
游走
假设已经知道编号那么我们用高斯消元简单计算就是 \(O(n^3)\) 的。如果不知道编号我们可以算出每条边经过的期望,也是 \(O(n^3)\) 的。然后根据期望的线性性我们可以知道大配小小配大即可。
XOR 和路径
与上题差不多,我们只需要拆位一下这样子每条边就变成 \(0/1\) 了,然后我们很好算出期望经过的 \(1\) 的次数,高斯消元一下即可,复杂度 \(O(n^3 \log w)\)。
2.1 鞅的停时定理
2.1.1 内容
比较难懂。简而言之,主要解决的是一类问题:我们现在处于一个随机过程(比如说随机获得彩票,获得数字等)达成某一个条件时结束,求结束时间期望,即 \(E(t)\)。我们称 \(t\) 为停时。
鞅的停时定理的运用要求是这个随机过程是离散时间鞅,具体要求就是每一时刻随机变量的期望不变。比如说你初始有 \(m\) 元钱,每一时刻 \(\dfrac{1}{2}\) 的概率获得 \(1\) 元,\(\dfrac{1}{2}\) 的概率减少 \(1\) 元,此时期望钱数不变。则每一时刻的钱数序列这一个随机过程就是离散时间鞅。
鞅的停时定理的表述是:满足停时时刻 \(T\) 对应的随机变量 \(X_T\) 的期望 \(E(X_T)=X_0\),有以下三个充分条件:
- \(T\) 几乎必然有界。中译中一下就是 \(T\) 是一个范围 \([l,r]\),并且边界不是无穷。
- \(E(t)\) 有限,\(X_{i+1}-X_i\) 有界。就是每次增加量都是一个范围,且最终值不是无穷。注意鞅的定义是期望不变,并非增加量不变,因此这一条 \(X_{i+1}-X_i\) 有界是有意义的。
- 当 \(n\) 极大时,\(E(X_n)\) 趋近于 \(0\)。
注意充分条件意味着满足就一定等式成立,但是不满足不一定就不成立。
2.1.2 运用
我们定义一个势能函数 \(\phi(X_i)\)。这个函数需要满足条件:
- \(\phi(X_t)\) 为常数。这个很好理解,这个函数是用来帮助我们解决问题的,不是常数就没有意义了。
- \(E(\phi(X_i)-\phi(X_{i-1}))=-1\)。这个用处是我们会构造 \(Y_i=X_i+i\),我们发现 \(E(Y_i)\) 始终不变,是离散时间鞅,并且满足第二条(\(E(\phi(X_t))\) 常数)用一下停时定理可以得到 \(\phi(X_t)+E(t)=\phi(X_0)\),然后 \(E(t)=\phi(X_0)-\phi(X_t)\),那么我们就可以用初末状态来计算 \(t\) 了。
- 末状态势能唯一。或者有办法算出所有末状态的期望,但一般不这么用。
重点是 \(E(\phi(X_i)-\phi(X_{i-1}))=-1\),这是我们设计函数的关键,通常我们通过列方程推式子/高斯消元/递推,DP 找出这个式子的表达式,这点类似于 SG 函数。
不过牢记分析前后状态要等价,不要一个乘概率一个没有。
Company Acquisitions
我们定义一个 \(\phi_i\) 表示 大小为 \(i\) 的联通块(\(i-1\) 个附属点+一个活跃公司)的势能函数。定义一个局面的总势能函数为 \(\sum \phi_i\)。现在我们需要满足期望差为 \(-1\) 的条件。列出变化量(设 \(i\) (被)收购 \(j\),大小分别为 \(x,y\)):
- 原本:\(\phi_x+\phi_y\)。
- 更换后:\(j\) 的附属公司变成 \(y-1\) 个点,也即 \((y-1)\phi_1\)。然后 \(i\) 所属的变成 \(x+1\) 大小。也即 \(\phi_{x+1}+(y-1)\phi_1\)。当然还有 \(\dfrac{1}{2}\) 的概率是 \(\phi_{y+1}+(x-1)\phi_1\)。
那么我们可以得到 \(\phi_x+\phi_y-1=\dfrac{1}{2}(\phi_{x+1}+\phi_{y+1}+(x+y-2)\phi_1)\)。
注:事实上势能函数要求的是总局面差为 \(-1\),并没有强要求的每个都要差为 \(-1\),但是我们下文会说明对单个分析是充要的。
\(\phi_x-\dfrac{1}{2}+\phi_y-\dfrac{1}{2}=\dfrac{1}{2}(\phi_{x+1}+(x-1)\phi_1)+\dfrac{1}{2}(\phi_{y+1}+(y-1)\phi_1)\)
由于对于任意情况都成立,自然就可以得到 \(\phi_x-\dfrac{1}{2}\phi_{x+1}-\dfrac{1}{2}(x-1)\phi_1=\dfrac{1}{2}\)。这也解释了我们为什么可以单独分析。发现 \(\phi_1\) 不确定,我们由于势能函数我们直接设为 \(0\) 即可。这样得到:
直接运用结论计算即可。
Problem 3
上文 Problem 3 也是停时问题,我们也来用一下停时定理。定义有 \(x\) 种的状态为 \(\phi_x\),分析可得:
直接递推计算可得。
KLAVIR
跟字符串系列联动一下。
首先显然的我们要建个 KMP 自动机,由于这道题不仅卡时间还卡空间,KMP 是最好的选择。然后我们还要快速的跳 border 那么最好的就是预处理一下往上跳最近的合法位置。
然后这道题卡空间,直接存存不下,我们可以用 bitset 存 int 这样空间就可以卡进去。然后我们发现我们只要定义 \(\phi_i\) 表示长度为 \(i\) 的势能函数,这样子我们可以直接沿着 KMP 自动机递推即可。然后还有一个事情是我们注意到我们是有概率长度变长,大部分长度变短,这是一个有后效性的,理论上不能直接递推,但是高斯消元成本太高。
我们发现最终式子可以变成 \(0\) 推导 \(1\),\(1\) 推导 \(2\) 依次类推。这样就做完了。复杂度 \(O(nm)\),注意卡常。
2.1.3 本质
概率论大部分的与组合数学一致,主要还是推导式子,额外多了些概率风格的东西。
当然鞅的停时定理能运用的前提与 SG 函数类似,需要整个过程可以用一类随机变量来描述,比如说要描述一棵树或者其他什么难以用数字表达的就没有那么容易了。
2.2 Min-Max 容斥
2.2.1 定义 & 用法
对于一个集合 \(T\),有以下恒等式成立:
证明:考虑将一个数 \(a_i\) 映射成包含 \(1,2,...a_i\) 的集合,那么 \(\max\) 就是并,\(\min\) 就是交,然后根据普通容斥原理自然成立。
他为什么出现在这里呢,是因为原式子在期望意义下仍然成立,也即:
这就很强大了。众所周知,\(\max\) 在期望意义下不一定好算,但是 \(\min\) 在期望下可能是好算的。\(\min\) 在一定程度上类似停机问题,即满足一个条件就结束,而 \(\max\) 的条件相比是更加复杂的。
2.2.2 扩展
证明见 Oi-WIKI。
Gachapon
首先运用 \(\min-\max\) 容斥可以得到答案即为:
考察 \(E(\min T)\) 的意义,得到实际意义为 \(i\in T\) 中第一个出现次数达到 \(B_i\) 的操作次数。首先有一个小技巧,我们设 \(P=\dfrac{\sum_{i \in T} A_i}{S}\),则根据前面 Problem 2 可知期望 \(\dfrac{1}{P}\) 次选中一个 \(T\) 中的元素。那么我们就不用考虑 \(T\) 之外的元素,只考虑 \(T\) 之内的,然后乘以 \(\dfrac{1}{P}\) 即可。
设 \(T\) 中每一个 \(i\) 出现 \(x_i\) 次,总共出现 \(k\) 次,那么有:
- \(\sum x_i=k\)。
- \(0 \le x_i < B_i\)。
我们不易考虑如何计算有一个达到的期望,我们考虑都未达到的概率之和,也即 \(E(X)=P(X \ge 1)+P(X \ge 2)+...\)。当然我们这边转为了 \(P(X > 0)+P(X>1)+P(X>2)+...\)。
考虑上述条件出现的概率。根据组合数公式可知(设 \(P_i=\dfrac{A_i}{S},P(T)=\dfrac{\sum_{i \in T} A_i}{S}\)):
把外面的乘进去,可以得到:
代入总式,可以得到:
考虑用一个 DP 求和。此类问题 DP 的套路就是把整个式子当做 DP 的值并选取代表值压进状态里,并做一个类似背包的转移。我们注意到首先要有 \(i\) 表示个数,\(k\) 表示 \(x_i\) 的和,以及 \(P(T)\) 作为除法的分母不好算也要压进来。
那么定义 \(dp_{i,j,k}\) 表示前 \(i\) 个,\(P(T)S=j\),\(\sum x_i=k\) 的和,转移得:
那么就做完了。复杂度 \(O(n^3)\)。
Random Painting
老套路,定义 \(x_i\) 表示 \(i\) 被涂黑的时刻,则求的是 \(E(\max x_i)\),用一下 Min-Max 容斥,转成:
考虑用 DP 计算原式子。由于原式子的值依赖小球的结果,我们先求出包含 \(i\) 的集合 \(S\).
3.1 方差
3.1.1 定义
定义随机变量 \(X\) 的方差 \(D(X)=E(X-E(X))^2\)。
定义随机变量 \(X,Y\) 的协方差 \(Cov(X,Y)\) 为 \(E((X-E(X))(Y-E(Y)))\)。
3.1.2 性质
3.2 条件概率 & Bayes 公式
3.2.1 定义
若已知 \(A\) 事件发生,在此基础上 \(B\) 事件也发生概率称作 \(P(B|A)\)。
然后我们通过概率的定义不难知道 \(P(B|A)P(A)=P(AB)\)。
还有 \(n\) 个事件每个事件为 \(A_i\) 且发生概率和为 \(1\),则有 \(P(B)=\sum_{i=1}^n P(A_i)P(B|A_i)\)。
3.2.2 Bayes 公式
从上文定义即可证明。
UVA11181
定义事件 \(A_i\) 表示第 \(i\) 个人买到物品,\(B\) 事件为有 \(r\) 个人买了东西。
则题目所求即为 \(P(A_i|B)\),根据 Bayes 公式可得所求即为:
然后暴力枚举容易算出 \(P(B|A_i)\),时间复杂度 \(O(2^nn)\)。
4.1 总结
OI 中的概率论算是一个比较综合的东西,表现形式通常就是概率论背景+组合数学,可能会有多项式相关的东西,但是笔者不会。
可能后面会补一下 PGF 和更高深的一些东西(?)

浙公网安备 33010602011771号