给定一个只有正边权重的有向连通图,是否有比使用斐波那契堆的 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|)
感谢您花时间阅读我的问题,我希望没有浪费您的时间^^。祝你今天过得愉快。