Skip to content

算法Algorithm

全动态连通性

施工中 · 内容逐步修订

Fully dynamic connectivity · Dynamic graph connectivity

以分层生成森林和 replacement-edge 搜索维护在线边插入删除下的无向图连通性,并用边层级单调提升证明多对数摊还更新界。

形式陈述 ​

在线模型与选定保证 ​

在全动态图算法模型中维护固定顶点集 V 上的无向简单图,从空边集开始,记 n=|V|≥2,并持续回答图连通性查询。更新为 insert(e) 或 delete(e),查询 connected(u,v) 必须在看不到未来操作的在线条件下立即回答。以下讲 Holm–de Lichtenberg–Thorup(HDT)确定性框架的一个标准实现:

操作保证初始化/空间O(nlog⁡n) 与 O(nlog⁡n+m) wordsconnectedO(log⁡n) 最坏insert/deleteO(log2⁡n) 摊还

其中 m 是当前边数。这里显式为每个顶点建立各层的 Euler Tour Tree记录,并选用支持最坏对数时间 split/join 的确定性平衡序列;O(log⁡n) 份重叠森林产生了 nlog⁡n 的空间项。零或单顶点图可直接处理合法的平凡查询,不需要分层结构。已有非空初始图时,可逐边插入,并将相应成本计入预处理。原论文与后续实现可进一步改善查询或常数;这里固定上述版本,不把 connectivity、动态最小生成树和二边连通的不同界拼在一起。

删除树边为何困难 ​

只插边时,并查集可合并分量;删除一条非树边也不改变现有生成森林。困难发生在删除生成树边 e:森林立刻裂成 A,B 两棵树,但原图是否断开取决于所有非树边中是否存在一条跨越割 (A,B) 的 replacement edge。

从头扫描全部边能找到 replacement,却可能每次花 Θ(m)。HDT 的目标不是消除搜索,而是保证同一条失败候选只会在有限多个层级被重新扫描。

层级与森林不变量 ​

每条边 e 有层级

ℓ(e)∈{0,1,…,L},L=⌊log2⁡n⌋.

令 Gi 含所有层级至少 i 的边。维护生成森林 F0,并令 Fi 恰由 F0 中层级至少 i 的树边组成;要求每个 Fi 都生成 Gi 的各个连通分量,且

FL⊆FL−1⊆⋯⊆F0.

关键大小不变量是:Fi 的每个连通分量至多含 n/2i 个顶点。新边从 level 0 开始。每个顶点把非树边按其精确层级存入邻接袋。在第 i 层 ETT 中,额外保存分量大小、是否含 level-i 树边,以及是否有顶点关联 level-i 非树边的摘要。沿这些标记寻找下一条候选,每找到或移走一条只需 O(log⁡n);空摘要允许跳过整段无候选区域,避免在每次删除中重扫全部顶点。

插入 (u,v) 时,若 u,v 在 F0 中不连通,就把边作为 level-0 tree edge 加入相应森林;否则记为 level-0 non-tree edge。删除 non-tree edge 只需从其边集合移除。

replacement 搜索与提升 ​

删除层级为 i 的树边后,先在所有 Fj(j≤i)中 cut 这条边,再从层级 i 逐层向下搜索。在当前层级 h,取删除端点在 Fh 中所在的两棵树,选较小者 A。操作次序如下。

  1. 先提升树边。 将 A 内恰为 level-h 的树边提升到 h+1,并加入 Fh+1。更高层树边原本已在其中,所以此后整个 A 在 Fh+1 中连通。
  2. 再扫描非树边。 枚举与 A 相邻的 level-h 非树边。若另一端也在 A,将它提升到 h+1;第一步已经保证其两端在 Fh+1 中连通,生成森林不变量得以保持。
  3. 找到跨边即修复。 若候选边跨到另一侧,将它转为 level-h 树边,并在所有 Fj(j≤h)中 link,两侧重新连通,搜索结束。
  4. 本层耗尽才降层。 若没有跨边,继续处理 h−1;层级零也耗尽时,原图确实分裂成两个分量。

删除前,包含两侧的第 h 层分量至多有 n/2h 个顶点,所以较小侧至多有 n/2h+1 个。将其树边提升,正好符合下一层的大小界。层级 L 的分量只能是单点,没有可再提升的非自环边。

第一步必须在扫描非树边之前完成,而不是只在“本层没找到替代边”时执行。否则内部非树边先进入 Gh+1,其两端却可能还未在 Fh+1 中连通;随后若找到跨边并提前结束,这个不变量就没有机会恢复。记录边层级、各层树边副本和精确层级邻接袋时,也必须同步更新。

