可以使用什么算法在未加权的有向无环图中找到最长路径?
答案 0 :(得分:24)
Dynamic programming。它也在Longest path problem中被引用,因为它是DAG。
来自维基百科的以下代码:
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))
答案 1 :(得分:6)
只要图形是非循环的,您需要做的就是否定边权重并运行任何最短路径算法。
编辑:显然,您需要一种支持负权重的最短路径算法。此外,维基百科的算法似乎有更好的时间复杂度,但我会在此留下我的答案以供参考。
答案 2 :(得分:2)
维基百科有一个算法:http://en.wikipedia.org/wiki/Longest_path_problem
看起来他们使用权重,但是应该将权重设置为1。
答案 3 :(得分:1)
可以通过关键路径方法解决:
1.找到拓扑排序
2.找到关键路径
参见[Horowitz 1995],C ++数据结构基础,计算机科学出版社,纽约。
贪婪的策略(例如Dijkstra)无论如何都不会起作用:1。使用“max”而不是“min”2。将正权重转换为负数3.给出一个非常大的数字M并使用M-w作为权重。