首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单源最短路径实现:优先级与FIFO队列

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

Stack Overflow用户
提问于 2015-04-18 19:17:53
回答 1查看 1K关注 0票数 0

根据问题的具体情况,在单源最短路径问题中通常提到的两种算法是Dijkstra算法和Bellman算法。Dijkstra的算法工作在正边权值,而Bellman算法是一个推广,也允许负边权。

正如Sedgewick的“算法”(第4版)所实现的,Dijkstra的算法是基于优先级队列的,而Bellman-Ford算法是基于一个普通的FIFO队列的。然而,在我看来,这两种队列类型的选择都不是实现算法所必需的。我们也可以用FIFO队列来实现Dijkstra的算法,用优先级队列实现Bellman算法。

为什么Dijkstra的算法通常是用优先级队列来实现的,Bellman则是用FIFO队列实现的呢?是出于功能原因,还是为了运行时优化?

EN

回答 1

Stack Overflow用户

发布于 2015-06-16 19:01:18

Dijkstra的算法是基于优先级队列的

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

Bellman-Ford算法是基于一个普通FIFO队列的。

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

为什么Dijkstra的算法通常是用优先级队列来实现的,Bellman则是用FIFO队列实现的呢?是出于功能原因,还是为了运行时优化?

是的,这是运行时优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29721704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档