业务开发算法 50 讲
黄清昊
Hashdata 数据库内核工程师,LeetCode 高赞答主,公众号微扰理论作者
23292 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
业务开发算法 50 讲
15
15
1.0x
00:00/00:00
登录|注册

19|选路算法:距离矢量算法为什么会产生无穷计算问题?

如何解决环路问题,避免无谓的计算?
链路状态算法计算更健壮
距离矢量算法通信成本较低
链路状态算法基于Dijkstra
距离矢量算法基于Bellman-Ford
如RIP协议中的16跳限制
设定跳数上限
也称为无限计算问题
节点不断更新距离矩阵直至稳定
选择成本最低的邻居作为下一跳
维护每个节点到其他节点的距离矩阵
只需邻居间交换距离信息
无法处理存在负权回路的情况
数学归纳法
可以处理负边
O(V*E)
重复松弛操作 (V-1) 次
初始化图
松弛操作
动态规划
基于Bellman-Ford算法
交换到其他节点的距离信息
本地的、非中心化的
解决最短路问题的一种算法
思考题
计算健壮性
通信成本
对比链路状态算法
解决思路
路由环路问题
迭代过程
选路
距离表
信息交换
负权回路问题
正确性证明
特点
时间复杂度
算法过程
核心思想
距离矢量算法
动态路由问题
课后作业
总结
无限计算问题
距离矢量算法实现
Bellman-Ford算法
基本概念
距离矢量算法

该思维导图由 AI 生成,仅供参考

你好,我是微扰君。今天,我们一起来学习一种新的解决最短路问题的思路——Bellman-Ford 算法,以及基于它发展出来的距离矢量算法。
动态路由问题相信你已经理解了,上两讲我们也一起学习了解决这个问题的一种经典选路算法——基于 Dijkstra 算法思想的链路状态算法,核心就是每个节点,通过通信收集全部的网络路由信息,再各自计算。
如果说链路状态算法的思想是全局的、中心化的,我们今天要学习的距离矢量算法就是本地的、非中心化的,交换信息的数据量会比链路状态少很多。因为在基于距离矢量算法下的选路协议下,节点之间只用交换到网络中每个其他节点的距离信息,不用关心具体链路,也就是我们所说的距离矢量,而不是泛洪地转发整个网络中每条边的信息。
具体是如何做到的呢?这背后计算最短路的核心思想就是 Bellman-Ford 算法。

Bellman-Ford 算法

我们就先来学习 Bellman-Ford 算法,它同样是一种反复执行“松弛”操作去计算源点 S 到网络中其他节点距离最短路径的算法,所以学过 Dijkstra 算法的思想,我们再理解 BellmanFord 算法是比较简单的。
不过,和 Dijkstra 用到的贪心思想不同,Bellman-Ford 算法采用的是动态规划(dynamic programming)的思想。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

距离矢量算法是一种解决最短路问题的新思路,基于Bellman-Ford算法发展而来。与Dijkstra算法不同,Bellman-Ford算法采用动态规划思想,通过反复执行“松弛”操作计算源点到网络中其他节点的最短路径。该算法通过遍历所有边进行松弛操作,重复(V-1)次,确保计算出所有节点的最短路径。相比Dijkstra算法,Bellman-Ford算法适用范围更广,能处理负边的情况。其正确性通过数学归纳法得以证明,且可用于检测负权回路。文章还提到了Bellman-Ford算法的伪代码实现和正确性证明,以及如何检测负权回路的问题。文章深入浅出地介绍了Bellman-Ford算法的原理和应用,对于理解该算法的工作原理和特点具有很好的参考价值。 距离矢量算法是基于Bellman-Ford算法的一种新思路,用于解决最短路问题。与Dijkstra算法相比,Bellman-Ford算法采用动态规划思想,通过反复执行“松弛”操作计算最短路径。该算法适用范围更广,能处理负边的情况,并可用于检测负权回路。文章深入介绍了算法原理和应用,对读者理解该算法具有很好的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • ZeroIce
    第二个图,最短路径dijkstra是acbed?距离为1?

    作者回复: 嗯嗯 你说的对

    2022-02-15
    1
  • kimoti
    如果发现某个节点断网了,那么所有依赖于这个节点的路径都必须重新计算
    2022-01-22
    2
  • Paul Shan
    距离矢量算法只存储距离信息没有拓扑信息,当节点断开之后,距离变得无限大,需要多次计算才能确认。解决方案应该是增加部分拓扑信息,来应对节点断开后的情况。我觉得可以增加路径的节点信息,文中的例子,B到D是通过C,增加C到成本一行。A到D的最短距离是通过B,可以增加B到成本这一行。这样一旦C到D断开了,距离变得无穷大,询问B的时候,B马上意识到C无妨访问到D,自己这条成本为2的路径也作废了,距离也变成了不穷大,然后询问A,A也意识到自己这条成本为3的路径也作废了,这样D断开的信息会在网络中迅速扩散。
    2022-01-22
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部