鞅与停时定理
鞅
对于一个一项一项随机生成的序列 \(X\),我们希望构造一个 \(Y\) 来刻画它后续的期望,称为它的“鞅”,那么 \(Y\) 应当满足:
-
\(E(Y_i)<\infty\);
-
\(Y_i\) 是关于 \(X_1,X_2,\dots,X_i\) 的函数,也就是说虽然 \(Y\) 表示的是后续的期望,但应当可以用前面的状态算出来;
-
\(E(Y_{i+1}|X_1,X_2,\dots,X_i)=Y_i\),也就是说 \(Y\) 的值也是后继状态的期望。
当然,如果你用树状图来理解的话可以发现,对于任意的 \(k>0\) 都有 \(E(Y_{i+k}|X_1,X_2,\dots,X_i)=Y_i\)。
举个例子,一个盒子里面有一些黑球和一些白球,每次随机选一个,放两个这个颜色的球回去。这个问题中,黑球在所有球中的占比可以作为鞅,容易验证。
停时定理
停时定理用于解决,规定了停止的条件,且仅依赖已经生成了的 \(X_1,X_2,\dots,X_n\),计算一些东西的期望。
那么上面的鞅有什么用呢?如果能构造一组鞅,使得停止时就是希望计算的东西(或者可以计算,具体见例题),这样 \(Y_0\) 就是答案了。说白了,还是构造。
例题:赌徒问题
你一开始有 \(a\) 块钱,每次你有 \(p\) 的概率赢一块钱,\(1-p\) 的概率输一块钱,变成 \(a+b\) 块钱时赢,\(0\) 块钱时输,
(1) 求获胜概率;
(2) 求期望结束时间。
令 \(X_i\) 为第 \(i\) 次钱的变化量,
\(p=0.5\)
这时候有一个非常好的性质:当前的钱数是一个鞅,而最终关心的也是钱数,因为可以用期望倒推概率。根据停时定理,\(E(Y_T)=Y_0=a\)(注意这里 \(Y_T\) 指的是每个方案停时的 \(Y\) 的值,而不是某一个 \(T\)),令赢的概率为 \(w\),那么有 \(w(a+b)=a\),即 \(w=\frac{a}{a+b}\)。
对于时间,需要在此基础上引入下标 \(T\),令 \(Z_T=Y_T^2-T\),验证是否是鞅:(后面的 \(E()\) 省略 \(X_1,X_2,\dots\) 的条件)
即 \(E(Z_T)=E_0=a^2\),又获胜概率为 \(\frac{a}{a+b}\),有 \(a^2=\frac{a}{a+b}(a+b)^2-E(T)\),即 \(E(T)=ab\)。
\(p\not= 0.5\)
注意,以下 \(Y_T\) 也为期望钱数,但 \(p\) 不再是 \(0.5\) 所以取值改变。
令 \(p>1-p\)。构造 \(Y'_T=\frac{(1-p)}{p}^{Y_T}\),验证略去,最终答案为:
对于期望结束时间,令 \(Z'_T=Y_n-n(p-(1-p))\),验证略去,最终答案为:
例题:CF850F Rainbow Balls
你有一个包含 \(n\) 种不同颜色小球的袋子。第 \(i\) 种颜色小球有 \(a_{i}\) 个。
只要袋子里至少有两种不同颜色的小球,按如下步骤操作:
- 从袋子中随机取出两个球(无放回,依次取出)。这两个球可以是同一种颜色。
- 将第二个球染成第一个球的颜色。在此步骤中不允许交换两球的顺序。
- 把两个球都放回袋子里。
- 所有这些操作恰好花费一秒。
令 \(M=10^{9}+7\)。可以证明,完成所有操作所需的期望时间可以表示为一个有理数 \(\frac{P}{Q}\),其中 \(P\) 和 \(Q\) 互质且 \(Q\) 不被 \(M\) 整除。请输出 \(\overline{PQ^{-1}} \bmod M\) 的值,其中 \(Q^{-1}\) 为 \(Q\) 在模 \(M\) 意义下的逆元。
\(n\le 2500,a_i\le 10^5\)。
普通做法
先来一个不用停时定理的方法。
首先第一步应该能想到:因为最后只会剩一个颜色的球,枚举每一个颜色,令 \(s=\sum a_i\),相当于变成了一个 \((a_i,s)\) 的子问题,令 \(f_x\) 表示当前有 \(x\) 个球的期望次数,要求在不到达 \(0\) 的情况下到达 \(s\),可以列出方程 \(f_x=pf_{x-1}+pf_{x+1}+(1-2p)f_x+g_x,p=\frac{x(s-x)}{s(s-1)}\),其中 \(g_x\) 表示现在有 \(x\) 个球的颜色最终胜利的概率。注意是 \(g_x\) 而不是 \(1\),因为根据期望的定义,\(f\) 可以写成 \(\sum p_iw_i\),一般情况下 \(\sum p_i=1\),\(+1\) 没有问题;但是这里 \(f_x\) 的后继状态不一定有 \(\sum p_i\),想要实现给它们的 \(w\) 都 \(+1\) 应当加上 \(g_x\)。\(g\) 的式子是容易推的,得到 \(g_x=\frac{x}{s}\),\(f\) 稍微麻烦一点:(令 \(p=\frac{i(s-i)}{s(s-1)}\))
又 \(f_0=0\),故 \(f_2=2f_1+1\),得到 \(f_1=\frac{(s-1)^2}{s}\),求出 \(f_2\) 以后递推即可,最后答案即为 \(\sum f_{a_i}\)。时间复杂度 \(O(\max\{a_i\})\)。
停时定理做法
接下来整体考虑,不再拆贡献。
用停时定理,相当于要构造一个势能函数 \(\phi\) 使得 \(\phi\) 是一个鞅,且 \(E(\phi(X_1,\dots,X_{k+1}))-E(\phi(X_1,\dots,X_k))=1\)。对于本题,令 \(\phi(X_1,\dots,X_k)=\sum f(a'_i)\),其中 \(a'\) 表示经过了 \(X_1,\dots,X_k\) 后的 \(a\) 数组,要求即为:
差分一下,令 \(g(x)=f(x+1)-f(x)\),式子变成:
考虑将 \((g(a_i)-g(a_j-1))\) 的括号拆开:
考虑到 \(\sum a_i=s\),希望 \((s-x-1)(g(x+1)-g(x))=s-1\),即 \(g(x+1)-g(x)=\frac{s-1}{s-x-1}\),考虑一下边界情况,\(f(0)=0,f(1)=-\frac{(s-1)^2}{s}\),因为有二阶差分了剩下的直接推就可以了,初始势能为 \(\sum f(a_i)\),最终势能由 \(n-1\) 个 \(0\) 和一个 \(s\) 组成,而 \(f(0)=f(s)=0\),答案即为 \(0-\sum f(a_i)\)。时间复杂度 \(O(\max\{a_i\})\)。
这时候会发现这两个 \(f\) 其实本质是一样的。
例题:CF1349D Slime and Biscuits
和上一题非常类似,可以类似的推一个 \(f\),但是这道题可能会出现所有小饼干先都在一个人手上再全都到另一个人手上,用和上一题类似的 \(f\) 算出来的是所有小饼干全到 \(x\) 才会且一定会停止。
现在算出来了 \(E'_x\) 表示上述期望,令 \(P_x\) 表示真实的所有饼干到 \(x\) 手上的概率,\(E_x\) 表示真实的期望,\(C\) 为所有小饼干先都在一个人手上再全都到另一个人(指定了一个人)手上的期望时间。\(E\) 不好算,考虑用 \(E\) 来算 \(E'\):
这里很重要的一点是 \(C\) 对于任意的 \((x,i)\) 都是一样的,把 \(x=1\to n\) 的式子全部加到一起:
而我们要求的就是 \(\sum E_x\),算出 \(f\) 即可。但是注意不能直接消元,因为可能出现 \(0\),可以类似上一道题用 \(g_i=f_i-f_{i+1}\) 表示即可。时间复杂度 \(O(\sum a_i)\)。

浙公网安备 33010602011771号