期望概率

发布时间 2023-12-03 22:46:16作者: _kkio

0.前情提要

别想翻盘了,赶紧搞你那 whk 去吧。

学点期望概率以后用。

1. 一些需要知道的

有关概率

  1. 约定 \(P(A)\)\(A\) 事件发生的概率。
  2. 条件概率 \(P(A|B)\) 表示,在 \(B\) 已经发生的情况下,\(A\) 事件发生的概率。由条件概率的定义,可以得到算式:

\[P(A|B)=\frac{P(A \cap B)}{P(B)} \]

其中 \(P(A \cap B)\)\(A,B\) 同时发生的概率,或者写成 \(P(AB)\)

  1. 如果 \(P(A \cap B)=P(A)P(B)\),则 \(A,B\) 两事件独立。
  2. 贝叶斯公式:

\[P(A|B)=\frac{P(A \cap B)}{P(B)} \\ \Rightarrow P(A|B)P(B)=P(B|A)P(A)=P(A \cap B) \\ \Rightarrow \frac{P(A|B)}{P(A)}=\frac{P(B|A)}{P(B)} \]

有关期望

  1. 离散变量的期望:设离散变量 \(X\) 的概率分布为 \(p_i=P \{ X=x_i \}\),则 \(X\) 的期望为:

\[E(X)=\sum{x_ip_i} \]

需要满足 \(E(X)\) 收敛。

  1. 连续变量的期望:设连续变量 \(X\) 的密度函数为 \(f(x)\),则 \(X\) 的期望为:

\[E(X)=\int_{\mathbb R}{xf(x)}\rm{d}x \]

同样需要满足收敛。

