有向无环图之关键路径

**有向无环图之关键路径**

1 AOE-网:边表示活动的网。AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间。


2 通常AOE-网可用来估算工程的完成时间。

例图:


该图总共有11项活动,9个事件。每个事件表示在它之前的活动已完成,在它之后的活动可以开始,如a表示整个工程开始,i表示整个工程结束,e表示<b,e>活动和<c,e>活动已经完成。网中只有一个入度为零的点(称作源点)和一个出度为零的点(叫做汇点)。

3 AOV-网要研究的问题是:

3.1 完成整个工程至少需要多少时间?

3.2 哪些活动是影响工程进度的关键?


4.1 由于在AOV-网中有些活动是可以并行的进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度(这里所说的路径长度是指路径上各项活动持续时间之和,不是路径上弧的数目)。

4.2 路径长度最长的路径叫做关键路径(Critical Path)。

4.3 假设开始点事a,从a到g的最长路径长度叫做事件g的最早发生时间,这个时间决定了所有以g为尾的弧所表示的活动的最早开始时间。我们可以用e(i)(这个e不是图中的顶点e,只是个代号,当然也可以用其他的字母表示,i表示数字递增,e(i)意思是第几个活动)表示第i个活动的最早开始时间,还可以定义一个活动的最迟开始时间l(i),这是在不推迟整个工程完成的前提下,第i个活动最迟必须开始的时间。两者之差意味着完成第i个活动的时间余量,就是还可以推迟多久必须开始。我们把最迟开始时间和最早开始时间相等的活动叫做关键活动。

4.4 显然,关键路径上的所有活动都是关键活动。该图的一个关键路径是(a,b,e,h,i),源点到汇点的最长路径长度是:18

4.5 第i个活动的最迟开始时间计算:源点到汇点的最长路径的长度-该活动到汇点的最长路径长度

如<d,f>活动的最迟开始时间:18-<d,f>-<f,h>-<h,i>=18-2-4-4=8

4.6 第i 个活动的最早开始时间计算:第i个活动之前的最长路径的长度

如<d,f>活动的最早开始时间:<a,d>=5

4.7 <d,f>的最迟开始时间是8,最早开始时间是5,这就意味着<d,f>活动可以推迟3天开始(8-5),都不会影响整个工程的完成。

4.8 分析关键路径的目的是辨别哪些是关键活动,以便争取提高关键活动的工效,缩短整个工期。


5 AOE-网的关键路径算法思想:求关键活动就是要找e(i)=l(i)的活动。为了求得AOE-网中活动的e(i)和l(i),首先应求得事件的最早发生时间ve(j)和最迟发生时间vl(j),**因为活动是弧,以顶点(事件)为尾,活动所依赖的事件开始,活动也就开始了**

5.1 如果活动由弧<j,k>表示,其持续时间记为dut(<j,k>),则有如下关系:e(i)=ve(j)l(i)=vl(k)-dut(<j,k>)(vl(k)-dut(<j,k>)其实就是vl(j),上面解释过了为什么)

5.2 ve(j)和vl(j)需要分两步进行:

** 从ve(1)=0开始向前递推ve(j)=Max{ve(i)+dut(<i,j>)},其中<i,j>为图中的弧

** 从vl(n)=ve(n)起向后递推vl(i)=Min{vl(j)-dut(<i,j>)},其中<i,j>为图中的弧

这两个公式的计算必须分别在拓扑有序和逆拓扑有序的前提下进行,也就是说,ve(j)必须在v(j)(第j个顶点)的所有前驱的最早发生时间求得之后才能确定,而vl(j)则必须在v(j)的所有后继的最迟发生时间求得之后才能确定,因此可以在拓扑排序的基础上计算。


6 c语言实现上述算法的代码::hglspace/GetCriticalPath.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值