一、相关概念及性质
1、环路
负环路:将环路的所有权重相加为负值。
我们要说明的是:对于我们所讨论的最短路径问题中,最短路径上一定不会存在环路。因此,对于图,每条最短路径至多存在
条边。
解释:在最短路径问题中,我们所讨论的图均不含负环路(严谨的说,不含从源点可达的负环路)。这是因为,如果存在负环路,我们总可以通过多次经过该负环路来使得路径长度不断减少,这时最短路径是不存在的,于是我们不考虑负环路情况。所以最短路径上肯定不会存在负环路。如果路径上存在非负环路,那么我们总可以通过去掉该环路使得路径长度减少。总而言之,求得的最短路径上一定不会存在环路。
2、松弛操作(relaxation)
对于每个结点使用
保存其前驱结点,
保存从源结点
到
的最短路径估计。任何算法结束时,
保存
最短路径上的前驱结点,
保存从源结点
到
的最短路径的长度。
初始化:
时间复杂度:。
对边的松弛操作:
时间复杂度:。
我们所讨论的算法都需要使用如上初始化和松弛操作。算法之间的不同之处在于:对每条边进行松弛的次数和次序不同。Dijkstra算法和用于有向无环图的最短路径算法对每条边松弛一次,Bellman-Ford算法则对每条边松弛次。
3、引理及性质
我们所使用的算法正确性依赖于如下性质及定理。
引理(最短路径的子路径也是最短路径):设
为从结点
到结点
的一条最短路径,并且对于任意
,设
为路径
中从结点
到
的子路径。那么
是从结点
到
的一条最短路径。
三角不等式性质:对于任何边
,有