数据结构--关键路径

数据结构--关键路径

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}注意:可能有多条关键路径,只提⾼⼀条关键路径上的关键活动速度并不能缩短整个⼯程的⼯期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短⼯期的⽬的。 注意:可能有多条关键路径,只提⾼⼀条关键路径上的关键活动速度并不能缩短整个⼯程的⼯期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短⼯期的⽬的。

知识点回顾与重要考点

相关推荐
labuladong17 小时前
机器学习&神经网络 系列教程上线
神经网络·算法·机器学习
xiangyun6117 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl
学习论之费曼学习法18 小时前
无人值守AI内容矩阵实战(8):标题 A/B 实验的 6 个工程实现细节,隔日对比与自动判胜
人工智能·python·算法·矩阵·自动化·a/b测试·内容矩阵
Carl_奕然18 小时前
【机器视觉】最强算法之:3D高斯泼溅(3D Gaussian Splatting)
人工智能·python·算法·目标检测·计算机视觉·3d
SunkingYang18 小时前
C++14 vs C++17:新特性对比与用法指南
c++·新特性·用法·c++14·示例·c++17
w_zero_one18 小时前
算法--桶思想
java·开发语言·算法
wordbaby19 小时前
同一次请求里的两道锁:图解搞懂国密 SM2 与 SM3
算法
SunkingYang19 小时前
C++ Lambda 表达式原理详解
c++·lambda·理论·原理·表达式
xiaoye-duck19 小时前
《C++ 工具库实战》GTest 单元测试:断言、全局环境、局部夹具与底层原理
c++·单元测试·第三方库
学逆向的19 小时前
C++ 匿名命名空间
开发语言·c++·网络安全