龙空技术网

掌握算法-图论-最短路径算法-无圈图-关键路径分析法

吃泡菜的鱼 64

前言:

当前各位老铁们对“算法图论ppt李建平”大约比较关心,朋友们都需要学习一些“算法图论ppt李建平”的相关资讯。那么小编也在网上网罗了一些关于“算法图论ppt李建平””的相关知识,希望兄弟们能喜欢,兄弟们一起来了解一下吧!

如果知道图是无圈的,那么我们可以通过改变声明顶点为已知的顺序,或者叫做顶点选择法则,来改进Dijkstra算法。新法则以拓扑顺序来选择顶点。由于选择和更新可以在拓扑排序执行的时候进行,因此算法能够一趟完成。

因此当一个顶点v被选取以后,按照拓扑排序的法则,它没有从未知顶点发出的进入边,因此它的距离dv可以不再被降低。

无圈图可以模拟某种下坡滑雪问题----我们想从点a到点b,但只能走下坡,显然不可能有圈。另一个可能的应用是(不可逆)化学反应问题。

无圈图的一个更重要的用途是关键路径分析法(cirtical path analysis)。

我们将用下图做例子,每个节点表示一个必须执行的动作以及完成动作所花费的时间。因此可以叫做动作节点图(activity-node graph)。

动作节点图

这种类型的图可以并常常用来模拟方案的构建。在这种情况下,有几个问题需要回答。

首先,方案最早完成时间是何时?也就是要保证每个节点完成,也就是要找出最大的时间消耗。

从图中我们可以看到,沿A,C,F,H需要10个时间单位。

另一个重要的问题是确定哪些动作可以延迟,延迟多长,而不至于影响最少完成时间。例如,延迟A,C,F,H中的任一个都将使完成时间推到10个单位以后。另外一个方面,动作B欠重要,可以被延迟两个时间单位而不至于影响最后完成时间。

为了进行这些运算,我们把动作节点图转换成事件节点图(event-node graph)。每个事件对应一个动作和所有与它相关的动作的完成。

为了找出方案的最早完成时间,我们只要找出从第一个事件到最后一个事件的最长路径。

这里我们设ECi是节点i的最早完成时间,那么可用的法则为:

EC1 = 0

ECw = max(ECv +Cvw)

从左往右开始算,由此可得下图,

最早完成时间

我们还可以计算每个事件能够完成而不影响最后完成时间的最晚时间LCi,公式如下

LCn = ECn

LCv = min(LCw - Cvw)

从右往左开始算,由此可得下图,

最晚完成时间

因此时间节点图中每条边的松弛时间(slack time)代表对应动作可以被延迟而不推迟整体的完成时间量。

Slack(v,w) = LCw - ECv - Cv,w

最早完成时间、最晚完成时间和松弛时间

某些动作的松弛时间为零,这些动作是关键性的动作,它们必须按计划结束。至少存在一条完全由零-松弛边组成的路径,这样的路径是关键路径(critical path)。

标签: #算法图论ppt李建平