算法导论复习(八)| 基本图算法

文章目录

    • 最小生成树
      • kruskal算法
      • prim算法
    • 单源最短路径
      • 松弛
      • 三角不等式
      • bellman-ford算法
      • dijkstra算法
    • 差分约束
    • 所有结点对的最短路径问题
      • 递归表达式
      • Floyd-Warshall算法
      • johnson算法

权重图:图中的每条边都带有一个权重的图。
权重值通常以权重函数 ω:E→R 给出。
邻接表

  • 权重值ω(u,v)存放在u的邻接链表结点中。

邻接矩阵

  • 邻接矩阵A[u][v] = ω(u,v)。
  • 若(u,v)不是E中的边,A[u][v] =NIL,或∞、0。

最小生成树

算法导论复习(八)| 基本图算法_第1张图片
算法导论复习(八)| 基本图算法_第2张图片
算法导论复习(八)| 基本图算法_第3张图片
算法导论复习(八)| 基本图算法_第4张图片
算法导论复习(八)| 基本图算法_第5张图片

算法导论复习(八)| 基本图算法_第6张图片

kruskal算法

Kruskal算法找安全边的方法:在所有连接森林中两棵不同树的边中,找权重最小的边(u,v)。
算法导论复习(八)| 基本图算法_第7张图片
时间复杂度:O(E lg E)

prim算法

Prim算法的每一步是在连接集合A和A之外的结点的所有边中,选择一条轻量级边加入到A中。所加入的边对于A也是安全的。
Prim算法的基本性质:集合A中的边总是构成一棵树。
算法导论复习(八)| 基本图算法_第8张图片
Prim算法的时间复杂度:O(V lg V +E lg V )=O(E lg V )。


单源最短路径

给定一个图G=(V,E),找出从给定的源点s∈V到其它每个结点v∈V的最短路径。
最短路径的最优子结构
​ 最短路径具有最优子结构性:两个结点之间的一条最短路径的任何子路径都是最短的。

引理24.1 给定一个带权重的有向图G=(V,E)和权重函数ω:E→R。设p=为从结点v0到结点vk的一条最短路径,并且对于任意的i和j,0≤i≤j≤k,设pij=为路径p中从结点vi到结点vj的子路径,则pij是从结点vi到结点vj的一条最短路径。
算法导论复习(八)| 基本图算法_第9张图片
算法导论复习(八)| 基本图算法_第10张图片

松弛

算法导论复习(八)| 基本图算法_第11张图片
算法导论复习(八)| 基本图算法_第12张图片

三角不等式

算法导论复习(八)| 基本图算法_第13张图片

bellman-ford算法

算法导论复习(八)| 基本图算法_第14张图片
算法导论复习(八)| 基本图算法_第15张图片

Bellman-ford算法总的运行时间O(VE)。

dijkstra算法

算法导论复习(八)| 基本图算法_第16张图片
算法导论复习(八)| 基本图算法_第17张图片
如果用线性数组实现,每次找d最小的结点u需要O(V)的时间,所以算法的总运行时间为O(V2+E)=O(V2)。


差分约束

算法导论复习(八)| 基本图算法_第18张图片
算法导论复习(八)| 基本图算法_第19张图片
算法导论复习(八)| 基本图算法_第20张图片
算法导论复习(八)| 基本图算法_第21张图片
技巧

  • 约束图中,不等关系为 xi-xj<=bk 时,vjvi有一条权值为bk的有向边
  • 解为所添加结点v0到各个结点的单源最短路径

算法导论复习(八)| 基本图算法_第22张图片


所有结点对的最短路径问题

算法导论复习(八)| 基本图算法_第23张图片

递归表达式

算法导论复习(八)| 基本图算法_第24张图片
矩阵乘法的修改

Floyd-Warshall算法

算法导论复习(八)| 基本图算法_第25张图片
算法导论复习(八)| 基本图算法_第26张图片
简记:遍历k,比较ik+kj。在矩阵中画十字,看两边比较。

算法描述:
算法导论复习(八)| 基本图算法_第27张图片

Wn╳n:权重邻接矩阵;
Dn╳n:最短路径权重矩阵
FLOYD-WARSHALL自底向上地完成D矩阵的计算。

johnson算法

算法导论复习(八)| 基本图算法_第28张图片
算法导论复习(八)| 基本图算法_第29张图片
算法导论复习(八)| 基本图算法_第30张图片
算法导论复习(八)| 基本图算法_第31张图片


你可能感兴趣的:(算法,算法)