IP动态选路和最短路算法

RIP使用Bellman-Ford算法

在开始之前呢,我们先了解一下Bellman-Ford算法吧!

Bellman-Ford算法(Dijstra算法也是)是来自于动态规划。动态规划的两点特征:最优子结构和重叠子问题。

首先是最优子结构问题:

最短路径的子路径也是最短路径:从vi经过vj到vk的最短路必须要经过的子路径vj到vk的最短路和子路径vi到vj的最短路,就是说两个子路径必须都是最短路,他们之和才有可能是最短路径。

其次是重叠子问题:

如果我们要求从vi到vz的最短路径,那么我们也要求出从vi到vj,直至 vy的最短路径,每一次求解的过程中都会出现重叠的子问题。比如,求从vi经过vj到vk的最短路,就需要先求得vi到vj的最短路,这就是vi到vk的子问题,而且这个子问题不只出现在当前vi

到vk点最短路的问题中,也会出现在vi到vj最短路的问题中,他们的子问题就是重叠的。

由此我们得到动态规划的动态转移方程:

dist[eage[j].v] = min(dist[eage[j].v] ,dist[eage[j].u] + eage[j].w)

eage[j].v表示的是v点,eage[j].u表示的是u点,eage[j].w表示从v到u的距离;

而dist[]数组表示从源点s到当前点的最短路径长度。

这就是松弛操作,而证明如下:

假设从源点s到定点v的最短路径是dist[v],加入存在从源点一条经过点u到达v的路径dist[j]+w,并且dist[j]+w比dist[v]更短,这和最短路径相矛盾,那么要对最短路径进行更新。

以下是bellman-ford的表述:

数据结构:

struct {        
        int u, v;
        int w;
        }eage[MAX_SIZEE] = {
  0};
int dist[MAX_SIZEN];//访问记录

算法:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值