6.9 数据结构——关键路径

6.9.1 AOE网

用一个有向图表示一个工程的各子工程及其相互制约的关系,以弧表示活动,以顶点表示活动的开始或结束事件,称这种有向图的边表示活动的网,简称AOE网(Activity On Edge)。

6.9.2 关键路径

把工程计划表示为边表示活动的网络,即AOE网,用顶点表示事件,弧表示活动,弧的权表示活动持续时间。

事件表示在它之前的活动已经完成,在它之后的活动可以开始。

例:宴会准备,宴会晚上6点开始,最迟几点开始准备?压缩哪项活动可以使总时间减少?

活动代码活动描述历时(分钟)前置任务
A菜单制定30
B原料采购60A
C餐具准备45A
D甜点准备60B
E原料清理60B
F烹饪30DE
G桌椅布置15C
H宴会开始0FG

 例:设一个工程有11项活动,9个事件。事件V1:表示整个工程开始(源点:入度为0的顶点);事件V9:表示整个工程结束(汇点:出度为0的顶点)。

对于AOE网,我们关心两个问题:

(1)完成整项工程至少需要多少时间?

(2)哪些活动是影响工程进度的关键?

这些问题就是求解关键路径的问题。

关键路径:路径长度最长的路径。

路径长度:路径上各活动持续的时间之和。 

如何确定关键路径,需要定义4个描述量(例子中用到的是宴会的有向图):

ve(Vj):表示事件Vj的最早发生时间,age:ve(V1) = 0,ve(V2) = 30;

vl(Vj):表示事件Vj的最晚发生事件,age:假如最晚结束时间为180,vl(V4) = 165

e(i):表示活动ai的最早开始时间,age:e(a3) = 30;

l(i):表示活动ai的最晚开始时间,age:l(a3) = 120;

l(i) - e(i):表示完成活动ai的时间余量:age:l(a3) - e(a3) = 120 - 30 =90;

关键活动:关键路径上的活动,即e(i) == l(i)。

如何找关键活动?设活动ai用弧<j,k>表示,其持续时间为Wj,k,则有:

(1)e(i) = ve(j)

(2)l(i) = vl(k) - Wj,k

如何求ve(j)和vl(j) ?

(1)从ve(1) = 0 开始向前递推,ve(j) = Max{ve(i) + Wi,j},<i,j>∈T,2<=j<=n,其中T是所有以j为头的弧的集合;

(2)从vl(n) = ve(n)开始向后递推,vl(i) = Min{vl(j) - Wi,j},<i,j>∈S,1<= i <= n-1,其中S是所有以i为尾的弧的集合。

求关键路径的步骤:

(1)求ve(i),vl(j)

(2)求e(i),l(j)

(3)计算l(i) - e(i) 

以下图的有向图为例:

顶点ve(从上往下计算)vl(从下往上计算)
V100
V266
V346
V458
V577
V6710
V71616
V81414
V91818bian
活动e(从上往下计算)l(从下往上计算)l-e
a1000
a2022
a3033
a4660
a5462
a6583
a7770
a8770
a97103
a1016160
a1114140

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值