概率与期望

概率论

APIO 2024 讲课内容

基础

样本空间:随机实验的所有结果构成集合 \(\Omega\)
\(e.g.\) 抛硬币 \(\Omega=\{H,T\}\),抛 \(n\) 次就是 \(\{H,T\}^n\)
事件:是 \(\Omega\) 的子集。
概率空间:为 \(\Omega\) 中的每个元素赋予一个发生的概率,用 \(P: \Omega \to [0,1]\) 表示。所有元素概率之和为 \(1\)。那么,\(P(A)=\sum\limits_{a \in A}P(a)\)
随机变量\(X\) 从一个概率空间中抽取,以 \(P(a)\) 的概率取值为 \(a\)
期望\(E(x)=\sum P(X=a)a\)
离散型随机变量:只有有限个 \(a\) 满足 \(P(X=a)>0\) 的情况。
连续型随机变量:无限个 \(a\),满足 \(P(X=a)>0\)
条件概率\(P(A|B)\) 定义为在 \(B\) 发生的条件下,\(A\) 发生的概率。画个图理解就是概率空间内,\(A\)\(B\) 的面积并占 \(B\) 面积的百分比,也就是 \(P(A|B)=\frac{P(AB)}{P(B)}\)
贝叶斯公式\(P(A|B)=\frac{P(B|A)P(A)}{P(B)}\),应用就是交换条件概率中的 \(A\)\(B\)

离散型随机变量

AGC060C Large Heap

考虑转化为二叉外向树拓扑序。

\(u\) 点就是 \(A\) 层最左边的点,\(v\)\(B\) 层最右边的点。所以我们只关心两条链上选取方式,将两条链提取出来,其他点看成两条链上挂着的子树。其实我们并不关心子树具体怎么走,因为这对于链上的选取顺序无影响,所以只需要记录链取到了哪里。

但是子树大小是有影响的,因为我们是在所有合法的排列中选择,那么你子树大小越大,你的拓扑序就有更大的概率在更前面,这个概率与子树大小呈线性。于是你从链式推进的时候,到底是推进左链还是右链,是要乘以一个概率的。按照两边子树大小来分配概率。

\(f_{i,j}\) 表示左边选取了 \(i\) 个点,右边选取了 \(j\) 个点的方案数,使用刷表法来转移,对于所有不合法的 \(i,j\) (不满足 \(P_U<P_V\) 的)我们直接在 DP 遇到的时候将 \(f\) 值设为 \(0\) 即可。时间复杂度 \(O(n^2)\)

CF1096E The Top Scorer

简单题。先要枚举 \(a_1\) 得分,然后得分相同的时候,是等概率一个人获胜,这个不好直接处理,所以我们必须枚举同分人数。最后直接计算一个 \(\sum x_i=C\)\(x_i\in [0,LIM]\) 的方案数,下界直接平移 \(1\) 就处理掉了,上界可以直接使用容斥,钦定若干不满足条件然后用组合数计算方程解的个数即可。

ARC150D Removing Gacha

和后文的 CF280C Game on Tree 是双倍经验,这里就不讲了。

ABC270Ex add 1

很有意思的题目!本题的难点是状态量很大的题目如何高效刻画。

观察到大部分的变换都比较对称,因此猜测可以有一个统一的变量来刻画。

令计数器数值为 \(c_i\),原本需要记录的状态是 \(\{c_1,c_2\dots c_n\}\),目标状态是 \(\forall i,c_i\ge a_i\),有如下变换全局 \(c_i\gets c_i+1\) 和 单点 \(c_i\gets 0\)

发现可以直接将状态 \(\{c_1,c_2\dots c_n\}\) 简化为 \(\max\{a_i-c_i\}\) !我们并不需要记录局部状态是因为在只有全局 \(c_i\gets c_i+1\) 的时候,可以只记录上述状态,加入单点 \(c_i\gets 0\) 之后,只会让 \(a_i-c_i\) 变大,我们只需要让这个唯一改变的 \(a_i-c_i\) 和之前的最大值 chkmax 就行了。如果出现单点 \(a_i-c_i\) 变小,就不能这么记录了,因为我们可能会让最大值减小,无法判断谁是新的最大值了。

