首页 文章

在具有两个负边的图中找到从给定节点s到V中的所有节点的最短路径距离

提问于
浏览
2

我对此有一个后续问题:Finding shortest path distances in a graph containing at most two negative edges

Ranveer的解决方案看起来很棒,但它不够快,因为我需要O(| E | | V | * log | V |)快速算法 .

我猜Dukeling的解决方案效果很好 . 它有意义,它在Dijkstra算法的相同运行时间内运行 .

但是,我的目标是找到从给定节点到V中所有节点的最短路径距离 . 如果我通过将V中的所有节点设置为终点e来应用Dukeling算法,我将需要运行它| V | - 1次 . 然后,运行时间为O(| V || E | | V ^ 2 | * log | V |) .

任何帮助,将不胜感激!

1 回答

  • 3

    Dijkstra的算法以其原始形式查找从源节点到图中所有其他节点的所有最短路径 .

    您(至少)有两个选项可以解决您的问题:

    • 使用Bellman - Ford . 它并不像它的大哦那么慢,至少不一定 . 确保你像BF search一样实现它:使用FIFO queue . 这意味着每次更新到达队列的距离时,您都会将节点插入队列,并且只有当节点不在队列中时才会插入 . 其他优化也是可能的,但这应该已经在实践中为您提供了快速算法;

    • 使用Dijkstra's,但修改过类似于Bellman - Ford:默认的Dijkstra永远不会在优先级队列中插入两次节点 . 如果已更新节点的距离,请确保重新插入节点 . 这将处理负成本边缘 . 它本质上使算法更接近Bellman - 上面描述的福特,但使用优先级队列而不是FIFO队列 . 这也可以让您更接近您期望的复杂性 .

相关问题