HAERBIN ENGINEERING UNIVERSITY
现代通信网络基础
Bellman-Ford 算法
哈尔滨工程大学
通信六班
2017
1
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
贝尔曼-福特算法(Bellman-Ford)是由
Richard Bellman 和 Lester Ford 创立的,求解
单源最短路径问题 的一种算法。有时候这种
算法也被称为 Moore-BellmanFord 算法,因
Edward F. Moore 也为这个算法的发展做出了
贡献。为了能够求解边上带有负权值的单源最
短路径问题,Bellman(贝尔曼)和Ford(福特)提
出了从源点逐次途经其他顶点,以缩短到达终
点的最短路径长度的方法。
2
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
基本内容:
– 从给定的源结点找出一条最短路径,该最短路
径是从所有最多只含有一条链路的路径中选择出
来的
– 接着再找出条件为所有路径最多只含两条链路
的最短路径,依此类推
3
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
Bellman-Ford 算法可以用公式来表示
首先做以下定义:
–s= 源结点
–w(i,j)= 结点i 到结点j 之间的链路代价。
w(i,i)=0;两个结点不直接连接时,w(i,j)=∞;
–h= 在算法目前阶段中的路径具有的最大链路数
–Lh(n)= 在不多于h 条链路的条件下,从结点s 到结
点n 的最小代价路径的代价
4
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
Step 1. 初始化
– L0(n) = ∞, 对所有n ≠ s
– Lh(s) = 0, 对所有h
Step 2. 更新
对每个后继的h ≥ 0
–对每个n ≠ s, 计算: Lh+1(n)=minj[Lh(j)+w(j,n)]
–将n 与前一次处理的结点j 相连接,以获取最小值,
并删除在以前循环时形成n 与任何前次处理结点之间的
链接。从s 到n 的路径以从j 到n 的路径结束
5
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
Step 3.重复
–不断地重复第2步,当h=K时,并且对于每个
目的结点n,算法将从s到n的长度为K+1的可能
路径与前一次循环结束时得到的路径相比较。
如果前次更短的路径具有较小的代价,那么将
仍然保持前次的路径,否则s和n之间定义一条
长度为K+1的新路径。
–这条路径含有长度为K的从s到某个结点j的路
径,再加上从结点j到结点n的直接一跳
6
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
h=1时
连接1-2、1-3 和 1-4
处理的结点:2,3,4
建立路径:1-2,1-3和1-4
7
HAERBIN ENGINEERING UNIVERSITY
Bellman-Ford 算法
h=2时
连接1-3-2和1-4-2,1-2-3和1-4-3,1-2-4和1-3-4 1-
3-5和1-4-5,以及1-3-6
考察结点1到结点2,3,4,5,6的最小代价路径
本次处理的结点:3,5,6
修改/建立路径1-4-3,1-4-5和1-3-6
8