然后就很好做了,按照经典期望逆推,我们设 \(f_x\) 当前 \(\max\{a_i-c_i\}=x\) 的时候期望还有多少次可以达到终点 \(f_0\)。我们要求的就是 \(f_0\),且已知 \(f_{a_n}=0\)。假如某次我们选择了 \(y\),那么 \(x\) 的变化是 \(x\gets \max(a_y,x-1)\),根据这个可以轻松列出期望方程。假设 \(x\in (a_y,a_{y+1}]\),那么有

\[f_x=\dfrac{1}{n}(yf_{x-1}+\sum\limits_{i=y+1}^nf_i)+1 \]

将这个式子改写为 \(f_{x}\to f_{x-1}\) 的形式,就可以从 \(f_{a_n}\) 推到 \(f_0\) 了。在每一个 \((a_i,a_{i+1}]\) 段中用矩阵优化即可。

连续型随机变量

ARC113F Social Distance

连续型的求期望太难,考虑设 \(f(x)\) 表达答案 \(\ge x\) 的概率,最后答案就是 \(\int f(x)dx\)

\(p_i-p_{i-1}\ge x\),同时 \(p_i\in [l_i,r_i]\),这个约束是一个滑动区间不好处理。令 \(q_i\gets p_i-ix\) 就很好处理了。\(q_i\in [l_i-ix,r_i-ix]\) 均匀随机分布,求 \(q_i\) 递增概率。

这个问题的离散版本就是 P3643 [APIO2016] 划艇,本题不仅是实数域,而且还要求对于连续的 \(x\) 算出不同 \(x\) 之下问题的答案。

先解决实数域这个问题,将点离散化之后得到 \(\{y_i\}\)。设 \(f_{i,j}\) 表示考虑到了前 \(i\) 个元素,其属于区间 \([y_j,y_{j+1})\),且这些点都有序的概率。

\[f_{i,j}=\sum\limits_{k=0}^{i-1}(\prod\limits_{z=k+1}^i\dfrac{y_{j+1}-y_j}{r_z-l_z}) \dfrac{1}{(i-k)!} \sum\limits_{l=1}^{j-1}f_{k,l} \]

通过前缀和优化做到时间复杂度 \(O(n^3)\)

现在要处理第二个问题,如何对于连续的 \(x\) 的求解。首先 DP 方程对于 \([l'_i,r'_i]\) 是有约束的,要求 \([l'_i,r'_i]\) 包含其落在的区间。因此对于 \(O(n^2)\)\([l_i-ix,r_i-x]\)\([l_j-jx,r_j-jx]\) 两两求交点,可以得到 \(O(n^2)\) 组临界点,得到 \(O(n^2)\) 个区间,单个区间内包含关系不变。

进行 DP,可以得到 \(f_{i,j}\) 是一个关于 \(x\)\(O(n)\) 次多项式,我们维护这个多项式的系数,每次转移是一个多项式乘以直线的形式,可以 \(O(n)\) 转移,最后对于多项式进行积分求答案即可。时间复杂度 \(O(n^6)\)

高斯消元

状态图是不是 DAG,导致各个状态之间有牵连,可以采用高斯消元。暴力高斯消元是 \(O(n^3)\) 的,但是由于一些特殊性质有的时候我们可以优化到 \(O(n^2)\)

有的矩阵都很稀疏,可以每次只对于 \(O(1)\) 个位置有值的位置进行消元,复杂度就是 \(O(n^2)\) 的。

如果矩阵很密集的话,有的时候每个变量都比较对称,因此有一些规律可以使用,之后例题中 Slot machine 中 \(k=1\) 的部分分就是这样子的,也可以做到 \(O(n^2)\)

P4457 [BJOI2018] 治疗之雨

\(P_i\) 表示在降血过程中降 \(i\) 滴血的概率。于是有

\[P_i=C_{k}^i(\dfrac1{m+1})^i(\frac m{m+1})^{k-i} \]

然后就可以列期望的方程了,注意特判 \(E_n\)

\[E_i=\sum\limits_{j=1}^i[(\frac{m}{m+1}P_{i-j}+\frac{1}{m+1}P_{i-j+1})E_j]+\dfrac{1}{m+1}P_0E_{i+1}+1 \]

\[E_n=\sum\limits_{j=1}^nP_{n-j}E_j+1 \]

利用高斯消元可以 \(O(n^3)\) 暴力解。

