鞅
直观来讲,鞅是满足下述条件的随机过程:已知过去的某个时刻 s 及之前的所有观测值,对于以后的任意时刻 t,t 的观测值的条件期望等
于 s 的观测值。
形式化的定理考虑了很多边界情况,通常来说,使用鞅只需要构造势函数 ϕ,使得对每个时刻 t 都满足(At 是该时刻的局面):
E(ϕ(At+1)−ϕ(At)∣Ai=0t)=−1
由于 E(ϕ(At)∣Ai=0t)=ϕ(At),所以上式其实可以改写成推式子更友好的 ϕ(At)=E(ϕ(At+1∣Ai=0t))+1。
如果题目中的操作是一个 Marcov 过程,即每步仅依赖上一步的状态,那式子还能进一步简化为 ϕ(At)=E(ϕ(At+1∣At))+1。
设 T 为停止时刻,我们还要保证 ϕ(AT) 是常数,这样我们可以构建 Xi=ϕ(Ai)+i,根据鞅的定义 X 是一个鞅,根据停时定理我们知道:
E(XT)=E(X0)⇒E(T)=ϕ(A0)−ϕ(AT)
常用的势函数是 ϕ(A)=∑i=1nf(ai)。
来点例题:
有 n 个人,第 i 个人有 ai 个饼干,每次在所有饼干中随一个,把它给除了自己所有者的随机一个人。
当一个人垄断了所有饼干时结束,问期望停止时刻。
n≤105,∑ai≤3×105。
在本题,每个局面含有的信息显然就是当前的 ai=1n,我们设 ϕ(A)=∑i=1nf(ai),如果不是该函数那我们也要找一个对每个元素平等的函数,毕竟本题每个元素的地位平等。
推一下,设 m=∑ai:
E(ϕ(At+1)∣Ai=1t)=E(ϕ(At+1)∣At)=i=1∑nmaif(ai−1)+j=1,j=i∑n[n−1n−2f(aj)+n−11f(aj+1)]=i=1∑n[maif(ai−1)+mm−ai[n−1n−2f(aj)+n−11f(aj+1)]]
应用预设 ϕ(At)=E(ϕ(At+1)∣At)+1:
ϕ(At)=E(ϕ(At+1)∣At)+1=i=1∑n[maif(ai−1)+mm−ai[n−1n−2f(aj)+n−11f(aj+1)]]+1=i=1∑n[maif(ai−1)+mm−ain−1n−2f(aj)+mm−ain−11f(aj+1)+mai]
显而易见地:
f(x)=mxf(x−1)+mm−xn−1n−2f(x)+mm−xn−11f(x+1)+mx
这是经典形式,我们可以求出 f(x) 关于 f(x−1),f(x−2) 的递推式,x=0 代入得到 f(1)=f(0),任取一个值便可推出所有 f 值且无矛盾。
最后用 ϕ(A0)−ϕ(AT) 得到答案。
这个很厉害的一点在于虽然我们不知道结束时间,但是我们知道结束状态。
你有 n 个点组成若干个菊花,每个菊花形如一个根携带 ≥0 个儿子,每次随机选两个菊花 a,b,解散 a,将 a 的根接到 b 的根下面当儿子,将 a 的儿子全部变为新菊花的根,停时是只剩一个菊花,求停时期望步数。
n≤500。
每个状态的信息显然有菊花个数 m 和每个菊花的点数 ai,需要注意 m 是一个随时间变化的量而不是常量。
考虑仍然设 ϕ(At)=∑i=1mf(at,i)。
E(ϕ(At+1))=i=1∑mm1(ai−1)f(1)+mm−1(m−11f(ai+1)+m−1m−2f(ai))=i=1∑mm1(ai−1)f(1)+m1f(ai+1)+mm−2f(ai)
势函数的 +1 这里就不再抄一遍了,直接换成 +m1,于是得到:
f(x)=m1(x−1)f(1)+m1f(x+1)+mm−2f(x)+m1
你发现移项后刚好 m 消掉了(若没消掉就应该换最初形式了):
f(x+1)=2f(x)−(x−1)f(1)−1
随便钦定一个 f(1),递推即可。
有一袋球,第 i 种颜色有 ai 个,每次选两个球出来把第二个涂成第一个的颜色,问什么时候所有球颜色相同。
n≤2500,ai≤105。
设 m=∑iai,ϕ(At)=∑if(ai):
E(ϕ(At+1))=i=1∑nmai(m−1ai−1f(ai)+m−1m−aif(ai+1))+mm−ai(m−1aif(ai−1)+m−1m−1−aif(ai))=i=1∑nm(m−1)[ai(ai−1)+(m−ai)(m−ai−1)]f(ai)+(m−ai)aif(ai−1)+ai(m−ai)f(ai+1)
这次的加一肯定拆成 mai(拆成 n1 似乎也可以),整理可以得到:
f(x+1)=−f(x−1)+2f(x)−m−xm−1
由于不存在的颜色不会对停时过程产生影响,所以 f(0)=0,我们效仿第一题,随便钦定一个 f(1) 然后跑其实就是对的。
求 f(m) 可以用矩乘,但是根据我不会的推导可以得到 f(m)=mf(1)−(m−1)2。
总结
好像稀里糊涂的做完了三题,我们可以提出很多疑点:
- 为什么这三题中总有一个量我们可以随便取,而最终的结果都是正确的?
应用势函数解题,势本身其实就是有相对性的(最后的答案也是求差来得到),随便取一个量相当于我们规定了一个基准参考系而已,无论用什么当基准答案都不会变。
- 为什么状态的所谓“势”必定存在,而不会像漩涡一样循环起来?
其实这是题目规定的有停时,所以每个状态和其转移出去的状态离那个停时的“距离”必定是不同的,否则就会出现无法停止的状况。
如果你自己尝试做一下第三题,你会发现在没化简的原版式子中带入 x=m 会得到 f(m)=f(m)+1,这看上去正像是在说这个势函数非法,但实则不然,这完全是因为当你到了 x=m 的状态后的操作只会转移回自己这个状态,从而陷入了循环,但我们使用 x=m−1 的式子计算 f(m) 就是对的,这是因为 x=m−1 时我们转移到的 f(m) 必定是第一次到这个状态,也就符合了题目对停时的定义。
同样的,第一题的操作也并不会自然停止,但我们无须关心停止后的状态,只需要满足我们设计的 ϕ(At)=E(ϕ(At+1∣At))+1 且我们要用到的取值均有界即可应用。
所以在应用鞅解题时我们不仅只能做第二题这种规定停时 = 自然停时的情况,对于一、三两道题,我们同样可以设计出一个状态来描述 A 与 B 在时间轴上的距离。