700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 算法设计与分析课程复习笔记11——单源最短路径

算法设计与分析课程复习笔记11——单源最短路径

时间:2020-11-09 13:17:20

相关推荐

算法设计与分析课程复习笔记11——单源最短路径

算法设计与分析课程复习笔记11——单源最短路径

单源最短路径

最短路径问题

输入:有权有向图G=(V,E)

路径p={v 0 , v 1 , . . . , v k v_0, v_1, . . . , v_k v0​,v1​,...,vk​}的权:

∑ i = 1 k w ( v i − 1 , v i ) \displaystyle \sum_{i=1}^kw(v_{i-1},v_i) i=1∑k​w(vi−1​,vi​)

最短路径的权:

δ ( u , v ) = { m i n ( w ( p ) ) : u → v , i f t h e r e e x i s t a p a t h f r o m u t o v ∞ , o t h e r w i s e δ(u,v)=\left\{ \begin{aligned} min(w(p)):u → v,ifthereexistapathfromutov\\ \infty,otherwise\\ \end{aligned} \right. δ(u,v)={min(w(p)):u→v,ifthereexistapathfromutov∞,otherwise​

最短路径的不同形式

单源最短路径

从给定的源顶点s到图中其他顶点v ∈ V的最短路径单目的地最短路径

图中的顶点v ∈ V到某个给定的目的顶点t的最短路径

反向图,演变为单源最短路径问题单点对最短路径问题

给定两顶点u和v ,求u到v的最短路径全对点最短路径问题

图中所有点对之间的最短距离

最短路径的优化基础

给定G=(V,E)

权函数

v 1 v_1 v1​到 v k v_k vk​的最短路径p

p的部分路径 p i j p_{ij} pij​

那么要求:p的部分路径 p i j p_{ij} pij​也是最短路径

权值为负的边

负权边可能形成负权回路,如果从源顶点s能够抵达负权回路的顶点v,则有: w(s, v) = - ∞ \infty ∞

回路

最短路径可否有回路?不可以!!!

负权回路将导致:w(s, v) = - ∞ \infty ∞

正权回路显然不能加入,因为如有移除,将产生更短的路径

零权回路也不能加入,因为移除不会对最短路径的权产生任何影响

初始化算法

InitializeSingleSource(V,s)

for each v ∈ V

do d[v] ← ∞ \infty ∞

π[v] = NIL

d[s] ← 0

所有的最短路径算法都以初始化开始

缩短法

所谓对边(u, v)的缩短,即是检查能否通过顶点u,改善已有的到达v的最短路径

Relax(u,v,w)

if d[v] > d[u] + w(u,v)

then d[v] ← d[u] + w(u,v)

π[v] ← u

所有单源最短路径算法,从初始化算法开始,然后是缩短算法

算法之间的差别在于缩短算法的执行顺序和次数

Bellman-Ford算法

单源最短路径问题,允许负权值边,

返回值:如果从源顶点s没有可抵达的负权值回路,返回‘真’,其余的返回‘假’,无解

思想:遍历所有的边|V – 1|次,每次对每条边执行一次缩短运算

BellmanFord

InitializeSingleSource(V,s) Θ ( V ) Θ(V) Θ(V)

for i ← 1 to |V|-1 O ( V ) O(V) O(V)

do for each edge (u,v) ∈ E O ( E ) O(E) O(E)

do Relax(u,v,w)

for each edge (u,v) ∈ E O ( E ) O(E) O(E)

do if d[v] > d[u] + w(u,v)

then return FALSE

return TRUE

运行开销: O ( V E ) O(VE) O(VE)

最短路径特性

三角不等式

δ(s, v) ≤ δ(s, u) + w(u, v)

-上限特性

对于任何顶点v, d[v] ≥ δ(s, v)成立

一旦d[v] = δ(s, v)成立, d[v] 便不再改变

无通路特性

如果不存在从s到v的通路,则有d[v] = ∞收敛性

如果s~u → v 是一条最短路径,在对边(u, v)进行缩短操作之前的任何时刻有d[u] = δ(s, u), 那么在对边(u, v)进行缩短操作之后的任何时刻有d[v] = δ(s, v)路径松弛特性

p = {v 0 , v 1 , . . . , v k v_0, v_1, . . . , v_k v0​,v1​,...,vk​} 是从源顶点v 0 _0 0​到 v k v_k vk​的最短路径,如果缩短操作是按照( v 0 v_0 v0​, v 1 v_1 v1​), ( v 1 v_1 v1​, v 2 v_2 v2​), . . . , ( v k − 1 v_{k-1} vk−1​, v k v_k vk​)进行的,即使其中有其他缩短操作穿插,d[ v k v_k vk​ ] = δ(s, v k v_k vk​)成立

DAG的单源最短路径

思想:

对图进行拓扑排序

依据拓扑排序对边进行缩短操作

DGA中没有负权值回路, 因此存在最短路径

DAG-SHORTEST-PATHS(G,w,s)

topologically sort the vertices of G(拓扑排序) Θ ( V + E ) Θ(V+E) Θ(V+E)

InitializeSingleSource(V,s)(初始化) Θ ( V ) Θ(V) Θ(V)

for each vertex u, taken in topologically sorted order(依据拓扑排序顶点顺序)

do for each vertex v ∈ Adj[u]

do Relax(u,v,w)

运行开销: Θ ( V + E ) Θ(V+E) Θ(V+E)

Dijkstra算法

单源最短路径,不存在负权值边界两类顶点的集合,S:集合中顶点的最短路径已经确定,Q:V-S,极小优先队列,Q中的值是最短路径的估计重复的从Q中选择具有最短估计距离的顶点进行处理

Dijikstra(G,w,s)

InitializeSingleSource(V,s)(初始化)

S ← 空集

Q ← V[G]

while Q ≠ 空集

u ← Extract-min(Q)

S ← S ∪ {u}

for each vertex v ∈ Adj[u]

do Relax(u,v,w)

参考:任课教师邱德红教授的课件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。