为什么 Bellman–Ford 算法需要循环“顶点个数 - 1”次呢?

2020-10-08 16:50:12 +08:00
 JasonLaw

下面是我所找到的一些资料:

但我还是不能够理解 Bellman–Ford 算法。

1940 次点击
所在节点    算法
6 条回复
litmxs
2020-10-08 19:06:10 +08:00
因为每次的松弛操作都可以保证从一个结点到其相邻结点的最短路估计值达到最短路的实际值,也就是保证了所有深度为 1 的路径最短。n 次操作则可以保证所有深度为 n 的路径最短。由于在不存在负圈的情况下,从 s 出发到任意结点的最短路不会经过同一个结点两次,所以最短路的长度(路径上边的数量)不会超过|v|-1 。所以算法可以在有限次数的松弛下结束。
lidlesseye11
2020-10-09 00:17:20 +08:00
· 关于 V-1
https://www.geeksforgeeks.org/bellman-ford-algorithm-dp-23/
参考 How does this work? 那一段

·"不变性( invariant )"是啥意思?
JasonLaw
2020-10-09 22:26:26 +08:00
@lidlesseye11 #2 我说的“不变性( invariant )”其实是 loop invariant -https://stackoverflow.com/questions/3221577/what-is-a-loop-invariant
lidlesseye11
2020-10-09 23:48:50 +08:00
@JasonLaw
受教了。
那 BF 的 loop invariant 应该就是 After the i-th iteration of the outer loop, the shortest paths with at most i edges are calculated. 吧
JasonLaw
2020-10-10 06:47:15 +08:00
@lidlesseye11 对,而且可以通过这个 loop invariant 证明算法的正确性。
JasonLaw
2020-10-10 07:14:08 +08:00
@litmxs 感觉你说的“ 因为每次的松弛操作都可以保证从一个结点到其相邻结点的最短路估计值达到最短路的实际值,也就是保证了所有深度为 1 的路径最短。n 次操作则可以保证所有深度为 n 的路径最短。”怪怪的,但是我又说不太上来是哪里有问题,替换为“ After the i-th iteration of the outer loop, the shortest paths with at most i edges are calculated.”会更好理解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX