在具有正负权重的 DAG 中寻找最长路径的示例

An example of finding the longest path in DAG with both positive and negative weights

我看到关键路径法使用最长路径法,权重为正,用于安排一组项目活动(时间值必须为正)。

在我的例子中,我需要在 DAG 中找到最长的路径,同时具有正权重和负权重。我可以用这个问题做什么?我需要一个例子。

在 DAG 中查找最长路径并不真正 "care" 仅涉及正权重,它是使用 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 实现时,通过不多次重新计算相同的事情来更有效地完成。