活动网络可以用来描述生产计划、施工过程、生产流程、程序流程等工程中各子工程的安排问题。活动网络可分为两种:AOV 网络和 AOE 网络。
1. AOV 网络与有向无环图
一般一个工程可以分成若干个子工程,这些子工程称为活动。完成了这些活动,整个工程就完成了。实际上,可以用有向图来表示一个工程。在这种有向图中,用顶点表示活动,用有向边<u, v>表示活动 u 必须先于活动 v 进行。这种有向图叫做顶点表示活动的网络,记作 AOV 网络。
在 AOV 网络中,如果存在有向边<u, v>,则活动 u 必须在活动 v 之前进行,并称 u 是 v 的直接前驱, v 是 u 的直接后继。如果存在有向路径<u, u1, u2, …, un, v>,则称 u 是 v 的前驱, v 是 u 的后继。
AOV 网络中不能出现有向回路(或称为有向环)。不含有向回路的有向图称为有向无环图。
在 AOV 网络中如果出现了有向回路,则意味着某项活动以自己作为先决条件,这是不对的。如果设计出这样的流程图,工程将无法进行。对于程序而言,将陷入死循环。因此,对于给定的AOV 网络,必须先判断它是否是有向无环图。
2. 拓扑排序
判断有向无环图的方法是对 AOV 网络构造它的拓扑有序序列,即将各个顶点排列成一个线性有序的序列, 使得 AOV 网络中所有存在的前驱和后继关系都能得到满足。
构造 AOV 网络全部顶点的拓扑有序序列的运算称为拓扑排序。如果通过拓扑排序能将 AOV 网络的所有顶点都排入一个拓扑有序的序列中,则该 AOV 网络中必定不存在有向环;相反,如果得不到所有顶点的拓扑有序序列,则说明该 AOV 网络中存在有向环,此AOV 网络所代表的工程是不可行的。
3. 拓扑排序实现方法
对一个 AOV 网络进行拓扑排序的方法为:
- 从 AOV 网络中选择一个入度为 0(即没有直接前驱)的顶点并输出;
- 从 AOV 网络中删除该顶点及该顶点发出的所有边;
- 重复步骤(1)和(2),直至找不到入度为 0 的顶点。
按照上面的方法进行拓扑排序,其结果有两种情形:第一种,所有的顶点都输出来了,也就是整个拓扑排序完成了;第二种,仍有顶点没有输出,但剩下的图中再也没有入度为 0 的顶点,拓扑排序不能再继续进行下去了,这就说明此图是有环图。下图给出了一个拓扑排序的例子,最后得到的拓扑有序序列为: C5, C1, C4, C3, C2, C6。在该图中,有阴影的顶点表示当前输出的顶点。其拓扑排序过程为:
- 选择一个入度为0的顶点, C5,如图(b)所示,删除C5及发出的每条边;
- 选择一个入度为0的顶点, C1,如图(c)所示,删除C1及发出的每条边;
- 选择一个入度为0的顶点, C4,如图(d)所示,删除C4, C4没有出边;
- 选择一个入度为0的顶点, C3,如图(e)所示,删除C3及发出的每条边;
- 选择一个入度为0的顶点, C2,如图(f)所示,删除C2及发出的每条边;
- 选择一个入度为0的顶点, C6,如图(g)所示,删除C6, C6没有出边。
至此,拓扑排序执行完毕,所有顶点都排在一个线性有序的序列中。
标签:拓扑,入度,网络,AOV,顶点,排序 From: https://www.cnblogs.com/love-9/p/18117301