微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bellman Ford 和 Dijkstra 算法的区别

贝尔曼福特算法
与其他动态规划问题一样,该算法以自下而上的方式计算最短路径。它首先计算路径中最多有一条边的最短距离。然后,它计算最多有 2 条边的最短路径,依此类推。在外循环的第 i 次迭代之后,计算最多有 i 条边的最短路径。可以有最大值 |V| – 任何简单路径中的 1 条边,这就是外循环运行 |v| 的原因- 1次。这个想法是,假设如果我们计算了最多有 i 个边的最短路径,则没有负权重循环,那么对所有边的迭代保证给出最多有 (i+1) 个边的最短路径

Dijkstra 算法
Dijkstra 的算法与 Prim 的最小生成树算法非常相似。与 Prim 的 MST 一样,我们生成一个以给定源为根的 SPT(最短路径树)。我们维护两组,一组包含包含在最短路径树中的顶点,另一组包含尚未包含在最短路径树中的顶点。在算法的每一步,我们都会找到一个顶点,它在另一个集合(尚未包含的集合)中并且与源的距离最小。

Bellman Ford 算法和 Dijkstra 算法的区别:

Bellman Ford 算法和 Dijkstra 算法都是单源最短路径算法,即都确定了图的每个顶点到单个源顶点的最短距离。但是,它们之间存在一些关键差异。我们遵循 Bellman Ford 算法中的动态规划方法和 Dijkstra 算法中的贪婪方法。让我们看看这两种技术之间的其他主要区别 -

Bellman Ford 算法 Dijkstra 算法
贝尔曼福特算法在存在负权重边缘时工作,它还检测负权重循环。 Dijkstra 算法在权重边缘为负时可能有效,也可能无效。但当权重循环为负时,绝对行不通。
结果包含顶点,其中包含有关它们连接到的其他顶点的信息。 结果包含包含有关网络的全部信息的顶点,而不仅仅是它们连接的顶点。
它可以很容易地以分布式方式实现。 它不能以分布式方式轻松实现。
它比 Dijkstra 的算法更耗时。它的时间复杂度是 O(VE)。 它花费的时间更少。时间复杂度为 O(E logV)。
采用动态规划方法来实现该算法。 采用贪心方法来实现该算法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