族谱网 头条 人物百科

贝尔曼-福特算法

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:556
转发:0
评论:0
算法在这个图中,假设A是起点,并且边以最坏的顺序处理,从右到左,需要|V|−1步或4次计算路径长度。相反地,若边以最优顺序处理,从左到右,算法只需要在一次遍历内完成。贝尔曼-福特算法与迪科斯彻算法类似,都以松弛操作为基础,即估计的最短路径值渐渐地被更加准确的值替代,直至得到最优解。在两个算法中,计算时每个边之间的估计距离值都比真实值大,并且被新找到路径的最小长度替代。然而,迪科斯彻算法以贪心法选取未被处理的具有最小权值的节点,然后对其的出边进行松弛操作;而贝尔曼-福特算法简单地对所有边进行松弛操作,共|V|−1次,其中|V|是图的点的数量。在重复地计算中,已计算得到正确的距离的边的数量不断增加,直到所有边都计算得到了正确的路径。这样的策略使得贝尔曼-福特算法比迪科斯彻算法适用于更多种类的输入。贝尔曼-福特算法的最多运行O(|V|·|E|)次,|V|和|E|分别是节点和边的数量)。伪代码表示...

算法

贝尔曼-福特算法

在这个图中,假设A是起点,并且边以最坏的顺序处理,从右到左,需要|V|−1步或4次计算路径长度。相反地,若边以最优顺序处理,从左到右,算法只需要在一次遍历内完成。

贝尔曼-福特算法与迪科斯彻算法类似,都以松弛操作为基础,即估计的最短路径值渐渐地被更加准确的值替代,直至得到最优解。在两个算法中,计算时每个边之间的估计距离值都比真实值大,并且被新找到路径的最小长度替代。 然而,迪科斯彻算法以贪心法选取未被处理的具有最小权值的节点,然后对其的出边进行松弛操作;而贝尔曼-福特算法简单地对所有边进行松弛操作,共| V | − 1次,其中 | V |是图的点的数量。在重复地计算中,已计算得到正确的距离的边的数量不断增加,直到所有边都计算得到了正确的路径。这样的策略使得贝尔曼-福特算法比迪科斯彻算法适用于更多种类的输入。

贝尔曼-福特算法的最多运行O(| V |·| E |)次,| V |和| E |分别是节点和边的数量)。

伪代码表示

原理

松弛

每次松弛操作实际上是对相邻节点的访问,第 n {\displaystyle n} 次松弛操作保证了所有深度为n的路径最短。由于图的最短路径最长不会经过超过 V − − --> 1 {\displaystyle V-1} 条边,所以可知贝尔曼-福特算法所得为最短路径。

负边权操作

与迪科斯彻算法不同的是,迪科斯彻算法的基本操作“拓展”是在深度上寻路,而“松弛”操作则是在广度上寻路,这就确定了贝尔曼-福特算法可以对负边进行操作而不会影响结果。

负权环判定

因为负权环可以无限制的降低总花费,所以如果发现第 n {\displaystyle n} 次操作仍可降低花销,就一定存在负权环。

优化

循环的提前跳出

在实际操作中,贝尔曼-福特算法经常会在未达到V-1次前就出解,V-1其实是最大值。于是可以在循环中设置判定,在某次循环不再进行松弛时,直接退出循环,进行负权环判定。

队列优化

求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm。 SPFA算法是西南交通大学段凡丁于1994年发表的。 松弛操作必定只会发生在最短路径前导节点松弛成功过的节点上,用一个队列记录松弛过的节点,可以避免了冗余计算。复杂度可以降低到O(kE),k是个比较小的系数(并且在绝大多数的图中,k<=2,然而在一些精心构造的图中可能会上升到很高)

Begininitialize-single-source(G,s);initialize-queue(Q);enqueue(Q,s);whilenotempty(Q)dobeginu:=dequeue(Q);foreachv∈adj[u]dobegintmp:=d[v];relax(u,v);if(tmpd[v])and(notvinQ)thenenqueue(Q,v);end;end;End;

样例

例:V={v1,v2,v3,v4} E={(v1,v2),(v1,v3),(v2,v4),(v4,v3)} weight(v1,v2)=-1 weight(v1,v3)=3 weight(v2,v4)=3 weight(v4,v3)=-1

运行如表: D:Dist[v],P:Pred[v]

参考文献

