关键路径
关键路径(Critical paths)
假言推理基础(前提/前项)
图、有向无环图(DAG)、拓扑排序
引子
最长路径问题,与最短路径问题不同,最长路径问题是 NP-hard 问题,该问题的决策版本(询问是否存在至少某个给定长度的路径)是 NP-完全的。这意味着除非 P = NP,否则无法在多项式时间内解决任意图的决策问题。
然而,在DAG中,它具有线性时间解,这在寻找调度问题的关键路径方面具有重要的应用。
拓扑排序与最短路径的应用
在计算机科学中,有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点 u 到顶点 v 的每个有向边 uv,u 在排序中排在 v 之前。
在数学中,全序或线性序是任何两个元素都具有可比性的偏序。(In mathematics, a total or linear order is a partial order in which any two elements are comparable. )
偏序关系是具有传递性和反对称性的齐次关系。(如,a < b是严格偏序,a <= b是非严格偏序(Non-strict partial order))
拓扑排序可用于通过加权有向无环图快速计算最短路径。令 V 是这样一个图(必须是加权有向无环图)中的顶点列表,按拓扑顺序排列。然后以下算法计算从某些源顶点 s 到所有其他顶点的最短路径:
- 令 d 是一个与 V 长度相同的数组;这将保存从 s 出发得到的最短路径距离。设置 d[s] = 0,所有其他 d[u] = ∞。
- 设 p 是一个与 V 长度相同的数组,所有元素都初始化为 nil;p[u] 将在从 s 到 u 的最短路径中保存 u 的前驱。
进入循环
- 从 s 开始,按照 V 中的顺序循环遍历顶点 u:
- 对于紧跟在 u 之后的每个顶点 v(即 u 和 v 满足存在从 u 到 v 的边,递归):
- 令 w 等于 uv 边的权重
- 松弛边缘:if d[u] > d[v] + w, set
- d[u] := d[v] + w,
- p[u] := v.
:= 是数学符号,意为赋值,以后不再解释。
在 n 个顶点和 m 个边的图上,该算法需要 Θ(n + m)的线性时间。
DAG与最长路径的应用
加权图 G 中两个给定顶点 s 和 t 之间的最长路径与图 -G 中通过将每个权重变为其否定而从 G 导出的最短路径相同。因此,如果可以在-G 中找到最短路径,那么也可以在 G 中找到最长路径。
对于大多数图,这种变换没有用,因为它在 -G 中创建了负长度的循环。但如果 G 是有向无环图,则不可能有负循环,通过对 -G 应用最短路径线性时间算法可以在线性时间内找到 G 中的最长路径,这也是有向无环图。对于 DAG,可以通过在 -G 上运行最短路径算法来获得从源顶点到所有其他顶点的最长路径。
类似地,对于给定 DAG 中的每个顶点 v,可以通过以下步骤获得终止于 v 的最长路径(即关键路径)的长度:
-
找到给定 DAG 的拓扑排序。
-
对于 DAG 的每个顶点 v,在拓扑排序中,通过查看其传入邻居并将这些邻居记录的最大长度加一来计算以 v 结束的最长路径的长度。如果 v 没有传入邻居,请将以 v 结尾的最长路径的长度设置为零。在任一情况下,请记录此编号,以便算法的后续步骤可以访问它。
-
Find a topological ordering of the given DAG.
-
For each vertex v of the DAG, in the topological ordering, compute the length of the longest path ending at v by looking at its incoming neighbors and adding one to the maximum length recorded for those neighbors. If v has no incoming neighbors, set the length of the longest path ending at v to zero. In either case, record this number so that later steps of the algorithm can access it.
一旦完成,整个 DAG 中最长的路径可以通过从具有最大记录值的顶点 v 开始,然后重复地向后退到其具有最大记录值的传入邻居,并反转在其中找到的顶点序列来获得。
这相当于在-G 上运行最短路径算法。
关键路径(Critical paths)
调度一组活动的关键路径方法涉及构建一个有向无环图,其中顶点代表项目里程碑,边代表必须在一个里程碑之后和另一个里程碑之前执行的活动;每条边都由完成相应活动所需时间的估计值加权。在这样的图中,从第一个里程碑到最后一个里程碑的最长路径是关键路径,它描述了完成项目的总时间。
有向无环图的最长路径也可以应用于分层图绘制:将有向无环图 G 的每个顶点 v 分配给编号为以 v 结尾的最长路径的长度的层,导致 G 的层分配具有最小值可能的层数。