【数据结构】AOE网与关键路径

一.AOE网的定义(Activity On Edge NetWork)

        在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。

二.AOE网的性质

1.只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;

2.只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。

AOE网与AOV网对比:

(1)AOV网无权值;AOE网有权值

(2)在AOE网中,顶点表示事件,弧表示活动,权值表示活动时间

(3)在AOV网中,顶点表示活动,弧表示优先关系

(4)AOV与AOE网中均没有环

三.AOE网的作用

1.可以知道完成整个工程至少需要多少时间

2.为缩短完成工程所需的时间,应当加快哪些活动

四.关键路径与关键活动

关键路径:

在AOE网中,从始点到终点具有最大路径长度(该路径上各个活动所持续的时间之和)的路径称为关键路径。

关键活动:

关键路径上的活动称为关键活动

要找出关键路径,必须找出关键活动,即不按期完成就会影响整个工程进度的活动。

首先计算以下与关键活动有关的量:

(1)事件的最早发生时间ve[k]

从始点开始到顶点$v_k$最大路径长度,这个长度决定了所有从顶点$v_k$发出的活动能够开工的最早时间。

\left\{ \begin{aligned} &ve[1]=0\\ &ve[k]=max\{ve[j]+len<v_j,v_k>\}(<v_j,v_k>\in p[k])\\ \end{aligned} \right.

p[k]表示所有到达$v_k$的有向边的集合。

(2)事件的最迟发生时间vl[k]

vl[k]是指在不推迟整个工期的前提下,事件$v_k$允许的最晚发生时间

$ \left\{ \begin{aligned} &vl[n]=ve[n] \\ &vl[k]=min\{vl[j]-len<v_k,v_j>\} (<v_k,v_j>\in s[k])\\ \end{aligned} \right. $

从后往前推算结点的vl值

(3)活动的最早开始时间ee[i]

若活动$a_i$是由弧$<v_k,v_j>$表示,则活动$a_i$的最早开始时间等于事件$v_k$的最早发生时间

即:ee[i]=ve[k]

(4)活动的最晚开始时间el[i]

若活动$a_i$是由弧$<v_k,v_j>$表示,则活动$a_i$的最晚开始时间要保证事件$v_j$的最迟发生时间不拖后

即:$el[i]=vl[j]-len<v_k,v_j>$

最后计算各个活动的时间余量el[k]-ee[k],时间余量为0即为关键活动

注:

缩短工程时间

1)适当提高对应关键路径上的关键活动的速度,保证不改变AOE网的关键路径的前提下。

2)同时提高AOE网上的关键路径上关键活动的速度。

五.关键路径算法的伪代码

1)从源点$v_0$出发,令ve[0]=0,按拓扑排序求其余各顶点的最早发生时间ve[i];

2)如果得到的拓扑排序中顶点个数小于AOE网中的顶点数,则说明网中存在环,不能求关键路径,算法终止;否则执行步骤3;

3)从终点v_{n-1}出发,令vl[n-1]=ve[n-1],按照逆序拓扑排序求其余各顶点的最迟发生时间vl[i];

4)根据各顶点的ve和vl值,求每条有向边的最早开始时间ee[i]和最迟开始时间el[i];

5)若某条有向边$a_i $满足条件ee[i]=el[i],则$a_i $为关键活动。

你可能感兴趣的:(数据结构)