1 / 35

有向圖

有向圖. 有向圖. 有向圖 是所有邊都有向的圖形 應用 單行道 航班 任務排程. 有向圖的性質. 圖形 G=(V,E) ,其中 每個邊都是沿單一方向前進: 邊 (a,b) 是 從 a 到 b ,但不是 從 b 到 a 如果 G 是簡單圖形,則 m ≤ n*(n-1) 如果我們將入邊與出邊存放在個別的鄰接串列中,我們便可以在正比於其大小的時間中,列出入邊與出邊. 有向圖的應用. 排程 : 邊 (a,b) 意指 在任務 b 可以開始之前,任務 a 必須先被完成. 有向 DFS.

eyal
Download Presentation

有向圖

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 有向圖 有向圖

  2. 有向圖 • 有向圖是所有邊都有向的圖形 • 應用 • 單行道 • 航班 • 任務排程 有向圖

  3. 有向圖的性質 • 圖形 G=(V,E),其中 • 每個邊都是沿單一方向前進: • 邊 (a,b)是從 a 到 b,但不是從 b 到 a • 如果 G 是簡單圖形,則 m ≤ n*(n-1) • 如果我們將入邊與出邊存放在個別的鄰接串列中,我們便可以在正比於其大小的時間中,列出入邊與出邊 有向圖

  4. 有向圖的應用 • 排程:邊 (a,b) 意指在任務 b 可以開始之前,任務 a 必須先被完成 有向圖

  5. 有向 DFS • 我們可以特殊化走訪演算法 (DFS 與 BFS) 以使用在有向圖上,其中我們只會沿著的邊方向進行走訪 • 在有向的 DFS 演算法中,邊有四種型態 • 已拜訪邊 • 反向邊 • 順向邊 • 交錯邊 • 從頂點s 開始的有向 DFS,會判斷出從s 可抵達的頂點 有向圖

  6. 可到達性 • 根節點位於 v 的DFS 樹:從 v 經由有向路徑可抵達的頂點 有向圖

  7. 強連通性 • 每個頂點都可以到達所有其他的頂點 有向圖

  8. 強連通性演算法 • 在 G 中挑選一頂點v • 在 G 中從 v 開始執行 DFS • 如果有一 w 沒有被拜訪到,則印出「否」 • 令 G’ 為將邊反向的 G • 在 G’ 中從 v 開始執行 DFS • 如果有一 w 沒有被拜訪到,則印出「否」 • 否則,印出「是」 • 執行時間:O(n+m) 有向圖

  9. 強連通成員 • 最大的子圖,其中每個頂點都可以到達此子圖中所有其他的頂點 • 也可以使用 DFS 在 O(n+m) 時間內完成,但是比較複雜 (類似於雙重連通性) 有向圖

  10. 遞移包絡 • 已知一有向圖G,G 的遞移包絡為一有向圖 G*,且 • G* 與G 包含相同的頂點 • 如果G 存在一從u 到v (u ≠ v) 的有向路徑,則G*包含一從u到v 的有向邊 • 遞移包絡會提供關於有向圖的可到達性資訊 有向圖

  11. 計算遞移包絡 如果有一條從 A 到 B 的路,也有一條從 B 到 C 的路,那麼就有一條從A 到 C 的路存在。 • 我們可以從每個頂點開始執行 DFS • O(n(n+m)) • 或者是... 使用動態規劃:Floyd-Warshall 演算法 有向圖

  12. Floyd-Warshall 遞移包絡 • 想法 #1:將頂點編號為 1、2、…、n • 想法 #2:考量只使用編號 1, 2、…、k 的頂點做為中介頂點的路徑: 只使用編號 1、…、k 的頂點 (如果尚未包含此邊的話,則將之加入) 只使用編號1、…、k - 1 的頂點 只使用編號 1、…、k- 1 的頂點 有向圖

  13. Floyd-Warshall 演算法 • Floyd-Warshall 演算法會將G 的頂點編號為v1、 …、vn,然後計算一系列有向圖G0, …, Gn • G0=G • 如果G 有一從 vi 到 vj 的有向路徑,且其中介頂點屬於集合 {v1, …, vk} 的話,則Gk包含有向邊(vi, vj) • 我們可得Gn= G* • 在階段k,我們會從Gk- 1計算出有向圖Gk • 執行時間:O(n3),如果areAdjacent 為 O(1) 的話 (例如使用鄰接矩陣) 有向圖

  14. Floyd-Warshall 例子 有向圖

  15. Floyd-Warshall,循環 1 有向圖

  16. Floyd-Warshall,循環 2 有向圖

  17. Floyd-Warshall,循環 3 有向圖

  18. Floyd-Warshall,循環 4 有向圖

  19. Floyd-Warshall,循環 5 有向圖

  20. Floyd-Warshall,循環 6 有向圖

  21. Floyd-Warshall,結論 有向圖

  22. DAG 與拓樸順序 • 有向無迴路圖 (DAG) 是不包含有向循環的有向圖 • 有向圖的拓樸順序,是一種頂點的編號方式 v1、 …、vn 使得對所有邊 (vi , vj) 而言,i < j • 例子:在任務排程圖中,拓樸順序為一滿足先後限制的任務序列 定理 如果有向圖擁有拓樸順序,則若且唯若其為一DAG G 的拓樸順序 有向圖

  23. 拓樸排序 • 編號頂點,使得若 (u,v) 在 E 中則意味著 u < v 有向圖

  24. 拓樸排序演算法 • 請注意:此演算法不同於Goodrich-Tamassia書中的演算法 • 執行時間:O(n + m)。如何辦到…? 有向圖

  25. 使用 DFS 的拓樸排序演算法 • 使用深度優先搜尋來模擬此演算法 • O(n+m) 時間 有向圖

  26. 拓樸排序的例子 有向圖

  27. 拓樸排序的例子 有向圖

  28. 拓樸排序的例子 有向圖

  29. 拓樸排序的例子 有向圖

  30. 拓樸排序的例子 有向圖

  31. 拓樸排序的例子 有向圖

  32. 拓樸排序的例子 有向圖

  33. 拓樸排序的例子 有向圖

  34. 拓樸排序的例子 有向圖

  35. 拓樸排序的例子 有向圖

More Related