听说这东西有必要学习一下?
本文内容全部参考《浅谈图模型上的随机游走问题》by 王修涵。
定义
给定一张有向简单图 \(G = (V,E)(V = \{v_1,v_2,\cdots,v_{|V|}\} )\)和起点 \(v_s\in V\) ,终点 \(v_t \in V\),每条边\(e = (v_x,v_y)\)有正权值\(w_e\),满足 ∀\(v_x \in V-\{v_t\},\sum_{(v_x,v_y)\in E} w(v_x,v_y) = 1\),且对于任意点 \(v_x\) 都存在一条从 \(v_x\) 出发到达 \(v_t\) 的路径。有一枚棋子从起点出发,每秒从当前所在点 \(v_x\) 以 \(w(v_x,v_y)\) 的概率选择出边 \((v_x,v_y)\) 并走向 \(v_y\) ,到达终点则停止,求期望花费时间。
思想
一般做法都是DP,根据图和题目的性质设计不同的状态来解决问题
网格图
例题(CF963E Circles of Waiting):有一枚棋子起始被放在平面直角坐标系的\((0,0)\)点。每秒棋子会随机移动。假设它当前在\((x,y)\),它下一秒有\(p_1\)的概率移动到\((x−1,y)\),\(p_2\)的概率移动到\((x,y−1)\),\(p_3\)的 概率移动到\((x+1,y)\),\(p_4\) 的概率移动到\((x,y+ 1)\)。保证 \(p_1 + p_2 + p_3 + p_4 = 1\) 。求期望 经过多少时间它会移动到一个离原点的欧几里得距离大于\(R\) 的位置。\(0≤R≤50, p_1, p_2, p_3, p_4 >0\) ,答案对\(10^9 + 7\)取模。
朴素做法
设\(f(i,j)\)表示\((i,j)\)移动到外面需要的期望时间,那么有
\[ f(i,j)=\begin{cases} p_1f(i-1,j)+p_2f(i,j-1)+p_3f(i+1,j)+p_4(i,j+1)&,i^2+j^2\le R^2\\ 0&,i^2+j^2>R^2 \end{cases} \]
直接高斯消元,复杂度\(O(R^6)\)。
直接消元法
把点从左到右、从上到下标号,把方程也排个序。
考虑高斯消元的过程,发现消到\((i,j)\)时只有\((i,k),k>j\)和\((i+1,k),k\le j\)的方程有\(f(i,j)\)这个变量,所以只需要消\(O(R)\)个方程。
所以最终复杂度是\(O(R^4)\)。
主元法
把每一行第一个格子的\(f\)作为主元,从左往右推过去,得到最右边关于主元的表达式。
当欧几里得距离大于\(R\)时即可得到方程:\(f(i,j)=0\),共\(O(R)\)个方程,直接高斯消元即可。
复杂度\(O(R^3)\)。
总结
设总点数为\(n\)。
从复杂度上看,直接消元法复杂度\(O(n^2)\),主元法\(O(n\sqrt{n})\)。
精度上,据说直接消元法更优?
适用性来看:
- 网格图中存在障碍/边权为0时主元法会出现无法向右推的情况,需要再设一个主元,复杂度增加,但直接消元法复杂度不变。
- 转移方程为\(f(i,j)=p_1f(i,j+1)+p_2f(i+1,j)+p_3(pre(i,j))+1\),其中\(pre(i,j)=(x,y),x给定时直接消元法复杂度分析就是假的了,而主元法仍然可以使用。
- 求邻接矩阵行列式(别问我这东西有啥用)时只能直接消元法。
稀疏图
例题就是定义里的题,\(n,m\le 2000\),答案模随机质数。
考虑答案就是\(\sum_{t>0}P(T>t)\),可以求出走\(i\)步还没有走到终点的概率,然后求和。
设\(f_{i,u}\)表示走了\(i\)步,到了\(u\),还没有走到过终点的概率,那么有转移方程:
\[ f_{i,u}=\sum_v p(v,u)f_{i-1,v} \]
显然,转移方程和\(i\)无关,所以可以写成矩阵的形式:\(f_i=M\times f_{i-1}=f_0M^{i}\)。
考虑\(M\)的特征多项式\(p(\lambda)\)的次数不超过\(n\),且\(p(M)=0\),所以\(p\)就是\(M^i\)的线性递推式。
\(M^i\)左乘一个\(f_0\),线性递推式不变,所以\(f\)的线性递推式长度也不超过\(n\)。
所以\(P(T>t)=\sum_u f_{t,u}\)的递推式长度也是\(O(n)\)的,可以预处理出前\(2n\)项,然后BM算法求出递推式。设递推式的生成函数为\(C(x)\),\(a_t=P(T>t)\)的生成函数为\(A(x)\)。
那么可以得到:\(A=C\times A+A_0\),其中\(A_0\)由前\(n\)项决定。
于是可以得到\(A=\frac{A_0}{1-C}\),且易得答案就是\(x=1\)时\(A(x)\)的值,可以求出。由于模的是随机质数,可以假设分母不为0。
一般图
不会,咕咕咕……