图的应用--拓扑排序(AOV网)

有向无环图及其应用

有向无环图:有向、无环、图,简称DAG图

有向无环图,中间那个是无环的,所谓无环,就是比如V1顶点,如果没有任何路径能回到V1,就叫无环,也就是所有顶点都不能回到自身

有向无环图常用来描述一个工程或系统的进行过程。(通常把计划、施工、生产、程序流程等当成是一个工程) 一个工程可以分为若干个子工程,只要完成了这些子工程(活动),就可以导致整个工程的完成。

AOV网: 拓扑排序 用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动弧表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV网(Activity On Vertex network)

例如下图,C1和C9我们可以直接学,不需要以什么为基础,而C2离散数学,学之前需要先学C1程序设计基础,看右图,C1和C9可以直接作为顶点,而所有需要将C1和C9作为先修课的,作为C1和C9的后继

AOV网的特点: 

若从i到j有一条有向路径,则i是j的前驱;j是i的后继

若<i,j>是网中有向边,则i是j的直接前驱;j是i的直接后继

AOV网中不允许有回路,因为如果有回路存在,则表明某项活动以自己为先决条件,显然这是荒谬的

问题:如何判别AOV网中是否存在回路?这里我们就需要用到拓扑排序

拓扑排序 在AOV网没有回路的前提下,我们将全部活动排列成一个线性序列,使得若AOV网中有弧 <i, j>存在,则在这个序列中,i一定排在j的前面,具有这种性质的线性序列称为拓扑有序序列,相应的拓扑有序排序的算法称为拓扑排序

拓扑排序的方法

在有向图中选一个没有前驱的顶点且输出之

从图中删除该顶点和所有以它为尾的弧

重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止 

我们分析一下上述这张图,来理解一下拓扑排序

1.C1和C9没有前驱,我们先取C1(或者C9,也说明拓扑排序可能不唯一)。然后删除C1和C1的所有出度,拓扑排序为C1

2.接下来没有前驱的有C2、C4、C9,我们取C2,删除C2和C2所有出度边,拓扑排序为C1、C2

3.剩下C3、C4、C9没有前驱,我们取C3并把C3和所有C3的出度边删除,拓扑排序为C1、C2、C3

4.剩C4和C9没有前驱,我们取C4,并删除C4和C4的出度边,拓扑排序为C1、C2、C3、C4

以此类推,不再赘述,最终结果是:

拓扑排序为C1、C2、C3、C4、C5、C7、 C9、 C10、C11、C6、C12、C8

检测AOV网中是否存在环方法: 对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环。

例如,我们用上述方法对一个有向图进行拓扑排序,最后剩下下图:

我们不难发现,这三个点均有前驱,每个顶点也都有路径能回到自身,所以是有环的(有回路)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值