繁体   English   中英

两个节点之间的最短路径与从一个节点到所有其他节点的最短路径

[英]Shortest path between two nodes vs shortest path from one node to all other nodes

我目前正在研究具有非负边权重的图中的最短路径问题。

我知道 Dijkstra 算法可以为我提供单源最短路径问题的解决方案,即可以找到从一个节点到所有其他节点的最短路径,但我还没有找到可以解决先验更简单问题的算法:找到两个节点之间的最短路径。

直观地说,我认为可以找到表明“更简单”问题并不比单源最短路径问题更简单的示例,但我正在寻找在简单(即具有几个节点)图。

一些(但不是全部)单源最短路径算法可以很容易地修改为通过提前停止算法来返回两个节点之间的最短路径。 一个简单的例子是未加权图中的广度优先搜索。 例如,要找到从节点 u 到节点 v 的最短路径,请从 u 开始 BFS。 一旦找到 v,从 u 到 v 的路径就是最短路径。 Dijkstra 算法也可以做到这一点:如果您从节点 u 开始运行 Dijkstra 算法,您可以在将 v 从优先级队列中取出后立即停止算法以获得那里的最短路径。

这些方法通常比运行整个算法完成更快。 但是,如果您对查找从一个节点到另一个节点的路径特别感兴趣,您可能需要查看 A* 搜索算法。 这是对 Dijkstra 算法的修改,专门针对从一个节点到另一个节点的问题进行了优化。 它使用启发式方法来引导搜索到目标,降低搜索其他节点的优先级,因此通常比 Dijkstra 算法快得多。

请注意,并非所有最短路径算法都可以通过这种方式提前切断。 例如,当有负边权重但没有负循环时,Bellman-Ford 仍然可以计算最短路径。 但是,它可能会在运行时不断修改节点距离,直到算法的最后一轮。 尽早切断搜索可能会返回错误的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM