从Bellman-Ford算法开始

写在前面

首先这是我的学习记录,尽量写得通俗易懂,但囿于水平有限质量无法保证。
这篇的知识背景是基于松弛技术,至于什么是松弛技术可以看这一篇

Bellman-Ford的逻辑

BELLMAN-FORD(G,w,s)
1 INITIALIZE-SINGLE-SOURSE(G,s)
2 for i<--1 to |V[G]|-1
3	do for each edge(u,v)∈E[G]
4		do RELAX(u,v,w)
5 for each edge(u,v)∈E[G]
6	do if d[v]>d[u]+w(u,v)
7		then return FALSE
8 return TRUE

伪代码清晰明了,但是还是应该做一些解释
第一行,在松弛技术中是初始化,每一个应用松弛技术的代码都要先初始化。
二到四行,是调整最短路径。
五到七行是做检测看看有没有负回路。

Bellman-Ford为什么是有用的

所凭借的依据


引理24.15 路径松弛性质
如果p=<v0,v1,……,vk>是从s=v0到vk的最短路径,而且p的边按照(v0,v1)(v1,v2),……,(vk-1,vk)的顺序进行松弛,那么d[vk]=m(s,vk)。这个性质的保持并不受其他松弛操作的影响,即使他们与p边上的松弛操作混在一起也是一样的。


上面的引理告诉我们,我们的算法的中心任务就是按照顺序去松弛,这是重点。

Bellman-Ford怎么达到这一点的

这里我将举个例子,假设最短路径的节点为序列p,p=<s,v1,v2,v3,v4,…,vk-1,vk>(0<=k<=n-1)(n为节点数)。
首先忽略循环次数仅仅考虑如下的代码。

for each edge(u,v)∈E[G]
	  do RELAX(u,v,w)

在这里插入图片描述
用算法导论的图做演示。
第一次循环(a—>b)因为只有初始节点s的d[s]=0,所以只会松弛t和y,即s可以到达的节点,这两个点一定有一个点是v1,我们完成了第一条边s—>v1的处理,获得了m(s,v1)。
第二次循环,做一次完整代码加入了两个新的节点而且也对之前的节点做了松弛。最重要的就是我们找到了v2,v2一定是x,z其中之一,换言之我们找到了m(v1,v2)。
循环之内的作用现在大概搞清了,即按照顺序寻找最短路劲。但是我们要循环几遍呢,考虑到一条最短路径最多包含全部节点,所以最多会有n-1条路径组成,每次找一条所以n-1次就够了

关于检测

其实从逻辑上可以接受,就是不知道严谨不严谨。关于为什么是对的,算法导论上有反证法直接去看就好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bellman-Ford 算法是一种用于解决带有负权边的单源最短路径问题的算法。它可以应用于各种场景,包括网络路由、电力系统、地理信息系统等等。以下是一些 Bellman-Ford 算法的应用示例: 1. 网络路由:在计算机网络中,Bellman-Ford 算法可以用于计算最短路径,从而决定数据包在网络中的传输路线。它通过收集和更新每个节点的距离向量(distance vector),最终找到从源节点到所有其他节点的最短路径。 2. 电力系统:在电力系统中,Bellman-Ford 算法可以用于计算最短传输线路,以便在电力传输过程中减少能量损耗和成本。通过将电力网络建模为带权有向图,可以使用 Bellman-Ford 算法找到从电源到各个负载节点的最短路径。 3. 地理信息系统:在地理信息系统中,Bellman-Ford 算法可以用于计算两个地点之间的最短路径。通过将地图视为带权图,可以使用 Bellman-Ford 算法找到从起点到终点的最短路径,以便规划导航或路线。 4. 数据包传输:在数据包传输中,Bellman-Ford 算法可以用于选择最佳传输路径。通过考虑每个节点的跳数和延迟,Bellman-Ford 算法可以确定最优路径,以便在网络中传输数据包。 需要注意的是,Bellman-Ford 算法对负权环路不稳定,可能会导致无限循环。因此,在应用 Bellman-Ford 算法时,需要进行环路检测和处理,以确保算法能够正确地终止并给出正确的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值