本文为图论的学习总结,讲解有向无环图及其应用。
拓扑排序
由某个集合上的一个偏序得到该集合上的一个全序,这个操作称为拓扑排序。偏序指集合中仅有部分成员之间可比较,全序指集合中全体成员可比较。
AOV(Activity On Vertex)-网:用顶点表示活动,用弧表示活动间的优先关系的有向图。AOV-网中不能存在自环,检查自环的方法是:对有向图构造顶点的拓扑有序序列,若所有顶点都在序列中,则必定无自环。下图为一个 AOV-网,编程实现见【检查有向图自环】。
拓扑排序步骤为:
- 从有向图中选一个没有前驱的顶点并输出
- 从图中删除该顶点及其出边
重复上述两步直到所有顶点被输出,或当前图不存在无前驱的顶点为止。后一种情况说明有向图中有自环。算法复杂度为 O ( n + e ) O(n+e) O(n+e)。
则上图中的拓扑有序序列为:
( C 1 , C 2 , C 3 , C 4 , C 5 , C 7 , C 9 , C 1 0 , C 1 1 , C 6 , C 1 2 , C 8 ) (C_1,C_2,C_3,C_4,C_5,C_7,C_9,C_10,C_11,C_6,C_12,C_8) (C1,C2,C3,C4,C5,C7,C9,C10,C11,C6,C