这个算法如何在有向无环图上找到最大路径?

时间:2010-05-17 04:26:24

标签: algorithm graph directed-acyclic-graphs

从一段时间以来,我正在使用一个运行在复杂度为O(V + E)的算法,用于在从A点到B点的定向非周期图上找到最大路径,其中包括执行洪水填充以查找哪些节点可以从注释A访问,每个节点有多少“父”(来自其他节点的边)。然后,我做了一个BFS但只在我已经使用了所有“父母”时“激活”一个节点。

queue <int> a
int paths[] ; //Number of paths that go to note i
int edge[][] ; //Edges of a
int mpath[] ; //max path from 0 to i (without counting the weight of i)
int weight[] ; //weight of each node

mpath[0] = 0

a.push(0)
while not empty(a)
    for i in edge[a]
        paths[i] += 1
        a.push(i)

while not empty(a)
    for i in children[a]
        mpath[i] = max(mpath[i], mpath[a] + weight[a]) ;

        paths[i] -= 1 ;
        if path[i] = 0
            a.push(i) ;

此算法有什么特殊名称吗?我把它告诉了一位信息学教授,他只是把它称为“DAG上的最大路径”,但是当你说“我用Fenwick树解决了第一个问题,第二个用Dijkstra解决问题,第三个用Dijkstra解决问题时,这听起来不太好”最大路径“。

3 个答案:

答案 0 :(得分:3)

就像其他人提到的那样,它只是“DAG中最长的路径”。但是,您使用的技术实际上是topological sorting dynamic programming

答案 1 :(得分:2)

可能没有 - 因为它不是一种常见的算法。当您需要在DAG中找到路径时,您只需对其进行排序,遍历一次并保持最长路径。

答案 2 :(得分:1)

DAG中最长的路径?请务必提及DAG。在一般图中找到最长路径是NP-Complete。