我读到关键路径方法使用具有正权重的最长路径方法,它用于安排一组项目活动(时间值必须为正)。
在我的情况下,我需要找到DAG中具有正负权重的最长路径。我可以用什么来解决这个问题?我需要一个例子。
答案 0 :(得分:3)
在DAG中找到最长路径并不真正“关心”只有正权重,而是使用Dynamic Programming (DP)按照以下公式完成:
D(target) = 0
D(i) = max { D(j) + w(i,j) | for each edge (i,j) }
以上是D(v)
,它是从v
开始并以目标结束的最大长度路径。
以Topological Sort的相反顺序遍历节点,它在O(V+E)
中完成。
请注意,上面并不关心边缘是负还是正,它基本上是一种蛮力方法,当实现为DP时,通过多次重新计算相同的事物来更有效地完成。