目录:
- DAG定义
- 举例描述
- 实际运用
- 算法描述
- 算法实战
- 算法可视化
定义
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。
- 每个顶点出现且只出现一次;
- 若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。
或者
有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环。常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度。拓扑排序是对DAG的顶点进行排序,使得对每一条有向边(u, v),均有u(在排序记录中)比v先出现。亦可理解为对某点v而言,只有当v的所有源点均出现了,v才能出现。
需要记住的英语单词:
E: edge 边
V: vertex 顶点
常会看到(E, V)描述
举例描述
有向无环图的拓扑排序:
正面例子
左侧是有向无环图,右侧是拓扑排序后的队列。在右侧队列中,沿着箭头方向的任意线性顺序在左侧图中都有对应的路线,此时,我们才能说右侧的拓扑排序是成功的排序。
注意:一个图可以有很多种或者没有一种拓扑排序序列 (n >= 0)
反面例子
非法拓扑排序,因为D比E后出现了。
强调:拓扑排序后的序列要保证所有箭头方向路线在图中都有对应路线才能说拓扑排序正确
有向树,有向无环图,无向图对比
实际运用
拓扑排序 Topological Sorting 是一个经典的图论问题。他实际的运用中,拓扑排序可以做如下的一些事情&#x