gpt4 book ai didi

algorithm - 如果我们可以在运行 Bellman Ford 算法后再松弛一次边缘,为什么会存在负循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:21 25 4
gpt4 key购买 nike

我们知道 Bellman Ford 是一种寻找负循环的算法。这是 Bellman Ford 的算法输入:给定图 G(V,E),w(e) 是权重输出:如果存在负循环,则返回 Yes。

1: set d(s) = 0 and d(v) = 1 for all v (- s
2: for i = 1 ... n-1 do
3: for every edge (u, v) in G do
4: if d(v) > d(u) + w(u,v) then
5: d(v) = d(u) + w(u,v)
6: end for
7: end for
8: for every edge (u, v) in G do
9: if d(v) > d(u) + w(u, v) then
10: return True
11:return False

第 8 行 - 第 11 行是再放宽检测负循环,但如果图中有负循环,为什么这些行保证检测到负循环?

最佳答案

您正在检测这样一个事实,即某对顶点之间的最短路径太长以至于它必须多次访问某个顶点,因此它包含一个循环。如果该循环的长度 >= 0,则删除它最多只能使路径的长度保持不变,因此不会发现它是一种改进。因此,如果您找到这样一条包含循环的最短路径,则该循环的长度必须为负。此外,如果存在一个负长度的循环,它将被发现为从其中的任何顶点返回到同一顶点的最短路径。

关于algorithm - 如果我们可以在运行 Bellman Ford 算法后再松弛一次边缘,为什么会存在负循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com