根据问题细节,在单源最短路径问题的上下文中通常提到的两种算法是Dijkstra算法和Bellman-Ford算法。 Dijkstra的算法适用于正边权重,而Bellman-Ford算法也是一种泛化,也允许负边权重。
正如Sedgewick的书“Algorithms”(第4版)中所实现的,Dijkstra的算法基于优先级队列,而Bellman-Ford算法基于普通的FIFO队列。 但是,对我来说,看起来两种队列类型的选择对于实现算法都不是必需的。也可以使用FIFO队列和具有优先级队列的Bellman-Ford算法实现Dijkstra算法。
Dijkstra算法通常用优先级队列实现的原因是什么?另一方面,Bellman-Ford具有FIFO队列?是否有功能原因,还是运行时优化?
答案 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 队列?有功能原因,还是运行时原因 优化
是的,这是运行时优化。