观察一些增广矩阵,发现对于第 \(i\) 行,只有 \([1,i+1]\) 的位置有值。还是类似高斯消元的步骤。我们在消第 \(i\) 行的时候 \([1,i-1]\) 的列都为 \(0\),此时只有 \(i\)\(i+1\) 列是有值的。按照常理我们往下消的时候应该对于后面每一行都减去 \([i,n+1]\) 的系数,但是由于后面一堆非 \(0\) 位置。所以我们只需要消去 \(i,i+1,n+1\) 三个位置的值即可。这样子消元部分的复杂度为 \(O(n^2)\),总的时间复杂度是 \(O(Tn^2)\)

随机游走

  • 根据需求来设未知数。比如可以设期望经过次数或者到达终点的期望步数。

假设目标是 \(s\to t\),我们设 \(f_u\) 表示从 \(u\) 点第一次到达 \(t\) 所需要的期望步数。于是 \(f_u=1+\dfrac{1}{deg_u}\sum f_v\)。其中 \(f_t=0\)

CF24D Broken robot

对于边界位置情况特判一下(可能不能往左/右走了),其他情况就是按照上述通法列式子即可。设 \(f_{i,j}\) 表示从格子 \((i,j)\) 走到终点的期望步数。

对于第 \(1\) 列,\(f_{i,1}=\frac13(f_{i,1}+f_{i,2}+f_{i+1,1})+1\)

对于第 \(m\) 列,\(f_{i,m}=\frac13(f_{i,m}+f_{i,m-1}+f_{i+1,m})+1\)

对于第 \(2-m\) 列,\(f_{i,j}=\frac14(f_{i,j}+f_{i,j-1}+f_{i,j+1}+f_{i+1,j})+1\)

同时特判 \(m=1\)

整理一下可以得到增广矩阵。

然后可以发现这些式子行间无后效性,行内有后效性。

于是暴力就是从倒数第二行开始倒着高斯消元,每一行都对于行内 \(n\) 个格子做一次高斯消元。时间复杂度 \(O(nm^3)\)

观察系数矩阵可以发现只有对角线以及对角线的周围的格子有值。
于是我们可以采取以下策略消元,对于第 \(i\) 行,应该是 \(i-1,i,i+1\) 三个位置有值,在第 \(i\) 行之前我们要消掉 \(i-1\)。从第 \(i\) 行起我们先把 \(a_{i,i}\) 系数变为 \(1\)。然后把第 \(i+1\) 行的 \(a_{i+1,i}\) 消掉。然后对于 \(a_{i,i+1}\) 的处理,我们可以一直消到最后一行,然后倒着回去带入,把 \(a_{i,i+1}\) 处理掉。时间复杂度 \(O(nm)\)

P3232 [HNOI2013] 游走

发现边的量级很大,考虑转化到点上去求解,再推边的相关期望。

\(f_u\) 表示 \(u\) 点的期望经过次数。

对于 \(u=1\),\(f_u=\sum\limits_{(u,v)~v\neq n} \dfrac{f_v}{d_v}+1\)

对于 \(2<u<n\)\(f_u=\sum\limits_{(u,v)~v\neq n} \dfrac{f_v}{d_v}\)

对于 \(u=n\)\(f_u=1\)

几个细节,就是 \(1\) 点初始有一次经过,还有就是 \(n\) 点进去了不能出去。

对于每条边 \((u,v)\) 的就是 \(\dfrac{f_u}{d_u}+\dfrac{f_v}{d_v}\)

对于边排序之后分配编号即可。

补充

重要公式

  • 第一个公式非常重要,如果遇到总权值的期望就尝试拆开成每个权值期望累和。

\(E(x+y)=E(x)+E(y)\) 该式子始终成立。

\(E(xy)=E(x) \times E(y)\) 这个需要满足独立才成立。

\(E(x^2)=E((x-1)^2)+2E(x-1)+1\) P1654 OSU!

注意事项

注意边界情况特判!!!

CF1187F Expected Square Beauty

注意事件独立性\(E(B(x))=E(\sum\limits_{i=1}^{n-1}[x_i≠x_{i+1}])\)

\(E(B^2(x))=E(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}[x_i≠x_{i-1}][x_j≠x_{j-1}])\)

分类讨论:\(i=j\)\(p_i\)