^


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 贝尔曼方程
动态规划中的解析概念想了解贝尔曼方程,要先了解许多相关概念。首先,任何最佳化问题都有目标:旅行时间最小化、成本最小化、利润最大化、效用最大化等。用来描述目标的数学函数就称为目标函数。动态规划将多期规划问题转为不同时间点上较简单的步骤,因此,它需要追踪决策背景情况随时间的变化。作正确决策所需要当前情况的资讯被称作是“状态(State)”(贝尔曼,1957,Ch.III.2)。例如,为了决定每个时间要花多少钱,人们必须要知道他们初始财富的量,此例中财富就是一种“状态变数(StateVariables)”,或简称“状态(State)”,当然也可能还有其他的种类。从任意时点上所挑选以操作的变数通常称为“控制变数(ControlVariables)”,或简称“控制(Control)”(控制理论中描述输入的变数)。例如给定现在所具有的财富(状态),人们便可以用以决定当下的消费(控制变数)。挑选当下的控...
· 罗贝尔·舒曼
生平罗贝尔·舒曼的父亲为法国公民,出生于与卢森堡市,母语为卢森堡语。1871年随着洛林被德意志帝国兼并,他的父亲成为德国公民。罗贝尔·舒曼的母亲出生于卢森堡,和他的父亲结婚后取得德国国籍。虽然罗贝尔·舒曼在卢森堡市出生,但他出生时的国籍是德国,母语是卢森堡语。德语是他的第一外语,而法语直到他上学之后才开始学习,因此他一生当中说法语时都带有口音。1896年-1903年,罗贝尔·舒曼在卢森堡上文科高中,并在梅斯取得高中毕业证书。1904年他开始在波恩大学学习法律,后来又相继在慕尼黑、柏林和斯特拉斯堡学习。1908年他在梅斯通过了德国第一国家考试(在德国要成为律师必须进行两次国家考试,两次考试期间为律师实习期)并在那里进行律师实习。1910年以24岁的年龄在柏林取得法学的博士学位。1912年他通过第二国家考试并在梅斯成为一名律师。政治生涯罗贝尔·舒曼(政治家)之墓第一次世界大战中罗贝尔·舒曼担任...
· 理查德·贝尔曼
外部链接IEEEHistoryCenter-Legacies(英文)
· 亨利·甘贝尔-班纳曼
行业时间线亨利·甘贝尔-班纳曼亨利·甘贝尔-班纳曼爵士,GCB(SirHenryCampbell-Bannerman,1836年9月7日-1908年4月22日),英国自由党政治家,1905年至1908年出任英国首相,他是历史上首位正式被官方称为“首相”的第一财政大臣。人物生平1836年9月7日出生于在苏格兰的格拉斯哥城。就读于格拉斯哥大学及剑桥大学三一学院。出1868年,他首次获选为下议院议员;历任陆军部财务大臣(1871年-1874年和1880年-1882年),海军部政务次官兼财政大臣和下院发言人(1882-1884)。1884年-1885年坎贝尔担任爱尔兰首席大臣。1886年及1892-95年担任陆军大臣。1895年6月21日,他说服维多利亚女王的堂兄第二代剑桥公爵从武装部队总司令的职务上引退。这位公爵在其39年的任期内,阻止军队的改组。女王认识到这一变得的必要性,封亨利·甘贝尔-班纳...
· 阿贝尔·塔斯曼
生平他生于荷兰格罗宁根省,在荷兰东印度公司的资助下,他于1642年和1644年进行了两次成功的远航,发现了塔斯马尼亚岛、新西兰、汤加和斐济。他在17世纪30年代受雇于荷兰东印度公司,在巴达维亚至摩鹿加群岛的航线上服务。1638年,他将妻子也接到巴达维亚,定居在东方。在其后的数年里,他去过日本和巴邻旁。1642年,他受命去寻找“失落的南方大陆”,11月24日,他发现了塔斯马尼亚岛,并以荷兰东印度总督安东尼·范·迪门之名命名其为“范迪门地”。12月13日,他抵达新西兰南岛,稍作探索后,他误以为这是南美洲的南端,于是继续北上,12月18日,他的船队遭到毛利人的袭击,损失了4名水手。1643年1月21日,他发现了汤加,然后回航,途中发现了斐济。他经过新几内亚岛后,于6月15日回到巴达维亚。在1644年的第二次航行中,塔斯曼穿过了托雷斯海峡,但是他没有意识到澳大利亚大陆就在南方,错过了发现新大陆的机...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信