定向未加权图中最长的非循环路径

时间:2010-03-26 17:26:58

标签: algorithm graph

可以使用什么算法在未加权的有向无环图中找到最长路径?

4 个答案:

答案 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作为权重。