Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)

这里讨论下RIP和OSPF的基本算法,在CISCO课程中讨论RIP和OSPF的区别有不少,但是回溯源头,它们理论算法里面的原理差不多,比较大的区别主要有三点

1.Bellman-ford的链路距离是估算的,Dijkstra是传输链路距离给邻居的PS:这就说明了为什么RIP要采用跳数,而OSPF用的是cost,也就是带宽作为主要参数,因为估计在具体实现中是不大可行的,故采用不同的具体度量值。

2.Bellman-ford的持续进行链路距离的计算,而Dijkstra只进行一次计算就可以了,这点可能表达的不是太准确,大致意思

3.还有点就是Bellman-ford是不停在从目标出发所有相邻的节点上计算最小的路径,然后往前推进,而Dijkstra是从最小标记的节点往前推进,这里看后面解释:

这里用图例解释下(直接抓的是jean walrand的书上的图)


首先这是Bell-man算法的一个收敛图,图中解释了一个收敛的过程。

Bell-man算法采用节点间链路长度估算的方式,公式为L( i ) = min { d( i , j )+ L( j ) },其中d( i , j ) 表示节点 i 到 j 的链路长度,L( j )是从节点 j 收到的最短长度的估算。

即每一个节点初始时候以∞作为标识,从目标点向源点收敛,目标点作为0,然后相邻的标记为链路长度,当出现到目标点更短的链路长度时候,重新进行标记,直到到达源,从而得出最短的路径,每个节点都向它的邻居节点发送到所有节点的估算值


这是Dijkstra算法的收敛图,具体过程有点相似Bell-man。

首先还是从根(也就是目标)出发,根标记为0,其他节点标记为∞,然后按照标号最小的走,比如第一步2最小,然后从2往前走,其相邻节点原来是5,现在由于2+2=4,故更新下,然后再比较所有节点里面,标记最小的是3,然后从3走,发现11,大了,然后返回最小的4继续走,这样一路一路从最小标记的节点往相邻走,最终达到收敛。

PS:这里还有点区别在于Bell-man一直从相邻节点往前走,然后进行比较,把节点的标记逐步最小往前推进,从前往后看,每一个节点都是相对最小的。而Dijkstra是每次从标记值最小的节点往前走,每次都是走最小,所以它走的顺序和Bell-man的顺序是不一样的。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值