拓扑排序Topological sort

为有向无环图生成满足依赖方向的线性顺序。

核心约束
每条边的起点在终点之前。
适用问题
依赖执行、构建顺序与图验证。
边界与取舍
有环时不存在这样的顺序;顺序可能不唯一。
ABCD
拓扑序 A、B、C、D 与 A、C、B、D 都合法。只要求每条有向边的起点排在终点之前;有环时不存在拓扑序。

时间与空间#

V 为顶点数,E 为有向边数。

时间复杂度
O(V+E)O(V+E)
辅助空间
O(V)O(V),不含图和输出

邻接表上的入度队列法或 DFS 逆后序法;必须检测有向环。只有 DAG 存在拓扑顺序,合法顺序通常不唯一;优先队列选最小编号会增加对数因子。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Princeton · TopologicalDFS 排序、环检测及 DAG 条件。

Princeton · TopologicalX基于入度和队列的非递归实现。

9 个概念