【问题标题】:Longest path in a Graph with DijkstraDijkstra 图中的最长路径
【发布时间】:2018-11-23 13:22:45
【问题描述】:

我只是想知道:你能把图中的所有权重反转然后做一个 Dijkstra 吗?当我们最小化权重的倒数时,得到的路径会最大化,对吧? 因此,通过这种方式,我们可以使用 Dijkstra 获得图中的最长路径! 这似乎太容易了,我弄错了吗?请赐教。

【问题讨论】:

  • 你说的逆是什么意思?
  • @NiVeR 如果我有 x 1/y

标签: graph graph-theory graph-algorithm dijkstra longest-path


【解决方案1】:

这是不可能的,因为longest path problem 没有像shortest path 那样的最优子结构问题。

假设您可以将任何路径视为最长路径(因此它可以有循环),但如果存在循环并且权重为正,则算法将永远不会结束,因为它总是可以通过循环遍历循环来改进最长路径。

现在假设我们只想将简单路径(没有循环)作为最长路径的候选者。不失一般性,考虑以下所有边的权重单一的图:

A------B
|      |
|      |
C------D

并考虑从AD (A->B->D) 的最长路径。对于具有最佳子结构属性的问题,从AB 的最长路径必须是A -> B,但显然不是因为路径A->C->D->B 更长。可以对从BD 的路径进行类似的论证。所以我们可以看到为什么这个问题不能用 Dijkstra 算法解决。事实上这个问题是NP,没有合理的时间复杂度解决方案。

【讨论】:

  • 但我说的是反转权重然后找到最短路径,实际上这将是最长的,因为我们使用的是倒数!!
  • 慢慢读一遍。
  • 它没有回答我的问题。我正在考虑一个套利问题。在那里,为了找到汇率最高的序列,我考虑反转并非都是单一的值。
  • @alienflow 这只是一个简单的例子。您可以输入其他值,例如(A,B)=1/2, (B,D)=1/4, (A,C) = 1/3, (C,B)=1.4
【解决方案2】:

通过一个简单的示例图很容易理解。

假设你想从 A 点到 D 点。为了最小化权重的倒数,你会经过 C。但是 A->B->D 更大。

编辑:也许我至少应该包括一些数学。

假设一个正数序列的和是s。

a1 + a2 + a3 + ... + an = s.

倒数的最小值是多少?

1/a1 + 1/a2 + 1/a3 + ... + 1/an

玩弄这个会给你一些直觉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多