单源最短路径SSSP之松弛操作

本文深入解析单源最短路径(SSSP)算法中的核心概念——松弛操作,通过形象的比喻帮助理解,介绍如何更新两点间的最短路径,以及在不同算法中松弛操作的运用差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单源最短路径SSSP算法中使用了 松弛(relaxation)操作,即更新两点的最短路径

形象的理解:

原来用一根橡皮筋连接a、b两点,现在有一点v到b的距离更短,则用v点替换橡皮筋的a点,使得v、b连接在一起。这样缓解橡皮筋紧绷的压力,使其变得松弛,即松弛操作。

我们规定每个节点都有一个 dist 值,dist[v] 值记录的是从源点可达的顶点v的最短距离,每个节点也都有一个p指针指向他的前驱节点。松弛操作就是去更新 dist 的值。

                                                                                    

源点是节点S,以S点为起点计算到A、B点的最短路径。

节点B的 dist 值为8,表示从源点 S 到 B之前的最短距离是8,而节点A的 dist 值为3,表示从源点 S 到 A 之前的最短距离是3。而当我们发现AB这个边时,以A为父节点,从 A 到 B 的距离比较近 3+2=5,比8要小,所以我们去更新 B 的 dist 值,同时把 B 的前驱节点设置成 A。这个过程就是松弛操作。

松弛操作 伪代码:对边(u,v)进行的松弛操作

每个单源最短路径算法中都会调用INITIALIZE-SINGLE-SOURCE,然后重复对边进行松弛的过程。另外,松弛是改变最短路径和前趋的唯一方式。各个单源最短路径算法间区别在于对每条边进行松弛操作的次数,以及对边执行松弛操作的次序有所不同。在Dijkstra算法以及关于有向无回路图的最短路径算法中,对每条边执行一次松弛操作。在Bellman-Ford算法中,每条边要执行多次松弛操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值