一尘不染

图-Dijkstra用于单源最长路径

algorithm

好的,由于这个练习,我发布了这个问题:

我们可以修改Dijkstra的算法以通过将最小值更改为最大值来解决单源最长路径问题吗?如果是这样,则证明您的算法正确。如果不是,则提供一个反例。

对于本练习或与Dijkstra算法有关的所有事情, 我假设图中没有负权重
。否则,这没有什么意义,因为即使存在最短路径问题,如果存在负边缘,Dijkstra也无法正常工作。


好吧,我的直觉为我回答了:

是的,我认为可以修改。

我只是

  1. 将距离数组初始化为MININT
  2. 更改distance[w] > distance[v]+weightdistance[w] < distance[v]+weight

首先,由于上面的帖子,我认为我的答案是错误的。但是我发现上面帖子中的答案可能是错误的。它将 单源最长路径问题最长路径问题 混合在一起。

同样在Bellman-Ford算法的
Wiki中,它正确地表示:

Bellman-Ford算法可计算加权有向图中的单源最短路径。 对于仅具有非负边缘权重的图,更快的Dijkstra算法也解决了该问题
。因此,Bellman-Ford主要用于具有负边缘权重的图形。

所以我认为我的答案是正确的,对吗?Dijkstra确实可以是 “单源 最长路径问题”,我的修改也正确,对吗?


阅读 723

收藏
2020-07-28

共1个答案

一尘不染

不,我们不能1-或至少不会知道多项式的减少/修改-
最长路径问题NP-
Hard
,而dijkstra在多项式时间内运行!

如果我们可以找到对dijsktra的修改来回答多项式时间内的最长路径问题,则可以得出 P=NP

如果不是,则提供一个反例。

这是非常糟糕的任务。反例可以提供特定的修改是错误的,而可以进行其他修改就可以了。
事实是,我们不知道最长路径问题在多项式时间内是否可以解决,但一般的假设是-事实并非如此。


关于只是更改放松步骤:

        A
       / \
      1   2
     /     \
    B<--1---C
edges are (A,B),(A,C),(C,B)

来自A的dijkstra将首先选择B,然后B永远无法到达-因为它不在的集合中distances

至少,还必须将“最小堆”更改为“最大堆”,但是它将有一个不同的反例来说明为什么失败。


(1)可能,如果P = NP是可能的,但可能性很小。

2020-07-28