可以使用什麼算法找到未加權的定向非循環圖中最長的路徑?定向未加權圖中最長的非循環路徑
回答
Dynamic programming。考慮到它是DAG,它也在Longest path problem中引用。
下面的代碼從維基百科:
algorithm dag-longest-path is
input:
Directed acyclic graph G
output:
Length of the longest path
length_to = array with |V(G)| elements of type int with default value 0
for each vertex v in topOrder(G) do
for each edge (v, w) in E(G) do
if length_to[w] <= length_to[v] + weight(G,(v,w)) then
length_to[w] = length_to[v] + weight(G, (v,w))
return max(length_to[v] for v in V(G))
只要該圖是無環,所有你需要做的是否定的邊緣權重和運行任何最短路徑算法。
編輯:很明顯,你需要一個支持負權重的最短路徑算法。另外,來自維基百科的算法似乎有更好的時間複雜性,但我會在這裏留下我的答案供參考。
,我們是否保持負面權重爲負? :p – Hellnar 2010-03-27 00:26:33
@Hellnar:不,如果你在原始圖中有負值,他們應該變爲正值。 w'= - (w) – 2010-03-27 09:55:06
維基百科有一個算法:http://en.wikipedia.org/wiki/Longest_path_problem
看起來他們使用的權重,但應與權重的工作都設置爲1。
可以通過關鍵路徑方法來解決:
1.找到一個拓撲排序
2.找到關鍵路徑
參見[Horowitz 1995],Fundamentals of Data Structures in C++,Computer Science Press,New York。
貪婪策略(例如Dijkstra)不會工作,不管:1。使用「max」而不是「min」2.將正面權重轉換爲負面3.給出非常大的數字M並使用M-w作爲權重。
- 1. 加權有向非循環圖的最長路徑
- 2. 在有向非循環圖中尋找最長路徑
- 3. 直接非循環圖中最長的路徑
- 4. 如何使用OGDF庫在非循環有向圖中找到最長路徑?
- 5. 計算加權最短路徑的未加權長度
- 6. 枚舉定向非循環圖中的所有路徑
- 7. 如何計算定向非循環圖的關鍵路徑?
- 8. 查找無向加權樹中最長的路徑
- 9. 循環圖中最長路徑問題的優化
- 10. 稀疏循環圖中最長的簡單路徑
- 11. 在未知大小的加權有向圖上,如何迭代兩個頂點之間從最短到最長的所有可能的非循環路徑?
- 12. 無向圖解決方案中最長路徑(邊權重= 1)?
- 13. 非加權圖中鄰接列表中的最短路徑
- 14. 未加權的最短路徑
- 15. 非循環圖 - 頂點之間每條路徑的最小權重
- 16. 未加權圖的最短路徑(最少節點)
- 17. 在非加權圖中找到最短路徑
- 18. N步驟內的直接非循環圖最短路徑
- 19. 在加權無向圖中找到一定長度的所有路徑
- 20. 在動態有向圖中尋找最小循環路徑
- 21. 有向無環圖的最短路徑
- 22. 通過加權圖的最短路徑
- 23. 圖最短路徑無限循環
- 24. 尋找加權無向圖中固定成本的路徑?
- 25. 在加權圖中確定最佳路徑的算法
- 26. Python的DFS最短路徑與加權搜索,無向圖
- 27. 如何在圖中找到所有「長」的簡單非循環路徑?
- 28. 定向,加權平衡樹的進口和最短路徑networkx
- 29. 未加權圖/樹中兩個給定節點之間的最短路徑
- 30. 定向非循環圖的差異
這隻返回路徑的長度。代碼是否可以輕鬆修改以返回路徑? – oschrenk 2012-04-02 20:46:12
是的,與大多數DP問題一樣 - 跟蹤以前的情況並重新開始。 – Larry 2012-07-17 16:34:43
'topOrder(G)'是[topological order](https://en.wikipedia.org/wiki/Topological_sorting) – 2016-10-29 14:22:32