参考博客:一类概率期望问题的杀器:势函数和鞅的停时定理;势函数和鞅的停时定理
感谢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)\)。不过这些一般题目都能保证。
例题
以第 \(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 \not= i}\frac{a_{t,j}}{m(n-1)}(f(a_{t,i}-1)+f(a_{t,j}+1)+\sum_{k \not= i,k\not= 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))
\]
类似地,以第 \(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 - 2\frac{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-2\frac{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\):
\[\begin{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)
\]
类似地,我们以“块”内的总点数作为小状态,那么有:
\[\begin{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 \not= i}\frac{1}{m_t(m_t-1)}((a_{t,i}-1)f(1) + f(a_{t,j}+1)+\sum_{k \not= i,k \not= 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\) 直接算即可。