【软考】图的拓扑排序

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均不一定。
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值