算法设计与分析课程复习笔记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, if there exist a path from u to v\\ \infty, otherwise\\ \end{aligned} \right. δ(u,v)={min(w(p)):u→v, if there exist a path from u to v∞, 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)


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

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

  1. 算法导论-上课笔记11:单源最短路径

    文章目录 0 前言 0.1 最短路径的几个变体 0.2 最短路径的最优子结构 0.3 负权重的边 0.4 环路 0.5 最短路径的表示 0.6 松弛操作 0.7 最短路径和松弛操作的性质 1 Bell ...

  2. 算法设计与分析考前复习

    算法设计与分析考前复习 qiwang的NOJ系统在考前一天崩了,强烈建议开发新OJ 另外,由于以下这些题是我上完数电实验用了下午和晚上时间写的,可能会出一些错. 分治法复习 二分查找 描述 给定一个单 ...

  3. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  4. 计算机算法课程论文设计与实现,算法设计与分析课程论文

    算法设计与分析课程论文 "卓越工程师教育培养计划"(简称卓越计划)旨在培养一批创新能力强.适应经济社会发展需要的高质量工程技术人才.在南通大学计算机科学与技术学院制定的软件工程专业 ...

  5. 软件算法设计与分析 期中复习

    软件算法设计与分析 期中复习 第四章 蛮力法 蛮力法/多项式求值 最近点对问题 蛮力法的优缺点 旅行推销商问题 背包问题 分配问题 穷举法特点 第五章 分治法 5.1 分治法的基本思想 5.2 寻找最 ...

  6. 算法设计与分析 课程设计之N皇后问题

    题目 N皇后回溯法求解空间 目的要求 目的: 1.用学到的书本知识解决实际问题的能力: 2.锻炼实际工作所需要的动手能力: 3.加强对数据结构和算法的应用: 4.锻炼自己以科学理论和工程上能力的技术, ...

  7. 算法设计与分析期末复习不挂科

    算法的基本概念 算法概念 通俗讲:算法是解决问题的一种方法或一个过程 严格讲:算法是解某一特定问题的一组有穷规则的集合 且满足以下性质: 有限性:算法在执行有限步之后必须终止 确定性:算法的每一个步骤 ...

  8. 算法设计与分析--期末复习重点总结

    目录 一.算法概述 1.算法的定义与特性 2.数学证明法 3.算法复杂性分析方法 4.渐进分析 二.递归与分治策略 1.递归概念 2.递归算法设计示例 3.递归算法分析 4.分治基本思想 5.分治算法 ...

  9. 哈工大2019年春算法设计与分析期末复习

    本文原载于我的博客,地址:https://blog.guoziyang.top/archives/22/ 第二章 算法分析的数学基础 2.1 复杂性函数的阶 阶为复杂性函数的主导项. 如函数 T ( ...

最新文章

  1. 《与编码人员一起工作》作者访谈
  2. python读取excel-Python Pandas读取修改excel操作攻略
  3. oracle数据库的net manager配置监听(插图)
  4. Impala介绍,Impala架构,Impala安装,impala Shell ,分区创建,refresh,load数据,获取数据的元数据
  5. 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
  6. java实现红包要多少钱_java实现红包的分配算法
  7. u-boot分析(八)----串口初始化
  8. 分支程序设计02 - 零基础入门学习C语言11
  9. 桌面上的Flutter:Electron又多了个对手
  10. w10安装ubuntu_Windows10安装ubuntu18.04双系统教程
  11. JDBC12 ORM01 Object[]存放一条记录
  12. 单片机音乐倒数计时器c语言,基于单片机音乐倒数计时器设计.doc
  13. 耦合矩阵 matlab,耦合矩阵变换(化简)的问题
  14. Linux Docker镜像上传阿里云和网络配置
  15. PS零基础学习教程(一)
  16. Java虚拟机(JVM)面试题(2022年总结最全面的面试题!!!)
  17. kd树 python实现_Python - KDTree 实现
  18. 微信小程序:小程序内用户帐号登录规范调整和优化建议
  19. git revert回滚merge提交时报错(commit xxx is a merge but no -m option )
  20. linux shell 未找到命令,未找到linux问题setenv命令(linux issue setenv command not found)

热门文章

  1. 微软官方安装U盘启动盘制作方法教程
  2. Android开发系统应用程序
  3. 机器视觉(七):图像分割
  4. WAV 文件格式分析
  5. Android-PickerView的简单封装与使用
  6. 桌面不显示IE浏览器图标
  7. e1000网卡驱动小结
  8. python打印日历_Python实战练习——打印日历教程
  9. PPP概念股一览 PPP概念股盈利预测
  10. java jsf教程_JSF入门教程