我只是想知道:您可以反转图中的所有权重,然后进行 Dijkstra 吗?当我们最小化权重的倒数时,得到的路径会最大化,对吧?因此,通过这种方式,我们可以使用 Dijkstra 获得图中的最长路径!这似乎太容易了,我弄错了吗?请赐教。
问问题
495 次
2 回答
0
这是不可能的,因为longest path problem
没有最优子结构问题shortest path
。
假设您可以将任何路径视为最长路径(因此它可以有循环),但是如果存在循环并且权重为正,则算法将永远不会结束,因为它始终可以通过循环遍历循环来改进最长路径。
现在假设我们只想将简单路径(没有循环)作为最长路径的候选者。在不失一般性的情况下,考虑以下所有边的权重单一的图:
A------B
| |
| |
C------D
并考虑从A
到D
( A->B->D
) 的最长路径。对于具有最佳子结构属性的问题,从A
到的最长路径必须B
是,A -> B
但显然不是因为路径A->C->D->B
更长。可以对 fromB
到的路径进行类似的论证D
。所以我们可以看到为什么这个问题不能用 Dijkstra 算法解决。事实上,这个问题是NP
,没有一个合理的时间复杂度解决方案。
于 2018-06-13T21:19:45.743 回答