势函数和鞅的停时定理学习笔记

参考博客:一类概率期望问题的杀器:势函数和鞅的停时定理势函数和鞅的停时定理

感谢zzz大神的指导

方法简述

对于随机事件序列 (A_0,A_1,A_2,A_3,...,A_T),其停时为随机变量 (T)。放在随机游走模型上就是 (A_i) 相当于第 (i) 步走的是哪个点,(A_0,A_1,A_2,...,A_T) 表示从起始点走到终止点的一条路径,(T) 表示路径长度。我们的问题是:求解 (E(T))

具体方法是,对于每种随机事件(或者可以认为是“状态”)设定一个势函数 (phi(A_i)),并且让这个势函数每过一秒期望减 (1),即对于任意的 (i),有 (E(phi(A_{i+1})-phi(A_i)) = 1)。然后 (E(T) = phi(A_0)-phi(A_T))。因此解题的关键在于求 (phi)

实际上这只是感性理解,具体证明还需要用到鞅和停时定理。它能用的条件是:停时有界,不为正无穷,并且 (phi(A_T)-phi(A_0))。不过这些一般题目都能保证。

例题

CF1349D Slime and Biscuits

以第 (t) 时刻第 (i) 个人拥有的饼干数做为小状态,设每个人的势函数为 (f(a_{t,i}));把所有人的饼干数压一块作为大状态,设势函数为 (sum_{i}f(a_{t,i}))。那么我们要做的是:

[E(phi(A_t)-phi(A_{t+1}))=-1 ]

即:((m) 为总饼干数)

[sum_i f(a_{t,i})-sum_{i}sum_{j ot= i}frac{a_{t,j}}{m(n-1)}(f(a_{t,i}-1)+f(a_{t,j}+1)+sum_{k ot= i,k ot= j}f(a_{t,k}))=-1 ]

[sum_i f(a_{t,i})=sum_{i}(frac{a_{t,j}}{m}f(a_{t,i}-1)+frac{m-a_{t,i}}{m(n-1)}f(a_{t,i} + 1)+frac{(m-a_{t,i})(n-2)}{m(n-1)}f(a_{t,i})+frac{a_{t,i}}{m}) ]

如果我们能够构造出一种 (f(a_{t,i})),符合这个式子,那么这个 (f) 就能用于求解 (E(T))。一种构造方法是:

[f(a)=frac{a}{m}f(a-1) + frac{m-a}{m(n-1)}f(a+1) + frac{(m-a)(n-2)}{m(n-1)}f(a)+frac{a}{m} ]

发现是一个只与前两项有关的递推式。代入 (a=0),解得 (f(0)=f(1)),于是我们随意指定 (f(0)) 直接算即可。例如我们可以让 (f(0)=f(1)=1),然后答案是:

[E(T)=sum_i f(a_{0,i}) - (f(m) + (n-1)f(0)) ]

CF850F Rainbow Balls

类似地,以第 (t) 时刻第 (i) 个颜色的球的个数作为小状态,设每个人的势函数为 (f(a_{t,i}));把所有人的饼干数压一块作为大状态,设势函数为 (sum_{i}f(a_{t,i}))。那么我们要做的是:

[E(phi(A_t)-phi(A_{t+1}))=-1 ]

即:((m) 为总球数)

[sum_i f(a_i) = sum_i frac{a_i(m-a_i)}{m(m-1)}(f(a_i + 1) + f(a_i-1)) + (1 - 2frac{a_i(m-a_i)}{m(m-1)})f(a_i) + frac{a_i}{m} ]

我们接着类似上一道题那样构造:

[f(a)=frac{a(m-a)}{m(m-1)}(f(a+1)+f(a-1))+(1-2frac{a(m-a)}{m(m-1)})f(a) + frac{a}{m}\ frac{a(m-a)}{m(m-1)}(f(a+1)+f(a-1)-2f(a))+frac{a}{m}=0\ f(a+1)-f(a)-(f(a)-f(a-1))=-frac{m-1}{m-a} ]

