维基百科,自由的百科全书
类
数据结构
贝尔曼·福特
清单
相关话题
的Bellman-Ford算法是一种,其计算从单一来源到所有其他顶点的。对于相同的问题, 它比慢,但用途更多,因为它能够处理某些边权重为负数的图形。该算法最初由Alfonso Shimbel()提出,但取而代之的是分别由和分别在和年发布的。 也在1957年发布了相同的算法,因此有时也称为Bellman-Ford-Moore算法。
在图形的各种应用中发现了负边缘权重,因此该算法很有用。 如果图形包含从源头可以到达的“负循环”(即边的总和为负值的),则没有最便宜的路径:在负循环上有点的任何路径都可以绕负周期再,使价格更便宜。在这种情况下,Bellman-Ford算法可以检测并报告负循环。
引理。在我重复for循环之后,
如果Distance(u)不是无穷大,则它等于从s到u的某些路径的长度;和
如果存在从s到u的路径(最多i个边缘),那么Distance(u)最多是从s到u的最多i个边缘的最短路径的长度。
证明。对于异步的基本情况,考虑i=0
和之前的那一刻为首次执行循环。然后,对于源顶点source.distance = 0
,这是正确的。对于其他顶点u,这也是正确的,因为从源到u的路径都不存在0条边。 u.distance =``
infinity
对于归纳案例,我们首先证明第一部分。考虑一下顶点距离更新为的时刻 v.distance := u.distance + uv.weight
。通过归纳假设,u.distance
是从源到u的某些路径的长度。然后u.distance + uv.weight
是从源到v的路径的长度,该路径的长度沿着从源到u的路径 ,然后到v。
对于第二部分,请考虑从源到v的最短路径P(可能有不止一条),最多具有i个边缘。令u为该路径上v之前的最后一个顶点。然后,从路径的一部分来源,以ü是从最短路径源到ü至多I-1的边缘,因为如果它不是,那么就必须有一些严格的短路径源到ü最多与I- 1条边,然后我们可以将边uv附加到此路径,以获得一条最多具有i的边界严格小于P-矛盾。通过归纳假设,u.distance
在i -1迭代之后,最多是该路径从源到u的长度。因此,uv.weight + u.distance
最大为P的长度。在第i 次迭代中,v.distance
与进行比较uv.weight + u.distance
,如果uv.weight + u.distance
较小,则设置为等于。因此,在i次迭代之后,v.distance
最多为P的长度,即,从源到v的最短路径的长度最多为i个边缘。
如果没有负权重循环,则每个最短路径最多会访问每个顶点一次,因此在步骤3中无法进行进一步的改进。相反,假设无法进行任何改进。然后对于顶点v [0],...,v [ k -1]的任何循环,
v[i].distance <= v[i-1 (mod k)].distance + v[i-1 (mod k)]v[i].weight
围绕循环进行总结,v [ i ] .distance和v [ i -1(mod k)]。distance项抵消,从而使
0 <= sum from 1 to k of v[i-1 (mod k)]v[i].weight
即,每个周期的权重均为非负数。
每个节点计算自身与AS中所有其他节点之间的距离,并将此信息存储为表格。
每个节点将其表发送到所有相邻节点。
当节点从其邻居接收到距离表时,它会计算到所有其他节点的最短路径,并更新其自己的表以反映所有更改。
在这种情况下,Bellman-Ford算法的主要缺点如下:
它的伸缩性不好。
通过观察以下事实,可以在实践中(尽管不是在最坏的情况下)改进Bellman-Ford算法:如果算法主循环的迭代在不进行任何更改的情况下终止,则可以立即终止该算法,因为随后的迭代将不再进行任何更改。在这种提前终止条件下,在某些情况下,主循环使用的数量可能少于| |。V | − 1次迭代,即使算法的最坏情况保持不变。
Shimbel,A.(1955年)。通信网络中的结构。信息网络研讨会论文集。纽约,纽约:布鲁克林理工学院的理工出版社。第199–203页。
(针对加权有向图)
{\ displaystyle \ Theta(| V || E |)}
{\ displaystyle \ Theta(| E |)}
{\ displaystyle \ Theta(| V |)}
和
在此示例图中,假设A是源,并且以从右到左的最差顺序处理边缘,则需要使用| V | -1或4次迭代,以使距离估计收敛。相反,如果按从左到右的最佳顺序处理边缘,则算法将在一次迭代中收敛。
像一样,Bellman-Ford通过,其中将正确距离的近似值替换为更好的近似值,直到最终找到解。在这两种算法中,到每个顶点的近似距离始终是真实距离的高估,并被其旧值的最小值和新找到的路径的长度所替代。但是,Dijkstra的算法使用来选择尚未处理的最接近的顶点,并在其所有出站边缘执行此松弛过程。相比之下,Bellman-Ford算法只是放松所有边缘,然后执行此操作{\ displaystyle | V | -1} 时间,在哪里 {\ displaystyle | V |}是图中的顶点数。在每个重复中,具有正确计算出的距离的顶点数量会增加,由此得出的结论是所有顶点最终都将具有正确的距离。与Dijkstra相比,此方法允许将Bellman-Ford算法应用于更广泛的输入类别。
贝尔曼-福特参加 {\ displaystyle O(| V | \ cdot | E |)} ,地点{\ displaystyle | V |} 和 {\ displaystyle | E |} 分别是顶点和边的数量。
简而言之,该算法将到源的距离初始化为0,将所有其他节点的距离初始化为无穷大。然后,对于所有边缘,如果可以通过抓住边缘来缩短到目的地的距离,则该距离将更新为新的较低值。在每次迭代中我其边缘扫描时,算法找到至多长度的所有最短路径我边缘(和可能的一些路径长于我边缘)。由于没有循环的可能的最长路径是{\ displaystyle | V | -1} 边缘,必须扫描边缘 {\ displaystyle | V | -1}时间以确保找到所有节点的最短路径。对所有边缘进行最终扫描,如果更新了任何距离,则为长度路径{\ displaystyle | V |} 已发现只有在图形中至少存在一个负循环时才会出现边沿。
本节未任何。请通过帮助。未采购的材料可能受到挑战并被。查找来源: – · · · · (2019年3月)()
该算法的正确性可以通过:
当使用该算法查找最短路径时,存在负循环是一个问题,从而阻止了该算法找到正确的答案。但是,由于它会在找到负循环时终止,因此Bellman-Ford算法可用于寻求该目标的应用程序,例如在分析中的技术中。
Bellman-Ford算法的分布式变体用于,例如(RIP)。该算法是分布式的,因为它涉及的多个节点(路由器),是ISP通常拥有的IP网络的集合。它包括以下步骤:
由于更新是逐节点传播的,因此无法快速反映变化。
如果链路或节点故障使某个节点无法从其他一组节点到达某个节点,则,这些节点可能会永远花时间逐渐增加其对与节点的距离的估计,并且与此同时可能存在路由环路。
对没有负权重循环的图描述了Bellman-Ford算法的另外两个改进。再次,虽然在实践中使算法更快,但他们并没有改变其算法。{\ displaystyle O(| V | \ cdot | E |)}最坏的情况是时间限制。他的第一项改进减少了算法每次迭代中需要执行的松弛步骤的数量。如果顶点v的距离值自上次松弛v以来没有变化,则无需再次使v之外的边缘松弛。这样,随着具有正确距离值的顶点数量的增加,在每次迭代中需要放松的输出边缘的数量会减少,从而为节省了时间常数。
颜的第二个改进是首先在所有顶点上分配一些任意的线性顺序,然后将所有边的集合划分为两个子集。所述第一子集,ê ˚F,包含所有边缘(v 我,v Ĵ),使得我 < Ĵ ; 第二个E b包含边(v i,v j),使得i > j。每个顶点按v 1,v 2,...,v |的顺序访问。V |,从E f的那个顶点放宽每个输出边缘。然后按v | |的顺序访问每个顶点。V | ,v | V | −1,...,v 1,从E b中的那个顶点放宽每个输出边缘。在第一个迭代之后,算法主循环的每次迭代都会在其松弛距离与正确的最短路径距离匹配的一组边缘中至少添加两个边缘:一个来自E f,一个来自E b。此修改从|减少了算法主循环的最坏情况迭代次数。V| − 1至{\ displaystyle | V | / 2}。
另一项改进是用代替了日元第二次改进中所用顶点的任意线性顺序。这种变化使Yen的改进变得最糟(最短路径的边缘在两个子集E f和E b之间严格交替)极不可能发生。使用随机排列的顶点顺序,主循环中所需的迭代次数最多为{\ displaystyle | V | / 3}。
在中国,还增加了一个先入先出队列的Bellman-Ford算法,被称为算法,由爱德华·摩尔在1959年,1994年出版,重新发现了Fanding段,深受谁参加学生 [ ] 和。
^
。
。
Cormen等人,第二版,问题24-1,第614-615页。
^ 见塞奇威克的为算法。,第4版,演习5和12(检索二○一三年一月三十○日)。
Duan, Fanding (1994), , Journal of Southwest Jiaotong University, 29 (2): 207–212
(1958)。“关于路由问题”。应用数学季刊。16:87-90。。
(1956年8月14日)。。论文P-923。加利福尼亚州圣莫尼卡:兰德公司。
(1959)。穿过迷宫的最短路径。程序 国际交流。座谈会。转换理论,1957年,第二部分。马萨诸塞州剑桥市:哈佛大学。按。第285–292页。。
颜金Y(1970)。“在通用网络中找到从所有源节点到给定目的地的最短路径的算法”。应用数学季刊。27:526–530。。
密西根州班尼斯特;(2012年)。 (PDF)的。分析算法和组合学(ANALCO12),日本京都。第41–47页。:。:。
Bang-Jensen,Jørgen; 古丁,格雷戈里(2000)。“第2.3.4节:Bellman-Ford-Moore算法”。(第一版)。 。
Schrijver,Alexander(2005)。(PDF)。离散优化手册。爱思唯尔:1-68。
; ; 。麻省理工学院出版社和麦格劳-希尔。, 第二版。麻省理工学院出版社和麦格劳-希尔,2001年。第24.1节:Bellman-Ford算法,第588-592页。问题24-1,第614–615页。第三版。麻省理工学院出版社,2009年。。第24.1节:Bellman-Ford算法,第651-655页。
Heineman,乔治·T。加里·波利斯(Pollice,Gary);斯坦利·瑟尔科(2008)。“第6章:图形算法”。简而言之的算法。。第160–164页。 。
;(2006)。算法设计。纽约:培生教育有限公司
(2002)。“第21.7节:负边权重”。(第3版)。 。(内容存档于2008-05-31)。检索2007-05-28。
: