- 5
- 0
- 约4.88千字
- 约 5页
- 2016-02-24 发布于江苏
- 举报
Bellman_ford算法.doc
Bellman-Ford算法思想
Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图 G=(V,E),其源点为s,加权函数 w是 边集 E 的映射。对图G运行Bellman-Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若不存在这样的回路,算法将给出从源点s到 图G的任意顶点v的最短路径d[v]。
Bellman-Ford算法流程分为三个阶段:
(1)??? 初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0;
(2)??? 迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)
(3)??? 检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在 d[v]中。
算法描述如下:
Bellman-Ford(G,w,s) :boolean?? //图G ,边集 函数 w ,s为源点
1??????? for each vertex v ∈ V(G) do??????? //初始化 1阶段
2??????? ????d[v] +∞
3??????? d[s] ←0;???????????????????????????? //1阶段结束
4??????? for i=1 to |v|-1 do?????????????? //2阶段开始,双重循环。
5??????? ???for each edge(u,v) E(G) do //边集数组要用到,穷举每条边。
6??????? ??????If d[v] d[u]+ w(u,v) then????? //松弛判断
7??????? ?????????d[v]=d[u]+w(u,v)?????????????? //松弛操作?? 2阶段结束
8??????? for each edge(u,v) E(G) do
9??????? ????If d[v] d[u]+ w(u,v) then
10??? ????????Exit false
11??? Exit true
下面给出描述性证明:
?? 首先指出,图的任意一条最短路径既不能包含负权回路,也不会包含正权回路,因此它最多包含|v|-1条边。
?? 其次,从源点s可达的所有顶点如果 存在最短路径,则这些最短路径构成一个以s为根的最短路径树。Bellman-Ford算法的迭代松弛操作,实际上就是按顶点距离s的层次,逐层生成这棵最短路径树的过程。
在对每条边进行1遍松弛的时候,生成了从s出发,层次至多为1的那些树枝。也就是说,找到了与s至多有1条边相联的那些顶点的最短路径;对每条边进行第2遍松弛的时候,生成了第2层次的树枝,就是说找到了经过2条边相连的那些顶点的最短路径……。因为最短路径最多只包含|v|-1 条边,所以,只需要循环|v|-1 次。
每实施一次松弛操作,最短路径树上就会有一层顶点达到其最短距离,此后这层顶点的最短距离值就会一直保持不变,不再受后续松弛操作的影响。(但是,每次还要判断松弛,这里浪费了大量的时间,怎么优化?单纯的优化是否可行?)
如果没有负权回路,由于最短路径树的高度最多只能是|v|-1,所以最多经过|v|-1遍松弛操作后,所有从s可达的顶点必将求出最短距离。如果 d[v]仍保持 +∞,则表明从s到v不可达。
如果有负权回路,那么第 |v|-1 遍松弛操作仍然会成功,这时,负权回路上的顶点不会收敛。
改进和优化 ??如果循环n-1次以前已经发现不存在紧边则可以立即终止; Yen氏改进(不降低渐进复杂度);SPFA算法
?
二、???????????? SPFA算法
算法简介
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。 它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边。
算法流程
SPFA对Bellman-Ford算法优化的关键之处在于意识到:只有那些在前一遍松弛中改变了距离估计值的点,才可能引起他们的邻接点的距离估计值的改变。因此,算法大致流程是用一个队列来进行维护,即用一个先进先出的队列来存放被成功松弛的顶点。初始时,源点s入队。当队列不为空时,取出队首顶点,对它的邻接点进行松弛。如果某个邻接点松弛成功,且该邻接点不在队列中,则将其入队。经过有限次的松弛操作后,队列将为空,算法结束。SPFA算法的实现,需要用到一个先进先出的队列 queue 和一个指示顶点是否在队列
您可能关注的文档
最近下载
- 大数据技术融合人力资源管理.docx VIP
- 2026年中国大型广告牌行业市场数据调查、监测研究报告.docx
- 2025年江苏省建筑施工企业主要负责人安全员A证考核考试题库附答案.docx
- 新编语文课程与教学论讲义.docx VIP
- 苏科版数学八年级下册期中测试试卷-含答案02.pdf VIP
- 03-【传统村落保护规划】宁波韩岭古村总体改造方案-DC国际-366页.pdf VIP
- 汽车调光玻璃行业市场前景及投资研究报告:天幕玻璃,国产厂商突破瓶颈,价格下探.pdf VIP
- 金融大数据与人工智能的融合趋势.docx VIP
- 上肢康复训练系统技术参数.docx VIP
- 五年级下册每日计算.pdf VIP
原创力文档

文档评论(0)