鞅_杂项
JueFan 一只绝帆

直观来讲,鞅是满足下述条件的随机过程:已知过去的某个时刻 ss 及之前的所有观测值,对于以后的任意时刻 tttt 的观测值的条件期望等 于 ss 的观测值。

形式化的定理考虑了很多边界情况,通常来说,使用鞅只需要构造势函数 ϕ\phi,使得对每个时刻 tt 都满足(AtA_t 是该时刻的局面):

E(ϕ(At+1)ϕ(At)Ai=0t)=1\mathbb E(\phi(A_{t+1})-\phi(A_t)\mid A_{i=0}^t)=-1

由于 E(ϕ(At)Ai=0t)=ϕ(At)\mathbb E(\phi(A_t)\mid A_{i=0}^t)=\phi(A_t),所以上式其实可以改写成推式子更友好的 ϕ(At)=E(ϕ(At+1Ai=0t))+1\phi(A_t)=\mathbb E(\phi(A_{t+1}\mid A_{i=0}^t))+1

如果题目中的操作是一个 Marcov 过程,即每步仅依赖上一步的状态,那式子还能进一步简化为 ϕ(At)=E(ϕ(At+1At))+1\phi(A_t)=\mathbb E(\phi(A_{t+1}\mid A_t))+1

T\cal T 为停止时刻,我们还要保证 ϕ(AT)\phi(A_\mathcal T) 是常数,这样我们可以构建 Xi=ϕ(Ai)+i\mathcal X_i=\phi(A_i)+i,根据鞅的定义 X\mathcal X 是一个鞅,根据停时定理我们知道:

E(XT)=E(X0)E(T)=ϕ(A0)ϕ(AT)\mathbb E(\mathcal X_\mathcal T)=\mathbb E(\mathcal X_0)\Rightarrow \mathbb E(\mathcal T)=\phi(A_0)-\phi(A_\mathcal T)

常用的势函数是 ϕ(A)=i=1nf(ai)\phi(A)=\sum_{i=1}^nf(a_i)

来点例题:

CF1349D Slime and Biscuits

nn 个人,第 ii 个人有 aia_i 个饼干,每次在所有饼干中随一个,把它给除了自己所有者的随机一个人。

当一个人垄断了所有饼干时结束,问期望停止时刻。

n105,ai3×105n\le 10^5,\sum a_i\le 3\times 10^5

在本题,每个局面含有的信息显然就是当前的 ai=1na_{i=1}^n,我们设 ϕ(A)=i=1nf(ai)\phi(A)=\sum_{i=1}^nf(a_i),如果不是该函数那我们也要找一个对每个元素平等的函数,毕竟本题每个元素的地位平等。

推一下,设 m=aim=\sum a_i

E(ϕ(At+1)Ai=1t)=E(ϕ(At+1)At)=i=1naim[f(ai1)+j=1,jin[n2n1f(aj)+1n1f(aj+1)]]=i=1n[aimf(ai1)+maim[n2n1f(aj)+1n1f(aj+1)]]\begin{aligned}\mathbb E(\phi(A_{t+1})\mid A_{i=1}^t)&=\mathbb E(\phi(A_{t+1})\mid A_t)\\&=\sum_{i=1}^n\frac{a_i}{m}\left[f(a_i-1)+\sum_{j=1,j\ne i}^n\left[\frac{n-2}{n-1}f(a_j)+\frac{1}{n-1}f(a_j+1)\right]\right]\\&=\sum_{i=1}^n\left[\frac{a_i}{m}f(a_i-1)+\frac{m-a_i}{m}\left[\frac{n-2}{n-1}f(a_j)+\frac{1}{n-1}f(a_j+1)\right]\right]\end{aligned}

应用预设 ϕ(At)=E(ϕ(At+1)At)+1\phi(A_t)=\mathbb E(\phi(A_{t+1})\mid A_t)+1

ϕ(At)=E(ϕ(At+1)At)+1=i=1n[aimf(ai1)+maim[n2n1f(aj)+1n1f(aj+1)]]+1=i=1n[aimf(ai1)+maimn2n1f(aj)+maim1n1f(aj+1)+aim]\begin{aligned}\phi(A_t)&=\mathbb E(\phi(A_{t+1})\mid A_t)+1\\&=\sum_{i=1}^n\left[\frac{a_i}{m}f(a_i-1)+\frac{m-a_i}{m}\left[\frac{n-2}{n-1}f(a_j)+\frac{1}{n-1}f(a_j+1)\right]\right]+1\\&=\sum_{i=1}^n\left[\frac{a_i}{m}f(a_i-1)+\frac{m-a_i}{m}\frac{n-2}{n-1}f(a_j)+\frac{m-a_i}{m}\frac{1}{n-1}f(a_j+1)+\frac{a_i}{m}\right]\end{aligned}

显而易见地:

f(x)=xmf(x1)+mxmn2n1f(x)+mxm1n1f(x+1)+xmf(x)=\frac{x}{m}f(x-1)+\frac{m-x}{m}\frac{n-2}{n-1}f(x)+\frac{m-x}{m}\frac{1}{n-1}f(x+1)+\frac{x}{m}

这是经典形式,我们可以求出 f(x)f(x) 关于 f(x1),f(x2)f(x-1),f(x-2) 的递推式,x=0x=0 代入得到 f(1)=f(0)f(1)=f(0),任取一个值便可推出所有 ff 值且无矛盾。

最后用 ϕ(A0)ϕ(AT)\phi(A_0)-\phi(A_\mathcal T) 得到答案。

这个很厉害的一点在于虽然我们不知道结束时间,但是我们知道结束状态。

