1、与AOV网络密切相关的是AOE网络。如果在DAG中用有向边表示一个工程的各项活动,用有向边上的权值表示活动的持续时间,用顶点表示事件,则这种有向图叫做用边表示活动的网络(Activity On Edge),简称AOE网络;
2、由于整个工程只有一个开始点和一个完成点,所以称开始点(入度为0)的点为源点,称结束点(出度为0)为汇点;
3、AOE网络在某些方面(如工程估算)非常有用,例如,从AOE网络可以了解到以下两点:
(1)完成整个工程至少需要多长时间(假定网络中没有环)?
(2)为缩短完成工程所需的时间,应加快哪些活动?
4、在AOE网络中,有些活动可以并行进行。从源点到各个顶点,以及从源点到汇点的有向路径可能不止一条,这些路径的长度可能也不同。完成不同路径上每个活动所需的总时间虽然不同,但只有各条路径上所有活动都完成了,整个工程才算完成。因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,所需时间为这条路径上所有活动的持续时间之和。这条路径长度最长的路径就成为关键路径;
5、要找出关键路径,必须找出关键活动(不按期完成就会影响整个工程完成的活动);下面定义几个与计算关键活动有关的量:
(1)事件Ei的最早可能开始时间,记为Ee[i],是从源点E0到顶点Ei的最长路径长度;
(2)事件Ei的最迟允许开始时间,记为El[i],是在保证汇点En-1在Ee[n-1]时刻完成的前提下,时间Ei的允许最迟开始时间,即El[i]=Ee[n-1] -(Ei到En-1的最长路径长度);
(3)活动ak的最早可能开始时间,记为e[k]。设ak在有向边
(4)活动ak的最迟允许开始时间,记为l[k],是不会引起时间延误的前提下,该活动允许的最迟开始时间,即l[k] = El[j] - dur(
6、l[k]-e[k]是表示活动ak的最早可能开始时间和最迟允许开始时间的时间余量,也叫做松弛时间,l[k] == e[k]表示活动ak没有时间余量,是关键活动;
7、分析关键路径的目的,是要从源点E0开始估算每个活动,辨明哪些是影响整个工程进度的关键活动,以便科学地安排工作;
8、为了找出关键活动,就需要求得各个活动的e[k]与l[k],以判别二者是否相等;而为了求得e[k]与l[k],就要先求得从源点E0到各个顶点Ei的Ee[i]和El[i]。下面分别介绍求Ee[i]、El[i]、e[k]、l[k]的递推公式:
(1)Ee[i]:从Ee[0] = 0开始,向前递推:
(2)El[i]:从El[n-1] = Ee[n-1]开始,反向递推:
(3)e[k]和l[k]:设活动ak对应的带权有向边为
9、根据上面的分析,可以得到计算关键路径的算法如下:
(1)输入m条带权的有向边,建立邻接表结构;
(2)从源点E0出发,令Ee[0] = 0,按拓扑有序的顺序计算每个顶点的Ee[i],i=1,2,...,n-1。若拓扑排序的循环次数小于顶点数n,则说明网络中存在有向环,不能继续求关键路径;
(3)从汇点En-1出发,令El[n-1] = Ee[n-1],按逆拓扑有序顺序求各顶点的El[i],i=n-2, n-3, ..., 0;
(4)根据各顶点的Ee[i]和El[i],求各条有向边的e[k]和l[k];
(5)对网络中的每条边,若满足e[k] == l[k],则是关键活动;求出所有关键活动并输出;
Ps:写了这么多相关知识...累死我了。下一篇具体实现求关键路径的算法~