在单源最短路径的求解算法中,往往涉及松弛操作,而松弛操作是证明单源最短路径算法的基石。
- 相关概念
最短路径:假设从结点u到结点v的最短路径权重为 δ(u,v) ,那么从结点u到结点v的最短路径定义为任何一条权重 ω(p)=δ(u,v) 的从u到v的路径p。
最短路径估计:对于每个结点v来说,我们维持一个属性v.d,用来记录从源结点s到结点v的最短路径权重的上界,称v.d为s到v的最短路径估计。
前驱结点:对于每个结点v,我们维持一个前驱结点 v.π ,它表示扫描 v.π 结点时发现结点v。
单源最短路径算法进行之前,都必须对最短路径估计和前驱结点进行初始化,伪代码如下:
INITIALIZE-SINGLE-SOURCE(G,s)
for each vertex v \in G.V
v.d=INFTY
v.pi=NIL
s.d=0
结点的v.d属性和
v.π
属性发生变化是通过松弛操作完成的,对边(u,v)在O(1)时间内进行松弛操作的伪代码如下:
RELAX(u,v,w)
if v.d>u.d+w(u,v)
v.d=u.d+w(u,v)
v.pi=u
- 松弛操作的性质
1。 三角不等式性质:对于任何边 (u,v)∈E ,有 δ(s,v)≤δ(s,u)+ω(u,v) 。
2。 上界性质:对于所有结点 v∈V ,我们有 v.d≥δ(s,v) 。一旦 v.d 的取值达到 δ(s,v) ,其值将不再变化。
3。 非路径性质:若从结点s到结点v之间不存在路径,有 v.d=δ(s,v)=∞ 。
4。 收敛性质:设结点 u,v∈V ,如果 s⇝u→v 是图G中的一条最短路径,且在对边(u,v)进行松弛前的任意时间有 u.d=δ(s,u) ,则在之后的所有时间有 v.d=δ(s,v) 。
5。 路径松弛性质:若 p=<v0,v1,...,vk> 是从源结点 s=v0 到结点 vk 的一条路径,且我们对 p 中所进行松弛的次序为(v0,v1),(v1,v2),...,(vk−1,vk) ,则 vk.d=δ(s,vk) 。
6。 前驱子图性质:对于所有结点 v∈V ,一旦 v.d=δ(s,v) ,则前驱子图是一棵根结点为 s <script type="math/tex" id="MathJax-Element-5295">s</script>的最短路径树。