Bellman-Ford算法能处理正循环吗



我目前正在研究Bellman-Ford算法,突然出现了一个疑问。根据我所了解到的,Bellman-Ford算法从其来源创建最短路径,如果图中可能存在负循环,则它返回true,算法停止,另一方面,它用最短路径返回false。

我现在的问题是,该算法是避免了图中的正循环来创建最短路径,还是没有考虑到它们(从而落入它们的陷阱(?

提前感谢!

如果存在负循环,则不存在"最短";路径,因为你可以在循环中循环多次,以形成一条路径";较短的";(即边缘权重的较低总和(。如果一个图有一个负循环,那么算法可能会陷入无限循环或返回一条不最短的路径而失败;因此我们感兴趣的算法是;"检测";负循环,而不是以其中一种方式失败。

Bellman–Ford就是这样一个算法的例子:如果图有一个负循环,那么Bellman–福特算法检测到没有最短路径(并且可以报告负循环是什么(。这意味着算法正确地确定了寻找最短路径的问题没有为此输入定义的解决方案,而不是给出错误的结果或未能终止。

正循环不会产生任何类似的问题,因为正循环的存在并不意味着没有最短路径。任意多次围绕正循环的解决方案会导致更长的路径(即边缘权重的总和更高(,而不是更短的路径。因此每个最短路径算法都必须正确处理这种情况,包括Bellman–Ford。

考虑一个循环<a、 b、c、a>包含正权重。很明显,如果我们将源到顶点a的最短距离设置为边c到a,那么这将与最短路径的最优子结构和Belman-Ford算法的正确性相矛盾。因此,该算法评估正循环的长度,但不将其视为最短路径。

最新更新