bellman-ford算法
什么是Bellman-Ford算法?
Bellman-Ford,是求解单源最短路经问题的一种算法,由Richard Bellman和莱斯特.福特创立的。它的原理是对图进行|V|-1次松弛操作,得到所有可能的最短路经。其优于Dijkstra的方面是边的权值可以为负数、实现简单,缺点是时间复杂度高,高达O(V*E),V:顶点数,E:边数。但算法可以进行优化,以提高效率。
Bellman-Ford与Dijkstra的相同点:
- 计算时每个边的之间的估计距离值都比真实值大,并且被新找到的路经的最小长度替代。
不同点:
- Dijkstra算法是从源点s出发向外扩,逐个处理相邻的节点,不会去重复处理节点,这样处理会比Bellman-Ford效率更高一点;
- Bellman-Ford算法每次都是从源点s重新出发进行relax操作,共V-1次,V是顶点数;
算法思想 (例子)
- 初始化时把起点s到各个顶点v的距离dist(s->v)设为∞,dist(s->s)设为0;
- 计算最短路经,执行V-1次遍历;
- 对于图中的每条边:如果起点s的距离d加上边的权值w小于终点v的距离d,则更新终点v的距离值d;
- 检测图中是否有负权边形成了环,遍历图中的所有边,计算s至v的距离,如果对于v存在更小的距离,则说明存在环;
Bellman-Ford算法的用途
- 从A出发,是否存在到达各个节点的路经(有计算出值表示可以到达);
- 从A出发,到达各个节点最短路经(时间最少、或者路经最少等);
- 图中是否存在负环路(权重之和为负数);
Leetcode例子
标签:
shortest path
, algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-06-15 ndk build 的时候报错,少了libncurses.so.5