此时 \(E(X)\) 的导函数 \(E'(X)\) 即为 \(X\) 的密度函数 \(f(x)\)

  1. 期望的线性性:\(E(ax+by)=aE(x)+bE(y)\)

  2. 期望的乘积:\(E(XY)=E(X)E(Y)\)

  3. 期望计算的转化 :

    \[E(X)=\sum_\limits{i}iP(X=i)=\sum_\limits{i<0}P(X>i)-P(X<i)=\sum_\limits{i}P(X \ge i)=1+\sum\limits_i P(X>i) \\ \]

    在大多数离散情况下适用。

2.期望概率例题

  1. 简单分析

\(S=\sum{P(i)}\)\(P(i)\) 表示 \(i\) 这个题做出来了没,则由期望线性性,有 \(E(S)=E(\sum P(i))=\sum E(P(i))\),考虑分开计算每个 \(E(P(i))\)

\(i\) 被做出来这个事件成立的条件是之前的所有时间加上额外时间不大于 \(T\)。假设在 \(i\) 及之前最多能多出的额外时间为 \(t\),则概率为

\[\frac{\sum_\limits{j=0}^{t} { \binom{i}{j} }}{2^i} \]

\(t\) 可以用双指针维护。在改变 \(t\) 的同时,我们增量维护上方的和式,\(t\) 的变化量不超过 \(n\),时间复杂度 \(\mathcal O(n)\)


  1. 鞭尸套路

在计算概率的题目中,修改随机过程,使其更好代数计算。

相当于四个方向,每个方向上最多缩对应次数,期望缩几次。

由期望的定义式,考虑计算每一刀割下的概率,答案就是每一刀概率的和加一。

概率的鞭尸套路:在随机过程中,如果随到了一个不应该随到的东西,但是对后面计算不产生影响,可以当成跳过的话,则对随机的概率不产生影响。

感性理解就是,选到这个东西不影响其他东西的相对概率,应该可以通过等式证明。

那么如果考虑鞭尸的套路,选到不存在的刀就跳了,假设四方向的刀总和为 \(S\),当前考虑的是某个方向的第 \(i\) 刀,每次从 \(n+m\) 中选法中选出一个来,为了能切到这一刀,你必须从 \(S-i+1\) 中刀中选,那么这刀切中的概率为 \(\sum\limits_{j \ge 0}{(\frac{S-i}{n+m})^j(\frac{1}{n+m})}=\frac{1}{n+m-S+i}\)。真是非常好看的形式啊!

期望和概率的转换可以负责不同的情况,在这种随机过程的题里,转换成概率也许有更好的算法。

以上几道题,期望拆开后,变量取值情况较为简单,于是可以直接计算对应的概率。

感觉是随机过程这类问题里技巧性比较强的一道,但是应该是后面题里较基础的一道。

考虑鞭尸的套路,变为无限打人,打中 \(1\) 结束,问最后全打过的概率。

第一步是容斥,变为计算不包含 \(1\) 的子集 \(S\),使得 \(S\) 这个集合里的人没被打,概率 \(P(S)\) 即为 \(\sum\limits_{j \ge 0}{(\frac{W-sum(S)-w_1}{W})^j(\frac{w+1}{W})}=\frac{w_1}{sum(S)+w_1}\)

答案就是 \(\sum\limits_{S}(-1)^{|S|}p(S)\)。看上去硬伤在于枚举子集 \(S\),但是观察到影响答案的只有 \(sum(S),|S|\),这两个的量级都很小,可以直接背包。进一步把背包用分治 NTT 优化即可。

记住,期望概率一样是可以容斥的。

以上的题目过程都没有环,来看看转移成环的例子。


  1. 代数推导技巧

使用生成函数,卷积等方式推导答案。

倒着走,容易想到将每个状态走到目标状态的期望步数设成变量爆算高斯消元,有 \(2^n\) 个变量,复杂度爆炸(但是已经可以拿 \(40\) 分了!!!),考虑如何优化该过程。

我们设当前状态为 \(S\),变量为 \(f_i\),我们有:

\[f_S=1+\sum\limits_{i=0}^{n-1}p_if_{S \oplus \{i\}} \\ f_{\varnothing}=0 \]

我们定义两个集合幂级数 \(F,G\) 分别是:

\[F=\sum_{S}f_Sx^S \\ G=\sum_{i}p_ix^{\{i\}} \]

\[F=\sum_{S}x^S+F \times G + Cx^{\varnothing} \]

最后的 \(C\) 是用来保证 \([x^{\varnothing}]F=0\) 的,暂时还不知道。中间的乘法是异或卷积。

做一遍 FWT,我们令 \(FWT(F)\)\(F\) 的 FWT 数组,约定 \(F_S=[x^S]F\),那么我们有:

\[FWT(F)_S=FWT(F)_S\times FWT(G)_S+C \\ FWT(F)_\varnothing=FWT(F)_\varnothing\times FWT(G)_\varnothing+2^n+C \]

我们知道 \(FWT(G)\) 的值,因此可以解得:

\[(1-FWT(G)_S)FWT(F)_S=C \\ FWT(F)_S=\frac{C}{1-FWT(G)_S}(S \neq \varnothing) \\ FWT(F)_\varnothing=C+2^n+FWT(F)_\varnothing \Rightarrow C=-2^n \]

对的吗?好像没太大问题。

我们得到了一个 \(2^n\) 次方解法。但是都到这一步了,我们要继续优化它。

依照 FWT 和 IFWT 的 \(n^2\) 求法,我们得到:

\[FWT(F)_\varnothing = \sum_{T}F_T \\ 2^nF_S=\sum_{T}(-1)^{|S\cap T|} FWT(F)_T\ \\ =\sum_{T \neq \varnothing} (-1)^{|S \cap T|}\frac{-2^n}{1-FWT(G)_T} +FWT(F)_\varnothing \\ 2^n\sum_{T \neq \varnothing } \frac{1-(-1)^{|S \cap T|}}{1-FWT(G)_T} \]

又由于 \(FWT(G)_S=\sum\limits_{T}(-1)^{|S \cap T|}G_S=\sum\limits_{i}(-1)^{[i \in S]}p_i\),得到:

\[F_S=\sum_{T \neq \varnothing} \frac{1-(-1)^{|S \cap T|}}{1-\sum\limits_{i} (-1)^{[i\in T]p_i}} \]

最后要单点求值。

跟上题一样的,由于 \(\sum p_i\) 足够的小,我们直接背包,设 \(dp_{i,j,k}\) 表示考虑到第 \(i\) 位,\(\sum(-1)^{|i\in T|}p_i =j\)\(|S \cap T|\) 是奇数/偶数的数量,复杂度 \(\mathcal O(nV)\)

注:上面这个式子稍微换下,就变成 \(\sum\limits_{|S\cap T|\equiv0\pmod 2}\frac{1}{\sum\limits_{i\in T}p_i}\)

上题猎人杀同样可以用集合幂级数 + 或卷积分析出相同的结论,属于是一种很好的技巧了。

好像有生成函数的另解,也可以看看。

将答案写为 \(1+\sum\limits_iP(X>i)\dfrac{m}{m-i}\) 后,考虑计算 \(P(X>i)\)(我们以后记为 \(P_i\))。

计算 \(P_i\) 就要计算 \(i\),张卡仍未结束的方案数,考虑对每个 \(\ge k\) 的连续段分开计数。设这个长度为 \(L\)

考虑分段,每段是一段连续的 \(1\) 跟一个 \(0\)(最后一个不用),答案就是:

\[\sum_i [x^{n-i+1}](\sum_{j=0}^{k-1} x^j)^i \]

每项称一个 \(x\),并加一个辅元 \(u\) 以区分段数,得到要求:

\[[x^{n+1}]\sum_i(u\sum_{j=1}^{k}x^j)^i \\ =[x^{n+1}]\frac{1}{1-uF(x)} \]

其中 \(F(x)=\dfrac{x^{k+1}-x}{x-1}\)

看到这个单点求值和 \(F(x)\),我们做拉格朗日反演:

\[[x^n]H(G(x))=\frac{1}{n}[x^{n-1}](\frac{x}{G^{-1}(x)})^nH'(x) \\ \Rightarrow [x^{n+1}]\frac{1}{1-uF(x)} =\\ \frac{1}{n+1}[x^{n}](\frac{x}{F^{-1}(x)})^{n+1}\frac{u}{(1-ux)^2} \]

其中,为了方便,设 \(H(x)=F^{-1}(x)\)

\[F(H(x))=x \\ \frac{H^{k+1}(x)-H(x)}{H(x)-1}=x \\ H^{k+1}(x)-(1+x)H(x)+x=0 \]

牛顿迭代即可。另外地,这道题有直接写出 dp 式子,然后用分治 NTT 优化多项式的做法。前者复杂度 \(n\log n\) ,后者 \(n \log^2 n\)。实际速度因常数而异。

算是 PGF 的例题了,考虑定义 \(f_i\) 为第 \(i\) 次仍未结束的概率,第 \(i\) 次结束的概率即为 \(f_{i-1}-f_i\),记为 \(g_i\)。那么我们有递推式:

\[g_i=(\frac{1}{m})^{|S|}f_{i-|s|}-\sum_{j\in \mathrm{Border}(S)}g_{i-|S|+j}(\frac{1}{m})^{|S|-j} \]

如果我们将 \(|S|\) 也算进 \(\mathrm{Border}(S)\) 里,那么我们可以得到一个优美的式子:

\[(\frac{1}{m})^{|S|}f_{i-|s|}=\sum_{j\in \mathrm{Border}(S)}g_{i-|S|+j}(\frac{1}{m})^{|S|-j} \]

写成生成函数:

\[G(x)=xF(x)-F(x)+1 \\ (\frac{x}{m})^{|S|}F(x)=\sum_{j\in \mathrm{Border}(S)}G(x)(\frac{x}{m})^{|S|-j} \]

我们最后其实要算的是 \(\sum\limits_i i[x^i]G(x)\),这个东西其实就是 \(G'(1)\) 的值,我们稍微玩下这两个式子:

\[G(1)=1 \\ G'(1)=F(1) \\ G'(1)=\sum_{j\in \mathrm{Border}(S)}m^{j} \]

感觉还是很厉害的。


  1. 动态规划

解决期望概率计算的重要方法,根据过程列出转移。一般来说,期望采取倒推或跟着概率一同转移的方法计算,概率直接正向推导。

根据题目,我们有 \(n\prod{a_i}\) 的 dp,考虑优化。

我们发现,现在的主要问题在于当前的 \(\dfrac{1}{n-|S|}\) 无法直接用组合计算,但是这个东西只跟当前的 \(S\) 有关,考虑优化状态,计 \(f_{i,S}\) 表示进行到第 \(i\) 轮,当前有 \(S\) 个怪还活着,那么我们转移相当于讨论这一轮有没有死新的怪,有的话直接放到其中 \(a_i\) 个位置上就行。

剩下的东西是好处理的,不讲了。

给叶子节点权值从小到大编个号。

\(f_{u,i}\) 表示 \(u\) 这个点取到 \(i\) 这个值的概率,转移:

\[f_{ls,i}\times f_{rs,j}\times (1-p_u) \rightarrow f_{u,min(i,j)} \\ f_{ls,i}\times f_{rs,j}\times p_u \rightarrow f_{u,max(i,j)} \]

线段树合并转移就行了。

这也黑?建议降蓝

首先有一个简单的 dp,设 \(f_{S,T}\) 为当前已经抽了 \(S\) 个点中的点,\(T\) 中的点被选入的概率,这个 dp 复杂度是 \(n3^{n}\) 级别的,只有 \(50\) 分。

考虑修改过程:不断选择 \(n\) 个点中的一个,如果能加入就加入,最后加入的点数是最大独立集的概率,通过鞭尸原理分析到概率应该相同。

于是设计状态 \(f_{i,S}\) 表示已经加入 \(i\) 个数,\(S\) 中的树不能再加入的概率。

做完,复杂度 \(n^22^n\)

好像有点蠢,直接计 \(S\) 为选出的集合就 \(n2^n\) 了,过。

感觉也是蓝。

假期望,应该滚出去的,但是还是写上去。

直接做貌似没有很好的做法,我们来找性质。

发现我们一定在至少选一张攻击的情况下,选尽可能多的强化。

于是做法就明朗了:

我们先用一个 \(nm\) 的背包算出强化卡选 \(i\)\(\prod a_i\) 的总和(注意从大到小背包,如果选出的强化卡 \(>k-1\),只计算前 \(k-1\) 张的 \(\prod\)。设结果为 \(dp_i\)

然后我们再将攻击卡计算进去,为了不算重,我们钦定使用的最小的数是 \(b_i\),枚举我们使用 \(x\) 张攻击卡,那我们一定用了 \(k-x\) 张强化,对于 \(x \neq 1\) 的情况,我们知道强化卡一定只抽了 \(k-x\) 张,直接计算即可。否则,我们的强化卡抽出的张数可能取遍 \(k-1,k,\dots,m-1\) 张。具体的,我们要计算:

\[\sum_{j=k-1}^{m-1} dp_j\times \binom{n-i}{m-1-j} \]

做完了。蓝吧。

  1. 高斯消元

诸如此类转移成环问题可以将变量的转移列出直接开消,或者观察形式设置位置元转移后再解方程。

依题意简单列出转移(不严谨的):

\[f_i=0(i\leq 0)\\ f_i=1+\frac{1}{m+1}\sum_j f_{i-j+1}\frac{m^{k-j}\binom{k}{j}}{(m+1)^k}+\frac{m}{m+1}\sum_j f_{i-j}\frac{m^{k-j}\binom{k}{j}}{(m+1)^k}\\ f_i=1+\frac{1}{(m+1)^{k+1}}\sum_j (f_{i-j+1}+mf_{i-j})m^{k-j}\binom{k}{j} \]

我们有一个 \(\mathcal O (Tn^3)\) 的做法(明显过不了嘛),考虑怎么继续想这个东西。

如果没有这个生命值 \(+1\),那么我们就可以线性转移了,否则,我们修改式子的形式:

\[\forall i \neq p,f_i=1+\frac{1}{(m+1)^{k+1}}\sum_{j=0}^{S=\min(k,i)}(f_{i-j+1}+mf_{i-j})m^{k-j}\binom{k}{j}\\ \Rightarrow f_{i+1}=\frac{(m+1)^{k+1}f_i-(m+1)^{k+1}-\sum\limits_{j=0}^{S-1}{f_{i-j}(m^{k-j+1}\binom{k}{j}-m^{k-j-1}\binom{k}{j+1})}-f_{i-S}m^{k-S+1}\binom{k}{S}}{m^k} \]

这个式子。。。怎么说呢,也不是不能玩,当然,这只是 \(i \neq p\),的情况,实际我们还有一个方程。

好了,现在我们只需要将 \(f_1\) 作为未知数,递推出 \(f_p\) 的形式之后再带入求解即可。

有点蠢,感觉跟期望概率没啥关系啊。

这也黑?建议降绿

  1. minmax 容斥

当求 max/min 困难时,转化为求 min/max。在期望上也适用哦。

\[E(\min\limits_{X \in S} X)=\sum_{T \subseteq S}E(\max\limits_{X \in T} X) (-1)^{|T|+1} \\ E(\max\limits_{X \in S} X)=\sum_{T \subseteq S}E(\min\limits_{X \in T} X) (-1)^{|T|+1} \]

典。

转为求一个点集中第一个被走到的点的期望。

以此,你可以得到若干一个关于 \(fat_u,son_u\) 的转移,\(son_u\) 是好办的,但是 \(fat_u\) 不行。

考虑待定系数,我们计 \(f_u=k_uf_{fat_u}+b_u\),我们要计算这个 \(k_u,b_u\)。列出基本的转移后,推导得到:

\[k_u =\frac{1}{deg_u-\sum\limits_{v}k_v} \\ b_u =\frac{deg_u+\sum\limits_v b_v}{deg_u-\sum\limits_{v}k_v} \]

\(f_x\) 时,我们计 \(f_{fat_x} =0\)

再高维前缀和一遍就行了。

求第 \(n-k\) 大,写出 kthmax 的形式:

\[Ans=\sum_T (-1)^{|T|-k} \binom{|T|-1}{k-1}\frac{m}{\sum\limits_{i \in T}p_i} \]

\(\sum p_i\) 的总和比较小,设进状态里,由于 \(n-k\) 很小,不难想到将 \(k\) 设进状态里。这里有个很重要的思路打开,那就是 \(|T|\) 的变化可以用 \(k\) 的变化代替。解决 \(\sum p_i\) 较为困难,也设进状态里。剩下的物品必须枚举,我们不能再计 \(|T|\),要在转移中做完。我们得到 \(f_{i,j,s}\) 表示前 \(i\) 个物品,当前 \(k=j,\sum p_i =s\) 的总和。

为了更加清晰,设一个辅助状态 \(g_{i,s}\) 表示 \(|T|=i,\sum p_i =s\) 的总和。

\[f_{i,j,s}=\sum_t (-1)^{t-j}\binom{t-1}{j-1}\frac{m}{s}g_{t,s} \]

转移(考虑选),转移系数这么搞:

\[(-1)^{|T|+1-j}\binom{|T|}{j-1} g_{|T|,s-p_i} \frac{m}{s} \\ =(-1)^{|T|+1-j}[\binom{|T|-1}{j-1}+\binom{T-1}{j-2}]g_{|T|,s-p_i}\frac{m}{s} \\ =-f_{i-1,j,s-p_i}+f_{i-1,j-1,s-p_i} \]

考虑一下边界,那么总体上转移就是:

\[f_{i,0,0} = 1 \\ f_{i,j,s}=f_{i-1,j,s}-f_{i-1,j,s-p_i}+f_{i-1,j-1,s-p_i} \]