有比Dijkstra更快的算法吗?

Dav*_* O. 8 graph-theory dijkstra

给定一个只有正边权重的有向连通图,是否有比使用斐波纳契堆的Dijkstra更快的算法来找到两个顶点之间的最短路径?

维基百科说,Dijkstra在O(| E | + | V |*log(| V |))中(使用斐波纳契堆).

我不是在寻找优化,例如,执行时间的一半,而是具有不同时间复杂度的算法(如从O(n*log n)到O(n)).

此外,我想知道您对以下方法的看法:

  1. 确定所有边权重的GCD.
  2. 将图形转换为具有均匀边缘权重的图形.
  3. 使用BFS查找两个给定顶点之间的最短路径.

第2点的示例:
想象一下GCD为1.然后我将边缘
A ---> B(边缘权重3)
转换为
A-> A' - > A'' - > B(边缘权重1的3倍)
这种转换需要花费不变的时间,并且必须针对每个边缘进行一次.所以我希望这个算法在O(| E |)(变换)+ O(| E | + | V |)(BFS)= O(2*| E | + | V |)= O(| E | + | V |)

感谢您抽出宝贵时间阅读我的问题,希望不要浪费你的时间^^.祝你今天愉快.

Meh*_*ari 10

你为你的算法做的大分析是非常有缺陷的.假设所有边都是素数.新图中的边数将等于所有权重的总和.因此O(|E| + |V|)所述的图形实际上是O(W x |E| + |V|)在原始图表可以比大得多O(|E| + |V| log |V|).


Ewa*_*odd 6

有比Dijkstra更快的算法吗?

是.这个问题不合格,因此在所有情况下甚至在大多数情况下都要求更好的性能.在单个案例中具有更好性能的算法足以建立肯定答案.

尽管Bellman-Ford方法对Dijkstra方法所需的迭代次数通常较多,但实际上Bellman-Ford方法可能更优越,因为每次迭代的开销更小[Golden,B.,1976."Shortest-Path Algorithms:A比较,"运筹学,卷.44,pp.1164-1168].

以上引用来自Dimitri P. Bertsekas(1992年3月)."用于最短路径的简单快速标签校正算法"(PDF).网络,卷.23,pp.703-709,1993.http: //www.mit.edu/people/dimitrib/SLF.pdf.检索2008-10-01.

简而言之,我的主张是基于Bertsekas对Golden的解释.无论我的结论是否成立,您可能会发现Bertsekas将Dijkstra算法的分类作为标签设置方法的有趣之处,与标签校正方法形成对比.

  • 他特别询问了渐近运行时较低的解决方案. (3认同)