CF1025G Company Acquisitions

你有 nn 个点组成若干个菊花,每个菊花形如一个根携带 0\ge 0 个儿子,每次随机选两个菊花 a,ba,b,解散 aa,将 aa 的根接到 bb 的根下面当儿子,将 aa 的儿子全部变为新菊花的根,停时是只剩一个菊花,求停时期望步数。

n500n\le 500

每个状态的信息显然有菊花个数 mm 和每个菊花的点数 aia_i,需要注意 mm 是一个随时间变化的量而不是常量。

考虑仍然设 ϕ(At)=i=1mf(at,i)\phi(A_t)=\sum_{i=1}^m f(a_{t,i})

E(ϕ(At+1))=i=1m1m(ai1)f(1)+m1m(1m1f(ai+1)+m2m1f(ai))=i=1m1m(ai1)f(1)+1mf(ai+1)+m2mf(ai)\begin{aligned}\mathbb E(\phi(A_{t+1}))&=\sum_{i=1}^m\frac 1 m(a_i-1)f(1)+\frac{m-1}{m}(\frac{1}{m-1}f(a_i+1)+\frac{m-2}{m-1}f(a_i))\\&=\sum_{i=1}^m\frac 1 m(a_i-1)f(1)+\frac{1}{m}f(a_i+1)+\frac{m-2}{m}f(a_i)\end{aligned}

势函数的 +1+1 这里就不再抄一遍了,直接换成 +1m+\frac 1 m,于是得到:

f(x)=1m(x1)f(1)+1mf(x+1)+m2mf(x)+1mf(x)=\frac1 m(x-1)f(1)+\frac 1 mf(x+1)+\frac{m-2}{m}f(x)+\frac 1 m

你发现移项后刚好 mm 消掉了(若没消掉就应该换最初形式了):

f(x+1)=2f(x)(x1)f(1)1f(x+1)=2f(x)-(x-1)f(1)-1

随便钦定一个 f(1)f(1),递推即可。

CF850F Rainbow Balls

有一袋球,第 ii 种颜色有 aia_i 个,每次选两个球出来把第二个涂成第一个的颜色,问什么时候所有球颜色相同。

n2500,ai105n\le 2500,a_i\le 10^5

m=iai,ϕ(At)=if(ai)m=\sum_i a_i,\phi(A_t)=\sum_i f(a_i)

E(ϕ(At+1))=i=1naim(ai1m1f(ai)+maim1f(ai+1))+maim(aim1f(ai1)+m1aim1f(ai))=i=1n[ai(ai1)+(mai)(mai1)]f(ai)+(mai)aif(ai1)+ai(mai)f(ai+1)m(m1)\begin{aligned}\mathbb E(\phi(A_{t+1}))&=\sum_{i=1}^n\frac{a_i}{m}(\frac{a_i-1}{m-1}f(a_i)+\frac{m-a_i}{m-1}f(a_i+1))+\frac{m-a_i}{m}(\frac{a_i}{m-1}f(a_i-1)+\frac{m-1-a_i}{m-1}f(a_i))\\&=\sum_{i=1}^n\frac{[a_i(a_i-1)+(m-a_i)(m-a_i-1)]f(a_i)+(m-a_i)a_if(a_i-1)+a_i(m-a_i)f(a_i+1)}{m(m-1)}\end{aligned}

这次的加一肯定拆成 aim\frac{a_i}{m}(拆成 1n\frac 1 n 似乎也可以),整理可以得到:

f(x+1)=f(x1)+2f(x)m1mxf(x+1)=-f(x-1)+2f(x)-\frac{m-1}{m-x}

由于不存在的颜色不会对停时过程产生影响,所以 f(0)=0f(0)=0,我们效仿第一题,随便钦定一个 f(1)f(1) 然后跑其实就是对的。

f(m)f(m) 可以用矩乘,但是根据我不会的推导可以得到 f(m)=mf(1)(m1)2f(m)=mf(1)-(m-1)^2

总结

好像稀里糊涂的做完了三题,我们可以提出很多疑点:

  • 为什么这三题中总有一个量我们可以随便取,而最终的结果都是正确的?

应用势函数解题,势本身其实就是有相对性的(最后的答案也是求差来得到),随便取一个量相当于我们规定了一个基准参考系而已,无论用什么当基准答案都不会变。

  • 为什么状态的所谓“势”必定存在,而不会像漩涡一样循环起来?

其实这是题目规定的有停时,所以每个状态和其转移出去的状态离那个停时的“距离”必定是不同的,否则就会出现无法停止的状况。

如果你自己尝试做一下第三题,你会发现在没化简的原版式子中带入 x=mx=m 会得到 f(m)=f(m)+1f(m)=f(m)+1,这看上去正像是在说这个势函数非法,但实则不然,这完全是因为当你到了 x=mx=m 的状态后的操作只会转移回自己这个状态,从而陷入了循环,但我们使用 x=m1x=m-1 的式子计算 f(m)f(m) 就是对的,这是因为 x=m1x=m-1 时我们转移到的 f(m)f(m) 必定是第一次到这个状态,也就符合了题目对停时的定义。

同样的,第一题的操作也并不会自然停止,但我们无须关心停止后的状态,只需要满足我们设计的 ϕ(At)=E(ϕ(At+1At))+1\phi(A_t)=\mathbb E(\phi(A_{t+1}\mid A_t))+1 且我们要用到的取值均有界即可应用。

所以在应用鞅解题时我们不仅只能做第二题这种规定停时 == 自然停时的情况,对于一、三两道题,我们同样可以设计出一个状态来描述 AABB 在时间轴上的距离。

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 231.7k 访客数 访问量