ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

随机游走算法

随机游走算法

随机游走

公式

算步数dis(u)=1deg(u)∑v,(v,u)∈Edis(v)+1dis(u)=\frac 1 {deg(u)} \sum_{v,(v,u)\in E} dis(v)+1dis(u)=deg(u)1​∑v,(v,u)∈E​dis(v)+1
树上随机游走,设x到fa_x的期望步数为f(x)=1deg(x)(wx,fax+∑v∈son(wx,v+f(v)+f(x)))=∑e(x,y)wx,y+∑v∈sonf(v)f(x)=\frac 1 {deg(x)} (w_{x,fa_x}+\sum_{v \in son}{(w_{x,v}+f(v)+f(x)}))=\sum_{e(x,y)} w_{x,y} +\sum_{v \in son}f(v)f(x)=deg(x)1​(wx,fax​​+v∈son∑​(wx,v​+f(v)+f(x)))=e(x,y)∑​wx,y​+v∈son∑​f(v)

无限随机游走p(u)=1deg(u)∑v,(v,u)∈Ep(v)p(u)=\frac 1 {deg(u)} \sum_{v,(v,u)\in E} p(v)p(u)=deg(u)1​∑v,(v,u)∈E​p(v)

2542. 「PKUWC2018」随机游走

定一棵 n 个结点的树,你从点 x 出发,每次等概率随机选择一条与所在点相邻的边走过去。
有 Q 次询问,每次询问给定一个集合 S,求如果从 x 出发一直随机游走,直到点集 S 中所有点都至少经过一次的话,期望游走几步。
特别地,点 x(即起点)视为一开始就被经过了一次。
答案对 998244353 取模。

1≤n≤18,1≤Q≤5000,1≤k≤n1\leq n\leq 18,1\leq Q\leq 5000,1\leq k\leq n1≤n≤18,1≤Q≤5000,1≤k≤n

树上dp,

#3675. 「北大集训 2021」随机游走

给定一张 n 个点的有向图,点标号为 1,2,\dots,n,初始时对 \forall i\in{1,2,\dots,n-1},从 i 到 i+1 有一条有向边。

你可以在其中再加入 m 条有向边(起点终点任意),允许有重边和自环。

小 A 会从 1 出发,以随机游走的形式行动,直到抵达 n。你希望最大化小 A 从 1 移动到 n 的期望步数。

定义随机游走是这样的一种移动方式:设小 A 当前在点 x,x 有 d 条出边,则小 A 会从这 d 条出边中等概率随机选择一条走过去。

可以通过打表观察规律,dp公式代入,算EX(1)

CF 963E Circles of Waiting

网格随机游走
主元法

Expected Value

简单无向图随机游走,起点和终点给出,求期望时间。
暴力解方程O(n2)O(n^2)O(n2)
考虑对于一个点s,表示走了 i 步,当前停留在 j,且没有走到过 n 的概率fi,jf_{i,j}fi,j​,有Fi=MFi−1F_i=MF_{i-1}Fi​=MFi−1​
Berlekamp–Massey算法,在O(n2)O(n^2)O(n2)的时间内求解出Fi和∑j≤iFjF_i和\sum_{j\le i} F_jFi​和∑j≤i​Fj​的最短递推式的最短递推式长度也不超过 n.
一个 k 阶线性递推序列 a 的生成函数A(x)=A0(x)+A(x)C(x)A(x)=A_0(x)+A(x)C(x)A(x)=A0​(x)+A(x)C(x),答案为A(1)A(1)A(1),可以通过A0(1),C(1)A_0(1),C(1)A0​(1),C(1)的值算出。

A Boring Problem

树上随机游走,
每次询问,给出树上任意2个节点u,vu,vu,v的期望边数。

Random Walk On Tree

树上随机游走,
f(u,v)=f(u,v)=f(u,v)=u到v的期望边数的平方,
每次询问,给出树上任意2个子树,求子树上的节点u,vu,vu,v的f(u,v)f(u,v)f(u,v)的和。
n,q≤1e5n,q\le1e5n,q≤1e5

ARC 185 Random Walk on Tree

树有n∗m+1n*m+1n∗m+1个点,树的构造为,先构造m条n个点的链,把所有链的一端和根节点相连。树上随机游走,问,多久经过每个点至少一次。

链上随机游走,从1端走到另一端的期望步数d(i)=i2d(i)=i^2d(i)=i2,iii为链的长度

一个n面骰子,每面出现概率相同,让每面都出现至少一次,期望为n/1+n/2+⋯+n/nn/1+n/2+\cdots+n/nn/1+n/2+⋯+n/n。

答案为m2∗(n/1+n/2+⋯+(n−1)/n)∗2+m2∗nm^2*(n/1+n/2+\cdots+(n-1)/n)*2+m^2*nm2∗(n/1+n/2+⋯+(n−1)/n)∗2+m2∗n

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进