数据结构--关键路径

数据结构--关键路径

AOE⽹

在 带权有向图 \color{red}带权有向图 带权有向图中,以 顶点表示事件 \color{red}顶点表示事件 顶点表示事件,以 有向边表示活动 \color{red}有向边表示活动 有向边表示活动,以 边上的权值表示完成该活动的开销 \color{red}边上的权值表示完成该活动的开销 边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为⽤边表示活动的⽹络,简称 A O E ⽹ \color{red}AOE⽹ AOE⽹ (Activity On Edge NetWork)

AOE⽹具有以下两个性质:

① 只有在某顶点所代表的事件发⽣后,从该顶点出发的各有向边所代表的活动才能开始;

② 只有在进⼊某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事件才能发⽣。

另外,有些活动是可以并⾏进⾏的 \color{green}另外,有些活动是可以并⾏进⾏的 另外,有些活动是可以并⾏进⾏的

在AOE⽹中 仅有⼀个 \color{red}仅有⼀个 仅有⼀个⼊度为0的顶点,称为 开始顶点(源点) \color{red}开始顶点(源点) 开始顶点(源点),它表示整个⼯程的开始;

也 仅有⼀个 \color{red}仅有⼀个 仅有⼀个出度为0的顶点,称为 结束顶点(汇点) \color{red}结束顶点(汇点) 结束顶点(汇点),它表示整个⼯程的结束。

从源点到汇点的有向路径可能有多条,所有路径中,具有最⼤路径⻓度的路径称为 关键路径 \color{red}关键路径 关键路径,⽽把关键路径上的活动称为 关键活动 \color{red}关键活动 关键活动

完成整个⼯程的最短时间就是关键路径的⻓度 \color{purple}完成整个⼯程的最短时间就是关键路径的⻓度 完成整个⼯程的最短时间就是关键路径的⻓度,若关键活动不能按时完成,则整个⼯程的完成时间就会延⻓

有关的信息变量

事件 v k v_k vk的最早发⽣时间ve(k)------决定了所有从 v k v_k vk开始的活动能够开⼯的最早时间

活动 a i a_i ai的最早开始时间e(i)------指该活动弧的起点所表⽰的事件的最早发⽣时间

事件 v k v_k vk的最迟发⽣时间vl(k)------它是指在不推迟整个⼯程完成的前提下,该事件最迟必须发⽣的时间。

活动 a i a_i ai的最迟开始时间l(i)------它是指该活动弧的终点所表示事件的最迟发⽣时间与该活动所需时间之差。

活动 a i a_i ai的最早开始时间e(i)------指该活动弧的起点所表⽰的事件的最早发⽣时间

活动 a i a_i ai的最迟开始时间l(i)------它是指该活动弧的终点所表示事件的最迟发⽣时间与该活动所需时间之差。

活动 a i a_i ai的时间余量d(i)=l(i)-e(i),表⽰在不增加完成整个⼯程所需总时间的情况下,活动ai可以拖延的时间

若⼀个活动的时间余量为零,则说明该活动必须要如期完成,d(i)=0即l(i) = e(i)的活动 a i a_i ai是关键活动

由关键活动组成的路径就是关键路径

求所有事件的最早发⽣时间

① 求所有事件的最早发⽣时间 ve( )

按拓扑排序序列,依次求各个顶点的 ve(k):

ve(源点) = 0
v e ( k ) = M a x { v e ( j ) + W e i g h t ( v j , v k ) } , v j 为 v k ve(k) = Max\{ve(j) + Weight(v_j, v_k)\}, v_j为v_k ve(k)=Max{ve(j)+Weight(vj,vk)},vj为vk 的任意前驱

求所有事件的最迟发⽣时间

② 求所有事件的最迟发⽣时间 vl( )

按逆拓扑排序序列,依次求各个顶点的 vl(k):

vl(汇点) = ve(汇点)
v l ( k ) = M i n { v l ( j ) − W e i g h t ( v k , v j ) } , v j 为 v k vl(k) = Min\{vl(j) - Weight(vk, vj)\} , v_j为v_k vl(k)=Min{vl(j)−Weight(vk,vj)},vj为vk的任意后继

求所有活动的最早发⽣时间

③ 求所有活动的最早发⽣时间 e( )

若边 < v k , v j > 表⽰活动 a i ,则有 e ( i ) = v e ( k ) <vk, vj>表⽰活动a_i,则有e(i) = ve(k) <vk,vj>表⽰活动ai,则有e(i)=ve(k)

求所有活动的最迟发⽣时间

④ 求所有活动的最迟发⽣时间 l( )

若边<vk, vj>表⽰活动ai,则有l(i) = vl(j) - Weight(vk, vj)

求所有活动的时间余量

⑤ 求所有活动的时间余量 d( )
d ( i ) = l ( i ) − e ( i ) d(i) = l(i) - e(i) d(i)=l(i)−e(i)

关键活动、关键路径的特性

若关键活动耗时增加,则整个⼯程的⼯期将增⻓

缩短关键活动的时间,可以缩短整个⼯程的⼯期

当缩短到⼀定程度时,关键活动可能会变成⾮关键活动

注意:可能有多条关键路径,只提⾼⼀条关键路径上的关键活动速度并不能缩短整个⼯程的⼯期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短⼯期的⽬的。 \color{purple}注意:可能有多条关键路径,只提⾼⼀条关键路径上的关键活动速度并不能缩短整个⼯程的⼯期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短⼯期的⽬的。 注意:可能有多条关键路径,只提⾼⼀条关键路径上的关键活动速度并不能缩短整个⼯程的⼯期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短⼯期的⽬的。

知识点回顾与重要考点

相关推荐
柠檬少少开发3 分钟前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
jnrjian13 分钟前
USE_CONCAT in list OR 以及 filter Nest LOOP
数据结构·list
阿华的代码王国20 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
weixin_4866811442 分钟前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
基德爆肝c语言42 分钟前
C++入门
开发语言·c++
怀九日1 小时前
C++(学习)2024.9.18
开发语言·c++·学习·面向对象·引用·
一道秘制的小菜1 小时前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
代码小狗Codog2 小时前
C++独立开发开源大数计算库 CBigNum
数据结构·c++
咕噜咕嘟嘟嘟2 小时前
343. 整数拆分
数据结构·算法
WenGyyyL2 小时前
力扣最热一百题——二叉树的直径
java·c++·算法·二叉树·深度优先