19|选路算法:距离矢量算法为什么会产生无穷计算问题?
黄清昊
该思维导图由 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
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- ZeroIce第二个图,最短路径dijkstra是acbed?距离为1?
作者回复: 嗯嗯 你说的对
2022-02-151 - kimoti如果发现某个节点断网了,那么所有依赖于这个节点的路径都必须重新计算2022-01-222
- Paul Shan距离矢量算法只存储距离信息没有拓扑信息,当节点断开之后,距离变得无限大,需要多次计算才能确认。解决方案应该是增加部分拓扑信息,来应对节点断开后的情况。我觉得可以增加路径的节点信息,文中的例子,B到D是通过C,增加C到成本一行。A到D的最短距离是通过B,可以增加B到成本这一行。这样一旦C到D断开了,距离变得无穷大,询问B的时候,B马上意识到C无妨访问到D,自己这条成本为2的路径也作废了,距离也变成了不穷大,然后询问A,A也意识到自己这条成本为3的路径也作废了,这样D断开的信息会在网络中迅速扩散。2022-01-22
收起评论