期望,不会一点

因为打模拟赛做期望题猪脑过载了,所以来写一个。

因为博主的计数基础为 \(0\),所以写的比较笨,欢迎大家拷打。

不会有人高二了连这都不会吧

树上随机游走步数 \(k\) 次方期望:

假设你现在在一棵树的节点 \(u\) 上,每次你有 \(p_u\) 的概率站在原地不动,\(1-p_u\) 的概率等概率随机走到一个相邻的点。

对于每个点 \(i\geq 2\),求出 \(f_i\) 表示以 \(i\) 为起点,走到 \(1\) 的步数的 \(k\) 次方的期望。

\(\boldsymbol{k=1}\) 的情况

这是一个更为经典的问题

做法有两种:

  • 直接设 \(f_u\) 表示以 \(u\) 为起点到节点 \(1\) 的期望步数,有:\(f_u=p_uf_u+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E} f_v\)。我们待定系数,设 \(f_u=A_uf_{\text{fa}_i}+B_u\),由于 \(f_0=0\),所以从下到上求出 \(A_u\)\(B_u\) 之后,就可以从上到下求出 \(f_u\)
  • \(f_u\) 表示 \(u\)\(\text{fa}_u\) 的期望步数,直接列出式子:\(f_u=p_uf_u+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E\land v\neq \text{fa}_u} (f_v+f_u)+1\),这个可以直接从下到上转移。最后对 \(u\) 的所有祖先做前缀和即可。

扩展到 \(\boldsymbol{k>1}\) 的情况

如何求出步数的 \(k\) 次方?此处我们把每条从 \(u\)\(1\) 的路径看做一个组合对象,记一条路径为 \(T\),所有路径构成的集合为 \(\mathcal{S}_u\)。一条路径的概率为 \(p(T)\),长度为 \(l(T)\),我们需要求的是:

\[f_{u,k}=\sum_{T\in \mathcal{S}_u}p(T)l(T)^k \]

考虑当一个对象集拼上一条边之后,权值发生的变化。

\[\sum_{T\in \mathcal{S}_u}p(T)(l(T)+1)^k=\sum_{i=0}^k \sum_{T\in \mathcal{S}_u}p(T)l(T)^i\binom{k}{i}=\sum_{i=0}^k f_{u,i}\binom{k}{i} \]

拼上一条路径仍然如此:

\[\sum_{T_1\in \mathcal{S}_{u_1},T_2\in \mathcal{S}_{u_2}}p(T_1)p(T_2)(l(T_1)+l(T_2))^k=\sum_{i=0}^k f_{u_1,i}f_{u_2,i}\binom{k}{i} \]

假如我们用符号化方式写出上面的转移式子(\(\varepsilon\) 用来描述一条边):

  • \(F_u=p_u(\varepsilon\times F_u)+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E} (\varepsilon\times F_v)\)
  • \(F_u=p_u (\varepsilon\times F_u)+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E\land v\neq \text{fa}_u} (\varepsilon\times F_v\times F_u)\)

根据上面对权值的分析,可以分别得到两种方法的转移方程,从而不难使用消元技巧解决问题,此处略去。由于做运算的复杂度为 \(\mathcal{O}(k^2)\) 单次,最后的复杂度是 \(\mathcal{O}(nk^2)\)

更优的做法

第二种做法基本没救。不过第一种做法的操作仅有拼接 \(\varepsilon\)

在拼接 \(\varepsilon\) 的操作中,维护下降幂(即组合数)要比维护普通幂有这明显的优势。为什么这么说呢?重新定义:

\[f_{u,k}=\sum_{T\in \mathcal{S}_u}p(T)\binom{l(T)}{k} \]

观察这个定义的转移:

\[\sum_{T\in \mathcal{S}_u}p(T)\binom{l(T)+1}{k}=\sum_{T\in \mathcal{S}_u} p(T)\left(\binom{l(T)}{k}+\binom{l(T)}{k-1}\right)=f_{u,k}+f_{u,k-1} \]

这样你可以 \(\mathcal{O}(1)\) 完成与 \(\varepsilon\) 的操作。

众所周知下降幂和普通幂是可以相互转化的,所以求出下降幂的答案就可以了!

注意到如果直接做的话可能要待定 \(f_{\text{fa}_u,0\sim k}\),不过其实可以先处理完 \(0\sim k-1\) 再处理 \(k\),然后做类似 \(k=1\) 的过程即可 \(\mathcal{O}(nk)\)

posted @ 2023-10-24 17:23  yllcm  阅读(95)  评论(1编辑  收藏  举报