【问题标题】:graph - Dijkstra for The Single-Source Longest Path图 - 单源最长路径的 Dijkstra
【发布时间】:2012-05-05 14:21:49
【问题描述】:

好的,因为这个练习,我发布了这个问题:

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

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


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

是的,我认为可以修改。

我只是

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

然后我做了一些研究来验证我的答案。我找到了这篇文章:

Longest path between from a source to certain nodes in a DAG

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

同样在Bellman–Ford algorithm的wiki中,它说的很对:

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

所以我认为我的答案是正确的,对吧? Dijkstra 真的可以是单源最长路径问题,而且我的修改也是正确的,对吧?

【问题讨论】:

  • @Kristo,你能看看吗?

标签: algorithm data-structures graph dijkstra


【解决方案1】:

不,我们不能1 - 或者至少,不知道多项式减少/修改 - longest path problemNP-Hard,而 dijkstra 在多项式时间内运行!

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

如果不是,请举个反例。

这是一个非常糟糕的任务。反例可以提供一个特定的修改是错误的,而可能有一个不同的修改是好的。
事实是我们不知道最长路径问题是否可以在多项式时间内解决,但一般假设是 - 它不是。


关于只是改变松弛步骤:

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

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

至少,还必须将 min heap 更改为 max heap,但它会有一个不同的反例为什么会失败。


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

【讨论】:

  • 阿米特,这就是我在我的问题中所说的。我认为最长路径问题与单源最长路径问题不同。在Longest Path problem 中,我们需要在整个图中找到一条最长的路径。但在我上面的问题中,single sourced 表示我们得到一个顶点 S,然后找出从 S 出发的最长路径。它们是不同的问题,对吧?
  • 啊,好吧,我想我弄错了。如果可以解决单源最长路径问题,那么我们只需对每个顶点进行单源最长路径,然后将它们全部比较,然后解决最长路径问题。这是不可能的,因为最长路径问题是 NP。好吧,我猜我想错了。
  • @JacksonTale:dijkstra 算法背后的想法是进行局部松弛。请注意,在 dijkstra 的算法中,当从节点列表中挑选距离最小的节点并将其删除时,没关系,我们永远不需要再次修改它,而对于最大问题 - 这是不正确的。
  • @JacksonTale:我相信存在修改,但我现在想不出。然而,正如您已经知道的那样,我更喜欢减少现有算法的问题,而不是修改算法。在这种情况下,我将创建一个新的权重函数w'(e) = -w(e),并使用w' 调用Bellman Ford。由于图是有向无环图,没有环,特别是没有负环,BF会根据w'返回最短路径,也就是w下的最长路径!你怎么看?这也适合您的问题吗?
  • 这个答案不准确。正确的是,一般来说,Dijkstra 不能用于查找最长路径,但是 Dijkstra 可以找到一个图的子集:如果给定图 G 上的所有边都是非正的,则可以通过否定所有边将G 转换为-G。在这种情况下,Dijkstra 在-G 中找到的最短路径对应于G 中的最长路径
【解决方案2】:

是的,我们可以。你的答案几乎是正确的。除了一件事。

您假设没有负权重。在这种情况下,Dijkstra 算法无法找到最长路径。

但是如果你假设只有负权重,你可以很容易地找到最长的路径。为了证明正确性,只需取所有权重的绝对值,就可以得到具有正权重的通常 Dijkstra 算法。

【讨论】:

  • 我认为你的回答是在耍花招。如果我只假设负权重,那么最长的路径就像shortest path in all positive weights。我不认为这是消费税所寻求的。
  • @JacksonTale,是的,这只是一个把戏。但从消费税文本中不清楚,这是什么意思。否则,阿米特的回答很好。
  • 感谢您的回答。我猜消费税的真正含义是真正的最长路径问题。我不好添加这样的假设。
  • 将 Dijkstra 用于非正数权重的想法非常有趣。特别是,当我们需要找到所有边权重均为 -ve 或零的图 G 的最长路径时,更明智的做法是在变换后的图 G' =(-G) 上应用 Dijkstra 而不是 Bellman-Ford,以便获得更好的运行时间。
【解决方案3】:

它适用于有向无环图,但不适用于循环图。由于路径会回溯,并且在 dijkstra 的算法中无法避免这种情况

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多