如何使贝尔曼福德在最坏的情况下运转?

时间:2019-10-31 16:23:09

标签: algorithm bellman-ford

我正在尝试使Bellman ford算法的优化版本在最坏的情况下运行。优化版本,我的意思是,如果在放宽1轮边缘后没有对最短距离进行进一步更新,它将终止。

例如,一个具有7个顶点的简单连接加权有向图,使得从源顶点0开始运行Optimized Bellman-Ford算法时,至少要经过5轮才能获得正确的最短路径。

该图不能包含负重量循环。 即先处理顶点0的所有出线边,然后再处理顶点1的边,依此类推

我知道这与周期有关。但是我不太确定绘制图形的策略是否满足要求。

1 个答案:

答案 0 :(得分:0)

您的Bellman-Ford算法版本将需要与图中所有最短路径的最长长度(沿边)一样多的迭代。

考虑具有 n 个顶点的有向图。将边线 1-> 2-> 3-> ...-> n 添加到图形中,每个边的正权重较小。然后,您可以根据需要添加任意数量的 heavy 边。显然,从 1 n 的最短路径的长度为 n-1 。因此,您的算法将需要精确的 n-1 个迭代。

需要进一步说明的是Bellman-Ford算法的改进版本。它称为Shortest Path Faster Algorithm。尽管它的最坏情况运行时间为O(|V|*|E|),与Bellman-Ford相同,但是很少有图表可以使算法达到该时间。实际上,您可以期望平均运行时间为O(|E|)(未经验证)。