拓扑排序 – 数据结构和算法66

拓扑排序

让编程改变世界

Change the world by program

拓扑排序(Topological)

一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图。

所有的工程或者某种流程都可以分为若干个小的工程或者阶段,称这些小的工程或阶段为“活动”。

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Active On Vertex Network)。

AOV网中的弧表示活动之间存在的某种制约关系,我们看下这个例子:我想拍一部色情电影

比如拍电影我们要先构思好灵感,然后编写剧本,寻找制片人,再选拍摄地点,找角色然后才能进行拍摄。显然我们不能在电影开拍后再重新编写剧本,寻找制片人。

AOV网同样,就是AOV网不能存在回路。

拓扑序列含义:

设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列V1,V2,……,Vn满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必在顶点Vj之前。则我们称这样的顶点序列为一个拓扑序列。

拓扑排序:

所谓的拓扑排序,其实就是对一个有向图构造拓扑序列的过程。

为了说清楚刚才几个概念,我们不妨从另外一个例子出发:

计算机专业的学生必须完成一系列规定的专业基础课和专业课才能毕业,这个过程就可以被看成是一个大的工程,而活动就是学习每一门课程。我们不妨把这些课程的名称与相应的代号列于表

宽客网,量化投资,宽客俱乐部

拓扑排序实例

那么这个表转换为AOV网是这样子:

宽客网,量化投资,宽客俱乐部

拓扑排序实例

拓扑序列(其中一种):1,13,4,8,14,15,5,2,3,10,11,12,7,6,9

拓扑排序算法(TopologicalSort)

对AOV网进行拓扑排序的方法和步骤如下:

从AOV网中选择一个没有前趋的顶点(该顶点的入度为0)并且输出它;

从网中删去该顶点,并且删去从该顶点发出的全部有向边;

重复上述两步,直到剩余网中不再存在没有前趋的顶点为止。

由刚才我们那幅AOV网图,我们可以用邻接表(因为需要删除顶点,所以我们选择邻接表会更加方便)数据结构表示:

宽客网,量化投资,宽客俱乐部

拓扑排序算法

代码讲解:TopologicalSort.c

算法时间复杂度:

对一个具有n个顶点,e条边的网来说,初始建立入度为零的顶点栈,要检查所有顶点一次,执行时间为O(n)。

排序中,若AOV网无回路,则每个顶点入、出栈各一次,每个表结点被检查一次,因而执行时间是 O(n+e)。

所以,整个算法的时间复杂度是 O(n+e)。

视频下载
技术, IT技术, 数据结构和算法, 顶点



                                                    风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部