我们当然可以钦定 (f(0)=f(1)=0),然后把所有的 (f) 都递推出来,这样是对的。但是,由于最终的那个 (m) 可能非常大,我们没办法递推到 (m)。由于那个可恶的 (a) 在分母上,我们也没有办法矩乘加速。(或许可以打个表?)不过既然左边的式子长得那么好看,我们或许可以在它上面做文章。

我们可以设 (g(a)=f(a)-f(a-1)),那么有:

[g(a+1)-g(a)=-frac{m-1}{m-a}\ g(a)=g(0)-sum_{b=0}^{a-1}frac{m-1}{m-a} ]

于是可以推 (f)

[egin{aligned} f(x)&=f(x-1)+g(x)\ &=f(0) + sum_{a=1}^{x}g(0)-sum_{b=0}^{a-1}frac{m-1}{m-a}\ &= f(0)+xg(0)-(m-1)sum_{b=0}^{x-1}frac{x-b}{m-b}\ &= f(0)+xg(0)-(m-1)sum_{b=0}^{x-1}1-frac{x-m}{m-b}\ &= f(0)+xg(0)-(m-1)x+(m-1)(x-m)sum_{b=0}^{x-1}frac{1}{m-b} end{aligned} ]

令人高兴的是,最右面那个和式乘上了个 (x - m),这样 (f(m)) 就好算很多了。方便起见,我们令 (f(0)=0,g(0)=m-1),那么:

[f(x)=(m-1)(x-m)sum_{b=0}^{x-1}frac{1}{m-b} ]

直接暴算可得 (f)

因为 (f(m)-(n-1)f(0)=0) 为常数,可以用停时定理。最终答案为:

[phi(A_0)-phi(A_T)=sum_{i}f(a_i)-(f(m)-(n-1)f(0))=sum_{i}f(a_i) ]

CF1025G Company Acquisitions

类似地,我们以“块”内的总点数作为小状态,那么有:

[egin{aligned} E(phi(A_t))&=sum_{i=1}^{m_t}f(a_{t,i})\ E(phi(A_{t+1}))&=sum_{i=1}^{m_t}sum_{j ot= i}frac{1}{m_t(m_t-1)}((a_{t,i}-1)f(1) + f(a_{t,j}+1)+sum_{k ot= i,k ot= j}f(a_{t,k}))\ &=sum_{i=1}^{m_t}(1-frac{2}{m_t})f(a_{t,i})+frac{a_{t,i}-1}{m_t}f(1) + frac{1}{m_t}f(a_{t,i}+1) end{aligned} ]

(E(phi(A_{t + 1}))-E(phi(A_t))=-1) 得:

[sum_{i=1}^{m_t}(1-frac{2}{m_t})f(a_{t,i})+frac{a_{t,i}-1}{m_t}f(1) + frac{1}{m_t}f(a_{t,i}+1)+frac{1}{m_t}=sum_{i=1}^{m_t}f(a_{t,i}) ]

看起来那个 (m_t) 很吓人,因为我们并没有将 (m_t) 计入状态。不过幸运的是,我们可以把 (m_t) 消去:

[sum_{i=1}^{m_t}-2f(a_{t,i})+(a_{t,i}-1)f(1)+f(a_{t,i}+1)+1=0 ]

于是我们可以构造:

[-2f(a) + (a-1)f(1)+f(a+1)+1=0 ]

我们钦定 (f(1)=0),那么有:

[f(a+1)=2f(a)-1 ]

显然 (f(n)) 为常数,于是可以应用停时定理:

[phi(A_0) - phi(A_T)=sum_{i=1}^{m_t}f(a_{0,i})-f(n) ]

递推出 (f) 直接算即可。

原文地址:https://www.cnblogs.com/JiaZP/p/13735322.html