“支配关系相对于指定入口定义:“到 $v$ 的每条路径都经过 $u$”;强连通分量则要求任意两点互相可达,不依赖单一入口。一个 SCC 内的点未必互相支配,支配树的祖先关系也不要求存在返程路径。”
形式陈述 ​
设有限有向图
可达性的自反性与传递性,加上定义中的对称写法,使
把每个 SCC 收缩为一个顶点,并在不同分量间存在原弧时连一条弧,得到凝聚图
Kosaraju–Sharir 算法先在
Tarjan 算法只做一遍 DFS。给顶点
则
在同时存出邻接表与转置邻接表的表示中,Kosaraju–Sharir 时间为
直觉
SCC 把图中的循环区域压成不可再分的“往返岛屿”。岛内任意点都能去而复返;岛与岛之间一旦离开,凝聚图的无环性保证不可能沿分量边绕回。这样,原图的循环结构留在分量内部,分量之间则恢复可拓扑处理的偏序。
两类线性算法利用的是同一方向不对称。Kosaraju–Sharir 先用完成时间找到凝聚图边界,再在反图中从不会外泄的分量开始剥离。Tarjan 把尚未归属分量的顶点留在栈上,lowlink 询问当前 DFS 子树能否回到更早的活动顶点;一旦回不到根之前,就可以封口并弹出一整段。
例子与边界
考虑弧
分量依次为
在 Tarjan 实现中,设
平行弧不改变 SCC 划分,只增加扫描记录;自环让单顶点分量显式含圈,但没有自环的孤立顶点也仍是一个 SCC。SCC 分解唯一,分量的编号、输出顺序和 DFS 树均可随邻接顺序改变。
推论与应用
凝聚图允许先在分量内部处理循环,再按拓扑序传播分量间信息。2-SAT 用变量文字图中的 SCC 判断某个文字与其否定是否同属一分量;依赖分析可把互相递归的模块合成一个编译单元;DAG 动态规划则从凝聚后的无环骨架开始。
自动机论模型检查会在系统与 Büchi 自动机的积图中寻找从初态可达、含接受状态且确有可重复圈的 SCC。单顶点 SCC 若没有自环,不能仅凭“它是 SCC”就断言存在正长度循环;接受条件仍需单独核对。
支配树询问单入口 flow graph 的所有入口路径是否必经某点,输出祖先树;SCC 询问两点是否存在双向路径,输出等价类。二者都使用 DFS 编号,但量词、状态和更新公式不同。对动态图,插入一条返弧就可能合并整条凝聚路径上的分量,静态线性分解不会局部自动修复。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,§20.5。
- Robert E. Tarjan, “Depth-First Search and Linear Graph Algorithms,” SIAM Journal on Computing 1(2), 1972, pp. 146–160。
- Micha Sharir, “A Strong-Connectivity Algorithm and Its Applications in Data Flow Analysis,” Computers & Mathematics with Applications 7(1), 1981, pp. 67–72。