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