關鍵路徑


關鍵路徑(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 的層分配具有最小值可能的層數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM