切割与松弛

来源:互联网 发布:sql select 表名 编辑:程序博客网 时间:2024/04/27 15:42

参考《算法导论》

在求图的最小生成树是会用到与切割相关的性质,而松弛操作是求单源最短路径中一个必不可少的步骤。

无向图G =V, S)的一个切割(S, V—S是集合V的一个划分,如下图所示,如果一条边u, vE的一个端点位于集合S,另一个端点位于结合V—S,则称该条边横跨切割(S, V—S)。如果结合A中不存在横跨该切割的边,则称该切割尊重集合A。在横跨一个切割的所有边中,权重最小的边称为轻量级边(轻量级边可能不是唯一)。一般的,如果一条边是满足某个性质的所有边中权重最小的,则称该条边是满足给定性质的一条轻量级边。


松弛操作

对于每个结点v来说,我们维持一个属性v.d,用来记录从源结点s到结点v的最短路径权重的上界。我们称v.dsv最短路径估计(shortest-path estimate。下面伪代码对最短路径估计和前驱结点进行初始化:

对一条边(u, v)松弛的过程为:首先测试一下是否可以对从sv的最短路径进行改善。测试的方法是,将从结点s到结点u之间的最短路径距离加上结点uv之间的边权重,并与当前的sv的最短路径估计进行比较,如果前者更小,则对v.dv.π进行更新。松弛操作可能降低最短路径的估计值v.d并更新v的前驱属性v.π。下面伪代码对边(u, v)经行松弛操作:


0 0