Bellman-Ford 算法可以处理正循环吗?
Can Bellman-Ford algorithm handle positive cycles?
最近在研究Bellman-Ford算法,突然冒出一个疑问。据我了解,Bellman-Ford 算法从其来源创建了最短路径,如果图中可能存在负循环,则它 returns 为真并且算法停止,另一方面它 returns false 最短路径。
我现在的问题是,该算法是否避免了图中的正循环来创建最短路径,还是只是不考虑它们(因此落入了它们的陷阱)?
提前致谢!
考虑一个包含正权重的循环 。很明显,如果我们将源点到顶点a的最短距离设置为边c到a,那么这将与optimal substructure of shortest path and correctness of Belman-Ford algorithm相矛盾。所以该算法评估正循环的长度但不将其视为最短路径。
如果存在负循环,则不存在“最短”路径,因为您可以根据需要多次循环循环以使路径“更短”(即边缘权重的总和较低)。如果图有负环,则算法可能会因陷入无限循环或返回非最短路径而失败;因此,我们对可以“检测”负循环并且不会以其中一种方式失败的算法感兴趣。
Bellman–Ford 就是这种算法的一个例子:如果图中有一个负环,那么 Bellman–Ford 算法检测到没有最短路径(并且可以报告负环是什么)。这意味着该算法正确地确定了寻找最短路径的问题没有针对此输入的已定义解决方案,而不是给出错误的结果或无法终止。
正环不会产生任何类似的问题,因为正环的存在并不意味着没有最短路径。绕正循环任意多次的解决方案会导致更长的路径(即更高的边缘权重总和),而不是更短的路径。所以每个最短路径算法都必须正确处理这种情况,包括Bellman–Ford。
最近在研究Bellman-Ford算法,突然冒出一个疑问。据我了解,Bellman-Ford 算法从其来源创建了最短路径,如果图中可能存在负循环,则它 returns 为真并且算法停止,另一方面它 returns false 最短路径。
我现在的问题是,该算法是否避免了图中的正循环来创建最短路径,还是只是不考虑它们(因此落入了它们的陷阱)?
提前致谢!
考虑一个包含正权重的循环 。很明显,如果我们将源点到顶点a的最短距离设置为边c到a,那么这将与optimal substructure of shortest path and correctness of Belman-Ford algorithm相矛盾。所以该算法评估正循环的长度但不将其视为最短路径。
如果存在负循环,则不存在“最短”路径,因为您可以根据需要多次循环循环以使路径“更短”(即边缘权重的总和较低)。如果图有负环,则算法可能会因陷入无限循环或返回非最短路径而失败;因此,我们对可以“检测”负循环并且不会以其中一种方式失败的算法感兴趣。
Bellman–Ford 就是这种算法的一个例子:如果图中有一个负环,那么 Bellman–Ford 算法检测到没有最短路径(并且可以报告负环是什么)。这意味着该算法正确地确定了寻找最短路径的问题没有针对此输入的已定义解决方案,而不是给出错误的结果或无法终止。
正环不会产生任何类似的问题,因为正环的存在并不意味着没有最短路径。绕正循环任意多次的解决方案会导致更长的路径(即更高的边缘权重总和),而不是更短的路径。所以每个最短路径算法都必须正确处理这种情况,包括Bellman–Ford。