摊还分析 ​

边的层级只增不减,最多从 0 提升到 L,所以每条边一生至多被成功提升 O(log⁡n) 次。每次提升只更新一个新增森林层或两个端点的邻接袋,花 O(log⁡n);未被提升的成功替代边每次删除至多一条。把失败扫描及树边提升成本记到被提升的边,全部更新上的总提升成本为

O(mlifelog2⁡n),

其中 mlife 按插入次数计数:同一端点对删除后重新插入,开始新的边生命周期。删除和最终替代还需在至多 O(log⁡n) 层各做常数次森林操作,总代价 O(log2⁡n);每层空候选检查只需 O(log⁡n)。从空边集开始,把这些成本对整段更新求和,即得到 O(log2⁡n) 的摊还更新界。

这不是单次最坏界:一次不幸的 tree-edge 删除可能检查许多候选,成本由那些候选以后不再停留在同一层这一事实偿还。若实现允许边层级下降,上述记账立即失效。

直觉

删除树边后,真正昂贵的是判断大量非树边中谁跨越新割。HDT 总从较小一侧搜索,并把已经证实为内部边的失败候选提升到更高层;层级只能上升有限次,于是一次删除可能很贵,但同一条边不会在同一层反复收费。

树边删除、替代边与层级提升
例子与边界

具体例子:三角形中的 replacement ​

图含三角形 a−b−c−a。生成森林当前选 ab,bc,边 ac 为 level-0 non-tree edge。删除 tree edge ab 后,ETT 把森林分成 {a} 与 {b,c};扫描较小侧 a 的 incident non-tree edges 时发现 ac 跨割,于是把它转为 tree edge,图仍连通。

再看会触发提升的六点例子。初始树边为 ab,bc,cd,de,ef,非树边为 ac,af,全部在 level 零。删除 cd 后,两侧为 A={a,b,c} 与 B={d,e,f};大小相同,固定选择 A。先把 ab,bc 提到 level 一,使 A 在 F1 中连通。随后若先检查 ac,它是内部边,可安全提到 level 一;再检查 af,它跨越两侧,作为 level-0 替代树边接回 F0。此时 F1 的非平凡分量恰有三个顶点,满足 6/2=3 的大小界。

若把树边提升推迟到搜索失败后,ac 提升时 F1 还是空边森林;找到 af 后又立即停止,便留下 G1 有边而 F1 不生成它的错误状态。这个例子把操作次序与两个层级的不变量同时显式核对。

推论与应用

全动态连通性通常把一组非树边围绕动态生成森林组织;动态森林问题提供 link、cut、连通查询和路径/层级聚合接口。难点在删除树边后从非树边中寻找替代边,而不只是维护一棵森林。

失败边界与模型区分 ​

离线动态连通预先知道每条边的活跃时间,可用时间线段树和 rollback DSU;HDT 不知道未来删除时刻,付出更复杂的分层 replacement 搜索。把离线总时间除以操作数不能得到在线 update bound。

本页只维护无向连通性。带权 replacement edge 要按权值选择,会进入 fully dynamic minimum spanning forest;判断桥、二边连通或有向强连通也需要更强不变量。多重边版本可以支持,但必须给每个边实例独立身份,否则删除其中一条会误删其余平行边。

参考资料
  • Raj D. Iyer Jr., David R. Karger, Hariharan S. Rahul and Mikkel Thorup, An Experimental Study of Poly-Logarithmic Fully-Dynamic Connectivity Algorithms, ACM Journal of Experimental Algorithmics 6, 2001,§2.2–2.3:先提升小侧树边、再搜索非树边,ETT 标记枚举与 O(m+nlog⁡n) 空间。

  • Jacob Holm, Kristian de Lichtenberg, and Mikkel Thorup, “Poly-Logarithmic Deterministic Fully-Dynamic Algorithms for Connectivity, Minimum Spanning Tree, 2-Edge, and Biconnectivity,” JACM 48(4), 2001.

  • David Eppstein, Zvi Galil, Giuseppe F. Italiano, and Amnon Nissenzweig, “Sparsification — A Technique for Speeding Up Dynamic Graph Algorithms,” JACM 44(5), 1997.

  • Monika R. Henzinger and Valerie King, “Randomized Fully Dynamic Graph Algorithms with Polylogarithmic Time per Operation,” JACM 46(4), 1999.

关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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