数据结构 第五章 图——拓扑排序与关键路径

有向无环图(Directed Acyclic Graph, DAG):有向图中不存在环。

拓扑排序:
AOV网(Activity On Vertex Net):用DAG图表示一个工程,顶点表示活动,弧表示活动之间的优先制约关系(即活动的先后执行顺序)。
拓扑序列:如果图中从顶点v到顶点w之间有一条有向路径,则v一定排在w之前。
拓扑排序(DAG图中)每个顶点出现且只出现一次。
算法步骤:
(1)从DAG图中选择一个没有前驱的顶点输出;
(2)从图中删除这个顶点和所有以它为弧尾的边;
(3)重复上述操作直到图为空,或图中不存在无前驱的顶点为止(这种情况对应图中有一个回路)。
所以可以得出 ,如果一个AOV网有合理的拓扑序,则它一定是DAG图。
拓扑排序特点:
(1)拓扑排序的结果不唯一;
(2)时间复杂度:O(|V| + |E|)。

关键路径(由绝对不能够延误的活动组成的路径):
AOE网(Activity On Edge Net):在DAG图中,用弧表示活动,用顶点表示事件的开始或结束,边上的权值表示活动的持续时间。
AOE网特点:
(1)只有在某顶点所代表的事件结束之后,从该顶点出发的各有向边所代表的活动才能开始;
(2)只有在进入某一顶点的各有向边所代表的活动都已结束时,该顶点所代表的事件才能开始。
对上述特点的理解:顶点所起的作用是既代表了上一个事件的结束,又代表的下一个事件的开始,所以只有等所有进入该顶点的活动都结束之后才代表着上一个事件的结束,此时下一个事件才能够开始,所以顶点有承上启下的作用。
(1)把AOE网中仅有的入度为0的顶点称为开始顶点(源点),它表示整个工程的开始;
(2)把AOE网中仅有的出度为0的顶点称为结束顶点(汇点),它表示整个工程的结束;
(3)源点到汇点的所有路径中,具有最大路径的路径长度的路径称为关键路径,关键路径上的活动成为关键活动,这个工程的最短完成完成时间就是关键路径的长度。
几个参数定义:
(1)事件Vk得最早发生时间Ve(k):
理解:之前说过顶点即表示上一个事件的结束,也表示下一个事件的开始,所以事件Vk发生的最早时间,就是事件Vk的上一个事件Vj结束的最早时间,那么上一个事件什么时候最早结束呢?就是先假定之前所有时间都是最早完成的,那么当前时间的最早发生时间就是上一个事件的所有活动中持续时间最长的那个活动刚好完成的时间加上之前所有事件完成需要的时间。
所以这个时间就是从源点出发到当前顶点的最长路径长度。
定义源点的最早发生时间为0。
计算的时候从前向后计算。
(2)事件Vk的最迟发生时间Vl(k):
理解:承接上一个参数的分析,时间Vk的最迟发生时间,也就是对应上一个事件的最迟结束时间,那么上一个事件什么时候最迟结束呢?就是假定所有事件都是最迟结束的(但要保证不延误工程的完成),那么在汇点处会得到整个工程的最迟结束时间,那么事件Vk的最迟发生时间就是它的下一个事件Vj的最迟发生时间减去Vk到Vj之间所有活动中持续时间最短的事件。
定义汇点的最迟发生时间与最早发生时间一样。
从分析中可以看出最迟发生时间是从后向前计算的。
(3)活动ai的最早开始时间e(i):
即活动所对应的事件的最早发生时间。
(4)活动ai的最迟发生时间l(l):
即活动的终点所对应的事件(即活动所对应事件的下一个事件)的最迟发生时间减去活动的持续时间。
(5)活动ai的机动时间d(i):
即活动的最迟发生时间减去活动的最早发生时间的差值。
所以关键活动就是d(i)为0的活动。

需要注意的点:
(1)缩短关键活动的持续时间可以压缩整个工程的时间,但不能任意压缩,因为可能使关键活动变为非关键活动;
(2)AOE网中关键路径不唯一,所以要压缩整个工程的完成时间,需要加快所有关键路径上的关键活动。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

房东的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值