Archipelago

Lec 2泛洪、BFS 树、广播、收敛广播与 Bellman-Ford

讲义完成更新于 2026-09-17

Lec 2 泛洪、BFS 树、广播、收敛广播与 Bellman-Ford

依据标准分布式算法理论与 DGA 全局问题预备原语整理构建 · 这些原语是后续全局问题(MST、Min-Cut、最短路)的基础构件

TL;DR

  • CONGEST 模型下每条链路每轮仅能传递 O(log⁡n)O(\log n) 位消息,通信带宽成为算法计算与协调的核心约束。
  • 泛洪与 BFS 树构造在 O(D)O(D) 轮和 O(∣E∣)O(|E|) 条消息内完成,为全网建立以源点为根的最短路径骨架。
  • 沿树广播与收敛广播以 O(D)O(D) 轮实现“散发-聚合”范式(流水线可将 kk 条消息传输优化至 O(k+D)O(k+D) 轮);加权单源最短路则由分布式 Bellman-Ford 在 O(SPD)O(\mathrm{SPD}) 轮内求解。

1. 本讲要回答的核心问题

Lec 1 的 LOCAL 模型不限带宽。但现实网络里每条链路每轮只能传有限位。当消息只有 O(log⁡n)O(\log n) 位时,最基本的“把信息传遍全网”还能多快? 本讲建立一组基础通信原语:

  • 泛洪(flooding):让一条消息扩散到全网;
  • BFS 树(BFS tree):扩散过程顺便建出一棵以源点为根的最短路树;
  • 广播(broadcast) / 收敛广播(convergecast):沿树自上而下散发 / 自下而上聚合;
  • Bellman–Ford:分布式单源最短路。

这里采用(CONGEST model):同步轮,每轮每节点向每个邻居发一条 O(log⁡n)O(\log n) 位消息。

2. 泛洪(Flooding)

泛洪

源点 ss 持有一条消息 mm。算法:ss 在第 0 轮把 mm 发给所有邻居;任何节点在首次收到 mm 的那一轮,把 mm 转发给自己除来源外的所有邻居,之后不再转发。

正确性与复杂度. 消息在第 dd 轮恰好到达所有与 ss 距离为 dd 的节点(对 dd 归纳)。因此:

定理. 泛洪在 DD 轮内(DD 为图直径)使 mm 到达每个节点。每条边最多被双向各转发一次,故消息总数为 O(∣E∣)O(|E|)。

泛洪是几乎所有全局算法的“心跳”:它既是传播机制,也是衡量“全局信息最快多快能到”的基准——任何依赖远处信息的问题都至少需要 Ω(D)\Omega(D) 轮。

3. BFS 树(BFS Tree)

把泛洪中“我第一次从谁那里收到消息”记录下来,就得到一棵最短路树。

算法步骤:

  1. 源点 ss 设 dist(s)=0\mathrm{dist}(s)=0,向邻居发 ⟨0⟩\langle 0\rangle。
  2. 节点 vv 首次收到某邻居 uu 发来的 ⟨d⟩\langle d\rangle 时,设 dist(v)=d+1\mathrm{dist}(v)=d+1、parent(v)=u\mathrm{parent}(v)=u,并向邻居发 ⟨d+1⟩\langle d+1\rangle。
  3. 之后忽略所有重复消息。

BFS 树构造性质

该算法在 DD 轮、O(∣E∣)O(|E|) 条消息内构造出一棵以 ss 为根的 BFS 树,且 dist(v)=distG(s,v)\mathrm{dist}(v)=\mathrm{dist}_G(s,v)。树深等于 DD。

几个细节: 同一轮可能有多个邻居同时把消息送到 vv,任选其一作父亲即可(用 ID 最小者打破平局可保证确定性)。BFS 树是无权图最短路树;带权图需要 Bellman–Ford(见 §6)。

4. 广播(Broadcast)

广播

根节点 rr 持有信息,要把它送达树中每个节点。沿树边自上而下转发:每个节点收到后转发给所有孩子。

复杂度. 单条 O(log⁡n)O(\log n) 位消息广播耗时 = 树深 =O(D)= O(D)。

