Skip to content

算法Algorithm

静默自稳定 BFS 树

Silent self-stabilizing BFS tree · Self-stabilizing breadth-first tree

从任意距离和父指针出发逐层消除虚假小距离,最终得到固定根的最短路树并停止输出修改。

形式陈述 ​

静默自稳定BFS树从任意允许的损坏配置恢复一棵最短跳数根树,并在恢复后不再修改距离与父指针。它与从统一“未访问”初态开始的同步分布式BFS不同:本页没有可信的初始距离、访问标记或父树。

固定连通无向图G=(V,E),n个节点,指定可信根r,已知上界N≥n。采用共享内存模型中的局部邻居寄存器与复合原子步:节点一次读取所有邻居距离,计算目标,再只更新自己的字段。中央daemon每次选一个使能节点,且弱公平。代码、根身份、图和端口次序不受瞬时故障破坏。

每个节点v保存 d[v]∈{0,1,…,N}∪{∞},以及邻居身份或⊥形式的parent[v]。规定∞大于所有有限值,succ(k)=k+1当k<N,succ(N)=succ(∞)=∞。每个节点有固定的邻居端口次序用于打破并列。

text
根r:目标对为(0,⊥)
非根v:
  a = 邻居距离的最小值
  D = succ(a)
  P = 若D为∞则⊥,否则取距离为a的最小端口邻居
若当前(d[v],parent[v])不同于目标对:
  原子地改成目标对

合法集要求d[v]等于真实根距离δ(v),非根父节点是最小端口的距离δ(v)−1邻居,根为(0,⊥)。该确定的平局规则避免距离已经正确时仍无休止更换同样好的父节点。本页是带∞与根修复规则的明确教学版本;不混用不同文献的有界距离范围和daemon结论。

直觉

一个假小距离会吸引邻居,甚至让两个节点互相指作父节点。修复规则不信任旧父指针,而是重新查看全部邻居距离;每次非根更新都比某个邻居大1,所以没有根支撑的假0、假1等会逐层被挤掉。

同时,真实的0从指定根向外提供正确上界。消除虚假捷径与传播真实距离配合,最终每一层都固定。这个过程实现自稳定的收敛;距离逐级下降到根则在最后给出BFS树的最短路含义。

静默指输出寄存器不再变化。实现仍可能被调度来检查guard,但没有任何修复guard成立;节点不需要持续刷新一个“我是正确的”消息,才能维持这个寄存器模型中的合法状态。

初始b、c互指且距离0;最终r=0、a=1、b=c=2、d=3,父边均指向距离小1的节点。
例子与边界

假小距离环的修复轨迹 ​

图的边为ra、ab、bc、ca、cd。a、b、c构成三角形,r接a,d接c。取N=5,端口并列时按r<a<b<c<d选邻居。

初始距离按(r,a,b,c,d)为(4,4,0,0,1),父指针为(⊥,b,c,b,c)。b与c互为父节点,并宣称自己距离0。执行如下合法更新:

更新节点 距离向量 本次父指针变化
初始 (4,4,0,0,1) b↔c为假父环
r (0,4,0,0,1) r保持⊥
b (0,4,1,0,1) b选c
c (0,4,1,2,1) b与d同为1,c按端口选b
a (0,1,1,2,1) a选r
d (0,1,1,2,3) d仍选c
b (0,1,2,2,3) b改选a
c (0,1,2,2,3) 距离不变,父节点由b改为a

最后一步说明只检验距离、不修父指针是不够的:c的数值2早已正确,但旧父b后来也变2,不能再提供下降1的证明。规则比较完整目标对,因而会修复这种残留错误。

分层不变量给出收敛 ​

先让根修为0,并消除非根的错误0。根一旦正确就永久正确,非根每次目标至少为1;仍为0的节点持续使能,弱公平保证它最终更新。之后满足P₀:根正确,其他节点距离严格大于0。

一般定义Pₖ:真实距离至多k的节点,其距离已经永久正确;真实距离大于k的节点,当前距离严格大于k。这是按恢复层次使用的不变量,不是假设每次距离只能减小。

若Pₖ成立,真实距离k+1的v有一个距离k的邻居,且没有邻居能宣称小于k的距离。因此其目标恒为k+1;所有最小邻居都是真实第k层,已经固定,父端口也能稳定选定。

真实距离大于k+1的节点,其邻居真实距离都大于k,故邻居当前值均大于k;它的更新目标严格大于k+1,或为∞。仍宣称k+1的错误节点持续使能,最终被纠正,且不能再降回来。于是经过有限公平执行达到Pₖ₊₁。

归纳到根的离心率e=maxδ(v)后,全部距离正确;每个残留错误父指针也会在目标固定后被修好。父边距离严格减1,不可能成环,且必到唯一距离0的根,所以输出确实是BFS树。

合法后为什么不再改动 ​

正确距离满足 δ(v)=1+minu∼vδ(u)。固定端口规则又使父目标唯一,根目标也固定,因此合法配置里所有guard为假。这同时给闭包和静默,不能只从“某次碰巧画成一棵树”推出。

N的承诺不可删。若在五节点路径r–a–b–c–d上错误采用N=2,则(0,1,2,∞,∞)可以成为固定点:c看到最小邻居值2却被succ截为∞。图明明连通,后两点却没得到根距离。已知上界的作用,是保证真实最短距离不会被截掉。

推论与应用

用异步轮衡量收敛:一轮是足够长的最短执行片段,使轮开始时每个使能节点都执行一次,或因邻居变化而不再使能。弱公平使本页所需的持续修复最终发生,但不提供每轮的秒数上界。

根修复及错误0清除可在第一轮完成;之后每轮推进一个Pₖ层次。距离至多e层后固定,至多再一轮统一修好父端口,因此一个保守上界为e+2个异步轮。这里没有把不同文献的最优D轮定理直接套到本页增加根修复、∞和确定父端口的版本。

每个输出距离占 O(log⁡(N+2)) 位,父端口占 O(log⁡(deg⁡(v)+1)) 位;非根节点一次计算目标需要读取并比较全部邻居,局部工作为O(deg(v));根的目标固定,计算工作为O(1)。异步轮不等于n次节点步,某一轮中其他节点可能多次更新,因此上述轮界不自动给出O(ne)更新次数界。

若改成消息传递实现,需要保存和更新邻居视图,并处理旧消息、通道初始垃圾与消息身份。复合原子读取邻居寄存器的证明不能不加修改地覆盖这些新增状态。

参考资料
  • Stéphane Devismes and Colette Johnen, “Silent Self-stabilizing BFS Tree Algorithms Revised”, 2015,§§2–3:复合原子模型与有界/无界变体;§5.3:消除虚假小距离和逐层吸引集
  • Shing-Tsaan Huang and Nian-Shing Chen, “A Self-Stabilizing Algorithm for Constructing Breadth-First Trees,” Information Processing Letters 41(2), 1992, 109–117,历史算法来源;本文采用的规则与核读证明以Devismes–Johnen重述及明确改动为准
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系