一个无环的有向图称作有向无环图,简称DAG图,它在工程计划和管理方面有着广泛而重要的应用。除最简单的情况之外,几乎所有的工程(project)都可分为若干个称作"活动"的子工程,并且这些子工程之间通常受着一定条件的约束,例如其中某些子工程必须在另一些子工程完成之后才能开始。对整个工程和系统,人们关心的是两方面的问题:一是工程能否顺利进行;二是完成整个工程所必须的最短时间。对应到有向图即为进行拓扑排序和求关键路径。本节和下一节将分别讨论这两个算法。 |
|||||||||||||||||||||||||||||||||||||||||||
一项工程往往可以分解为一些具有相对独立性的子工程,通常称这些子工程为"活动"。子工程之间在进行的时间上有着一定的相互制约关系,例如,盖大楼的第一步是打地基,而房屋的内装修必须在房子盖好之后才能开始进行等。可用一个有向图表示子工程及其相互制约的关系,其中以顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为活动在顶点上的网络,简称活动顶点网络,或AOV(Activity
On Vertex)网。 例如,假设一个软件工程人员必须系统学习如右所列各门课程,每个接受培训的人都必须学完和通过计划中的全部课程才能颁发合格证书。整个培训过程就是一项工程,每门课程的学习就是一项活动,一门课程可能以其它若干门课程为先修基础,而它本身又可能是另一些课程的先修基础,各门课程之间的先修关系可以右图的活动顶点网络表示。 在AOV网中不允许出现有向环,否则意味着某项子工程的开始以本身的完成为先决条件,显然这说明这个工程的施工设计图存在问题。而如果这个有向图表示的是数据流图的话,则表明存在着一个死循环。 判别有向网中是否存在有向环的一个办法就是对此AOV网进行"拓扑排序",即构造一个包含图中所有顶点的"拓扑有序序列",如果在AOV网中存在一条从顶点a到顶点b之间的弧,则在拓扑有序序列中顶点 a 必须领先于顶点 b,反之如果在AOV网中顶点a和顶点b之间没有弧,则在拓扑有序序列中这两个顶点的先后次序关系可以随意。例如根据描述课程学习顺序制约关系的AOV网,可以得到以下两个拓扑有序序列: C9 C10 C2 C1 C11 C3 C8 C7 C5 C6 C4 C12 和 C5 C4 C1 C3 C6 C7 C12 C8 C9 C10 C11 C2 显然,如果AOV网中存在有向环,则不可能将所有顶点纳入到一个拓扑有序序列中,反之,如果从 AOV 网不能得到拓扑有序序列,则说明网中必定存在有向环。 |
(当然,对上图的AOV网还可以得到更多的拓扑有序序列) |