流水线(pipelining). 若要广播 kk 条消息,逐条会花 O(kD)O(kD);用流水线(第 tt 轮发第 tt 条,各条像传送带一样依次推进)可做到 O(k+D)O(k+D) 轮。这一技巧在 DGA 第 2 章用于让 n\sqrt n 个大分量在全局 BFS 上并行通信。

5. 收敛广播(Convergecast)

广播的逆向:把分散在各节点的数据沿树自下而上聚合到根。

收敛广播

每个叶子先上报自己的值;每个内部节点等收齐所有孩子的值后,把它们与自己的值用某结合性聚合算子(如 min⁡,max⁡,sum\min,\max,\mathrm{sum})合并,再上报给父亲。根最终得到全树的聚合结果。

复杂度. 一个聚合标量(O(log⁡n)O(\log n) 位,如全树最小边权)的收敛广播耗时 O(D)O(D),每条树边只传一次。

MST 中的最小出边

DGA 第 2.2.2 节:某连通分量要找其最小权出边(minimum-weight outgoing edge, MWOE)。做法正是在该分量的 BFS 树上做一次 min⁡\min-收敛广播——每个节点持有自己的最小出边权 c(v)c(v),叶到根逐层取 min⁡\min,根即得分量 MWOE;再用一次广播把它告知全分量。对一个大小 ≤n\le\sqrt n 的小分量,这只需 O(n)O(\sqrt n) 轮。

广播 + 收敛广播合起来构成“散发–聚合”循环,是树上一切全局汇总(求和、求极值、计数、判定)的统一范式。

6. Bellman–Ford(分布式单源最短路)

无权图用 BFS 即可;带权图需要 Bellman–Ford。它天然适配分布式:每个节点只与邻居交换“我目前到源的估计距离”。

算法. 源点 ss 设 d(s)=0d(s)=0,其余 d(v)=∞d(v)=\infty。每一轮,每个节点 vv 把当前 d(v)d(v) 发给邻居,并按收到的更新: d(v)←min⁡(d(v), min⁡u∈N(v)(d(u)+w(u,v))).d(v)\leftarrow \min\Big(d(v),\ \min_{u\in N(v)}\big(d(u)+w(u,v)\big)\Big).

定理. 在无负环的带权图上,Bellman–Ford 经 hh 轮后,d(v)d(v) 等于“至多 hh 跳”的最短路长度。因此最多 n−1n-1 轮收敛到真实最短距离;按最短路跳数直径(shortest-path diameter) SPD\mathrm{SPD} 计,SPD\mathrm{SPD} 轮即收敛。

证明思路(对跳数归纳). 经 hh 轮后 d(v)d(v) = 从 ss 到 vv、边数 ≤h\le h 的最短路径权和。第 h+1h+1 轮的松弛在 hh 跳最短路尾部再接一条边,恰好覆盖所有 h+1h+1 跳路径。无负环时最短路至多 n−1n-1 条边。□\square

复杂度对比:

算法适用轮数每节点状态
BFS无权O(D)O(D)距离 + 父指针
Bellman–Ford带权(无负环)O(SPD)≤O(n)O(\mathrm{SPD})\le O(n)距离估计

Bellman–Ford 在最坏情形可能慢(SPD\mathrm{SPD} 可达 Θ(n)\Theta(n),即便 DD 很小),这正是后续课程引入低拥塞捷径(low-congestion shortcuts)、O~(D+n)\tilde O(D+\sqrt n) 等更精细技术的动机。

7. 本讲小结与核心原语对比

本讲建立了 CONGEST 模型下的四个基础原语,它们的轮复杂度都以直径 DD 为标尺:

  • 泛洪 / BFS 树:O(D)O(D) 轮把信息或最短路结构铺满全网;
  • 广播 / 收敛广播:O(D)O(D) 轮完成树上“散发”与“聚合”,流水线下多消息为 O(k+D)O(k+D);
  • Bellman–Ford:O(SPD)O(\mathrm{SPD}) 轮的带权最短路。

它们共同构成下游全局算法(MST、Min-Cut)的底层调用接口;而 Ω(D)\Omega(D)、Ω~(D+n)\tilde\Omega(D+\sqrt n) 这类下界,也将解释为什么“局部能算”和“全局必须等信息走到”是两类本质不同的问题。