最短路径问题

问题

给定一个加权有向图G,找出从一个给定源点s到其他各点v的最短路径。

最优子结构

最短路径由最短子路径组成。
在这里插入图片描述证明:
suppose some subpath is not a shortest path
○ There must then exist a shorter subpath
○ Could substitute the shorter subpath for a shorter path
○ But then overall path is not shortest path. Contradiction

最短路径性质

三角不等式在这里插入图片描述

证明:
1)若x在u,v的最短路径上,则取等号;
2)若不在,则假设大于,那么两个小路径相加得到比u、v原最短路径更短的路径,那么这与(u,v)为最短路径相驳,故必不取大于号。
综上,得证。

有负环的图不存在最短路径

在这里插入图片描述
因为一直走负环则总权重越来越小,可不断变小,无法确定最小值,故无最短路径。

Relaxation

在这里插入图片描述

Bellan-ford算法

在这里插入图片描述
时间复杂度:O(VE)
循环|V|-1次,每次对每条边做Relaxation。

Bellan-ford算法的改进思路

在这里插入图片描述
由拓扑排序找出可能的最短路径,即找出可能的路径顺序,进行有意义的迭代relax,减少无意义的迭代。

Dijkstra’s Algorithm

介绍

若图中无负环,则必bellman-ford算法更好。其实对于有向图才有意义。
在这里插入图片描述
● Similar to breadth-first search
■ Grow a tree gradually, advancing from vertices
taken from a queue
● Also similar to Prim’s algorithm for MST
■ Use a priority queue keyed on d[v]
1.初始化所有点的d值即key值为无穷大。
2.当Q不为空,每次取出Q中d值即key最小的点,对他的邻接点进行松弛操作,更新key值,直至Q为空。

时间复杂度

算法的时间复杂度(取决于数据结构):
A: O(E lg V) using binary heap for Q
Can acheive O(V lg V + E) with Fibonacci heaps

迪杰斯特拉复杂度分析:
1)while + ExtractMin: VlgV
2)while + for +Decreasekey: ElgV
3)总: VlgV + ElgV=O(ElgV) (因为:V比E小)

证明算法的正确性

Correctness: we must show that when u is
removed from Q, it has already converged。
证明:
定理:所有未找到最短路径的节点中,键值最小的节点的最短路径值等于键值,并且其最短路径为初始节点到确定其键值的节点再到它。
引理在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此为证明不可能在S集合外有一点y存在于u的最短路径上(du为S外最小值)