1. AOV网
- 1.在工程领域,一个大的工程项目通常被划分为许多较小的子工程(称为活动)。
- 2.当这些子工程都完成时,整个工程也就完成了。
- 3.在有向图中,若以顶点表示活动,用有向边表示活动之间的优先关系,则称这样的有向图为以顶点表示活动的网。
- 4.AOV网 (Activity On Vertex network)。 [ˈvɜːrteks] 顶点
- 5.在 AOV 网中,若从顶点vi到顶点vj有一条有向路径,则顶点vi是的前驱,顶点vj是vi的后继。(有向路径不一定是直接到达,有一条路能到就行)
- 6.若<vi,vj>是网中的一条弧,则顶点vi是vj的直接前驱,顶点vj是vi的直接后继。(弧是直接到达)
- 7.AOV 网中的弧表示了活动之间的优先关系,也可以说是一种活动进行时的制约关系。
- 8.在 AOV 网中不应出现有向环,若存在,则意味着某项活动必须以自身任务的完成为先决条件,显然这是荒谬的。
- 9.若要检测一个工程是否可行,首先应检査对应的 AOV 网是否存在回路。
- 10.不存在回路的有向图称为有向无环图,DAG图(Directed Acycline Graph)。
- 11.检测的方法是对有向图构造其顶点的拓扑有序序列。
- 12.若图中所有的顶点都在它的拓扑有序序列中,则该 AOV 网中必定不存在环。
2. 拓扑排序
- 1.拓扑排序是将AOV网中的所有顶点排成一个线性序列的过程,并且该序列满足:若在 AOV网中从顶点vi到vj有一条路径,则在该线性序列中,顶点vi必然在顶点vj之前。
- 2.一般情况下,假设 AOV 图代表一个工程计划,则 AOV 网的一个拓扑排序就是一个工程顺利完成的可行方案。
3. 拓扑排序方法
- 1.在 AOV 网中选择一个入度为0(没有前驱)的顶点且输出它。
- 2.从网中删除该顶点及与该顶点有关的所有弧。
- 3.重复上述两步,直到网中不存在入度为0的顶点为止。
- 4.执行的结果会有两种情况:一种是所有顶点已输出,此时整个拓扑排序完成,说明网中不存在回路;另一种是尚有未输出的顶点,剩余的顶点均有前驱顶点,表明网中存在回路,拓扑排序无法进行下去。
- 5.当有向图中无环时,也可以利用深度优先遍历进行逆拓扑排序。
- 6.由于图中无环,从图中某点出发进行深度优先遍历时,最先退出Dfs函数的顶点即是出度为0的顶点,它是拓扑有序序列中最后的一个顶点。
- 7.按退出Dfs函数的先后顺序记录下来的顶点序列即为逆向的拓扑有序序列。
- 8.拓扑排序算法的时间复杂度为 O(n+e)。
4. 示例
- 1.有向无换图
- 2.顶点6入度为0,删除顶点6和顶点6有关的所有弧。得到
- 3.顶点1入度为0,删除顶点1和顶点1有关的所有弧。得到
- 4.顶点4入度为0,删除顶点4和顶点4有关的所有弧。得到
- 5.顶点3入度为0,删除顶点3和顶点3有关的所有弧。得到
- 6.顶点2入度为0,删除顶点2。得到
- 6.顶点5入度为0,删除顶点5。所有顶点已输出,拓扑排序完成。
5. 例题
5.1 例题1
- 1.题目
对有向图G进行拓扑排序得到的拓扑序列中,顶点Vi在顶点Vj之前,则说明G中(B)。
A.一定存在有向弧<Vi, Vj>
B.一定不存在有向弧<Vj, Vi>
C.必定存在从Vi到Vj的路径
D.必定存在从Vj到Vi的路径
- 2.分析
1.如果存在有向弧<Vj,Vi>,那么Vj是需要在顶点Vi之前的。
2.A C D均不一定。