单源最短路径实现:优先级与FIFO队列

时间:2015-04-18 19:17:54

标签: queue priority-queue dijkstra shortest-path bellman-ford

根据问题细节,在单源最短路径问题的上下文中通常提到的两种算法是Dijkstra算法和Bellman-Ford算法。 Dijkstra的算法适用于正边权重,而Bellman-Ford算法也是一种泛化,也允许负边权重。

正如Sedgewick的书“Algorithms”(第4版)中所实现的,Dijkstra的算法基于优先级队列,而Bellman-Ford算法基于普通的FIFO队列。 但是,对我来说,看起来两种队列类型的选择对于实现算法都不是必需的。也可以使用FIFO队列和具有优先级队列的Bellman-Ford算法实现Dijkstra算法。

Dijkstra算法通常用优先级队列实现的原因是什么?另一方面,Bellman-Ford具有FIFO队列?是否有功能原因,还是运行时优化?

1 个答案:

答案 0 :(得分:0)

  

Dijkstra的算法基于优先级队列

不一定。您还可以在没有优先级队列的情况下实现dijkstra算法。但在这种情况下,您必须在搜索当前正在处理的节点列表数组后选择最低值。

  

Bellman-Ford算法基于普通FIFO队列

没有任何类型的队列,您可以轻松实现Bellman-ford算法。这是一个示例实现。 https://kt48.wordpress.com/2015/06/16/bellman-ford-algorithm-c-implementation/

  

通常实施Dijkstra算法的原因是什么   另一方面,具有优先级队列的Bellman-Ford具有FIFO   队列?有功能原因,还是运行时原因   优化

是的,这是运行时优化。