Longest acyclic path in a directed unweighted graph

后端 未结 4 1112
借酒劲吻你
借酒劲吻你 2020-11-29 06:13

What algorithm can be used to find the longest path in an unweighted directed acyclic graph?

相关标签:
4条回答
  • 2020-11-29 06:32

    Wikipedia has an algorithm: http://en.wikipedia.org/wiki/Longest_path_problem

    Looks like they use weightings, but should work with weightings all set to 1.

    0 讨论(0)
  • 2020-11-29 06:33

    As long as the graph is acyclic, all you need to do is negate the edge weights and run any shortest-path algorithm.

    EDIT: Obviously, you need a shortest-path algorithm that supports negative weights. Also, the algorithm from Wikipedia seems to have better time complexity, but I'll leave my answer here for reference.

    0 讨论(0)
  • 2020-11-29 06:39

    Dynamic programming. It is also referenced in Longest path problem, given that it is a DAG.

    The following code from Wikipedia:

    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))
    
    0 讨论(0)
  • 2020-11-29 06:42

    Can be solved by critical path method:
    1. find a topological ordering
    2. find the critical path
    see [Horowitz 1995], Fundamentals of Data Structures in C++, Computer Science Press, New York.

    Greedy strategy(e.g. Dijkstra) will not work, no matter:1. use "max" instead of "min" 2. convert positive weights to negative 3. give a very large number M and use M-w as weight.

    0 讨论(0)
提交回复
热议问题