【发布时间】:2009-11-09 14:16:32
【问题描述】:
给定一个只有正边权重的有向连通图,是否有比使用斐波那契堆的 Dijkstra 更快的算法来找到两个顶点之间的最短路径?
维基百科说,Dijkstra 在 O(|E| + |V| * log(|V|)) 中(使用斐波那契堆)。
我不是在寻找优化,例如执行时间减半,而是在不同时间复杂度的算法(比如从 O(n * log n) 到 O(n))。
此外,我想知道您对以下方法的看法:
- 确定所有边权重的 GCD。
- 将图转换为具有统一边权重的图。
- 使用 BFS 查找两个给定顶点之间的最短路径。
第 2 点的示例:
想象 GCD 为 1。然后我将变换边缘
A--->B(边重 3)
进入
A->A'->A''->B (3 倍边重 1)
这种转换需要固定的时间,并且必须为每条边完成一次。所以我希望这个算法在 O(|E|) (transformation) + O(|E| + |V|) (BFS) = O(2 * |E| + |V|) = O(|E|) + |V|)
感谢您花时间阅读我的问题,我希望没有浪费您的时间^^。祝你有美好的一天。
【问题讨论】:
-
我想你忘记计算 GCD 的成本了。
-
转换不会在恒定时间内运行。您必须创建可变数量的新顶点。
-
GCD 将是最好的使用价值,但总是可以退回并只使用 1,这样就没有时间花在第 1 步上。
标签: graph-theory dijkstra