我正在尝试使Bellman ford算法的优化版本在最坏的情况下运行。优化版本,我的意思是,如果在放宽1轮边缘后没有对最短距离进行进一步更新,它将终止。
例如,一个具有7个顶点的简单连接加权有向图,使得从源顶点0开始运行Optimized Bellman-Ford算法时,至少要经过5轮才能获得正确的最短路径。
该图不能包含负重量循环。 即先处理顶点0的所有出线边,然后再处理顶点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|)
(未经验证)。