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)。
采用动态规划方法来实现该算法。 采用贪心方法来实现该算法。

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...