在单源最短路径的求解算法中,往往涉及松弛操作,而松弛操作是证明单源最短路径算法的基石。
- 相关概念
最短路径:假设从结点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的最短路径树。