AOE网

1.介绍
定义:在带权有向图中,以顶点表示事件,有向边表示活动,边上的权值表示完成该活动的开销,则称这种有向图为用边表示活动的网络,简称为AOE网(Activity On Edge Network)

性质:

  • 只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始
  • 只有在进入某一顶点的各有向边所代表的活动都已经结束时,该顶点所代表的事件才发生

2.几个词的解释
ps:事件是点,活动是边!!!

关键路径:
从源点到汇点的所有路径中,具有最长路径长度的路径,该路径上的活动成为关键活动(后面有用先记着)

事件V[k]的最早发生时间ve[k]:
从开始顶点V到V[k]的最长路径长度。

事件V[k]的最迟发生时间vl[k]:
不推迟整个工程完成的前提下,即保证它所指向的事件Vi在ve(i)时刻能够发生时,改事件最迟必须发生的事件。

活动a[i]的最早开始时间e[i]: 活动a[i]用边(V[k],V[j])表示

e[i]=ve[k]

活动a[i]的最迟开始时间l[i]:

l[i]=vl[j]-Weight(V[k],V[j])

一个活动a[i]的松弛时间:
d[i]=l[i]-e[i]或者d[i]=关键路径长度-包含a[i]活动的最长路径

3.计算

3.1 计算事件的最早和最迟发生时间

ve的计算方法为从前往后计算,取最大值,例如对于F,ve(F)=max{ve(B)+a5,ve(E)+a7,ve(G)+a8} ,只有一个的话就只取一个,多个的话,多个中取最大值

vl的计算方法为从后往前计算,首先另终点J的vl值为其ve,即vl(J)=ve(J)=18,然后多个中取最小值,例如对于B,vl(B)=min{vl(C)-a2,vl(F)-a5,vl(D)-a3}=2;若只有一个,例如对于H,vl(H)=vl(J)-a12=14

最终算出各个顶点的最早和最迟发生时间如下
|V|ve(事件最早发生时间)| vl(事件最迟发生事件)|
|—|—|—|
| A| 0 |0|
| B| 2 |2|
| C| 5 |5|
| D| 4|4|
| E| 10 |10|
| F|13 |13|
| G| 7 |7|
| H| 12 |14|
| I| 13 |16|
| J|18 |18|

有以上可以得出ve==vl的点即为关键路径上的事件,即A,B,C,D,E,F,G,J,则有以上点连接的边所代表的活动a1,a2,a3,a4,a6,a7,a8,a10疑似为关键活动
注意:
关键路径可能不只有一条,计算到这里只能得出关键路径上的事件,具体怎么走还等计算活动的最早和最迟开始时间,如果仅仅需要计算出关键路径,则只需计算几个疑似关键活动的最早和最迟发生时间,为了清楚,我们这里就把全部活动的都计算出来

3.2活动的最早和最迟开始时间
活动最早开始时间: 例如a1,为边(A,B),则a1=ve(A)=0;例如a2,为边(B,C),则a2=ve(B)=2

活动最晚开始时间:例如对于a1,为边(A,B),则a1=vl(B)-weight(a1)=2-2=0;例如a12,为边(H,J),则a12=vl(J)-weight(a12)=18-4=14

最终结果如下

a e(活动最早开始时间) l(活动最迟开始事件)
a1 0 0
a2 2 2
a3 2 2
a4 5 5
a5 2 9
a6 4 4
a7 10 10
a8 7 7
a9 10 12
a10 13 13
a11 7 10
a12 12 14
a13 13 16

找出e==l的活动ai,这里为a1,a2,a3,,a4,a6,a7,a8,a10;经观察可发现这里有两条关键路径,分别为a1,a2,a4,a7,a10和a1,a3,a6,a8,a10

又比如问一个活动的松弛时间,即活动ai在不拖延总工程时间的情况下,该活动可以拖延的时间,有两种解法,比如问BF的松弛时间:
解1:BF=a5,所以松弛时间=l(a5)-e(a5)=7
解2:包含BF活动的最长路径为ABFJ,其长度为11,又因为关键路径长度为18,所以松弛时间为18-11=7


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

HDU1728逃离迷宫DFS 上一篇
快排C++&Python 下一篇