\(\lvert i-j\rvert>1\)\(p_i \times p_j\),因为两位互不影响。

\(\lvert i-j\rvert =1\) 直接容斥 \(1-q_i-q_j+P(q_i \cup q_j)\)

#6513. 「雅礼集训 2018 Day10」足球大战

赢球概率为 \(p\),在 \(n\) 场里面至少赢 \(i\) 场的概率是 \(C^i_n \times p^i\),不是恰好 \(i\) 场的概率,注意还要乘上组合数(因为这里的概率是用计数然后作商算的,计数就需要不能漏)。概率算式可以自己举简单例子验证正确性

P4316 绿豆蛙的归宿

很重要的一题,递推求期望要逆推。所以本题只能设 \(f_u\) 表示 \(u\) 到终点的期望路径长度。

如果是顺推,设 \(f_u\) 表示起点到 \(u\) 的期望长度(?其实很怪,这题并不是要求到 \(u\) 的期望长度,因为可能到不了 \(u\) 哪里来的期望长度。所以感觉设计出来的终态必须要是可以 100% 到达的,终点虽然不唯一但是 100% 能到达终点)。转移 \(v \to u\) 的时候 \(f_v\) 要乘上当前概率 \(deg_v\),而路径长度还要乘上 \(deg_v \times p_v\)

杂题

CF280C Game on Tree

期望线性性的应用。将整体操作次数的期望转到每个点被操作次数的期望。

\(f_i\)\(i\) 被操作的次数,\(p_i\)\(i\) 被选中的概率,显然有 \(f_i\in \{0,1\}\)

\[E(\sum f_i)=\sum E(f(i))=\sum(1\times p_i+0\times (1-p_i))=\sum p_i \]

\(p_i\) 的求解是一个经典的数学问题,考虑根到 \(i\) 这条祖孙链(显然选其他点对于 \(i\) 是否被删除无影响),只有在第一步就选 \(i\) 才能操作到 \(i\),得到 \(p_i=\frac{1}{dep_i}\),带入求解即可。

CF464D World of Darkraft - 2

首先,明确一点就是只需要算出一个物品的期望然后 \(\times k\) 即可。

首先这题必须逆推否则要乘上一个概率,设 \(f_{i,j}\) 表示还剩 \(i\) 次抽卡机会的时候,目前最高等级为 \(j\) 可以期望获得金钱数。

直接转移是 \(O(n^2)\) 的,但是我们发现这题不需要什么逆元取模,而是直接输出小数。可以利用这个特性,算一下一个物品从 \(x \to x+1\) 的期望次数是 \(k(x+1)\)。那么从 \(1 \to x\) 的期望次数就是累和,再令这个式子 \(\le n\),发现期望升级次数在 \(500\) 左右,往后越大概率越小,小数点无法表示,所以我们可以取上界 \(1000\) 即可。

CF1523E Crypto Lights

\(\sum\limits_{i=1}^np(i)*i=\sum\limits_{i=1}^n\sum\limits_{j=i}^np(j)=\sum\limits_{i=1}^nsuf(i)\) (应用:数学期望)
CF1523E Crypto Lights 这里的 \(suf(i)\) 表示一个概率,这样就完成了期望到概率的转化。注意本题还有概率经典误区:就是说题面显然不是说把所有方案以等概率加起来,而是在决策中一步有其概率。也就是说,某个进行 \(i\) 后停止的状态发生概率为 \(n\)\(i\) 次下降幂分之一。

AGC030D Inversion Sum

首先,很妙的一步就是把总权值转化为期望 \(\times\) 总的可能数。

于是就变成了每次有 \(\frac{1}{2}\) 概率去交换,求最后逆序对数的期望。

发现全局逆序对数不好快速多次求解,发现 \(n\) 范围较小,于是我们可以回到逆序对最基本的定义用 \((i,j)\) 产生贡献。

\(f_{i,j}\) 表示目前为止序列中 \(a_i < a_j\) 的概率。

当我们交换 \((u,v)\) 的时候有,\(f_{u,i}=\dfrac{1}{2}(f_{u,i}+f_{v,i})\)(其余转移同理)。

P12251 [科大国创杯初中组 2025] 抽卡

ZROI2886. Slot machine

posted @ 2024-01-06 23:59  Mirasycle  阅读(45)  评论(0)    收藏  举报