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

本文介绍了图论中的关键算法,如Kruskal和Prim算法用于最小生成树,Bellman-Ford和Dijkstra算法处理单源最短路径,以及Floyd-Warshall和Johnson算法解决所有结点对最短路径问题,还涉及了权重图和邻接矩阵的概念。
摘要由CSDN通过智能技术生成

权重图:图中的每条边都带有一个权重的图。
权重值通常以权重函数 ω: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,v1,…,vk>为从结点v0到结点vk的一条最短路径,并且对于任意的i和j,0≤i≤j≤k,设pij=<vi,vi+1,…,vj>为路径p中从结点vi到结点vj的子路径,则pij是从结点vi到结点vj的一条最短路径。
9
10

松弛

11
12

三角不等式

13

bellman-ford算法

14
-

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

dijkstra算法

15
16
如果用线性数组实现,每次找d最小的结点u需要O(V)的时间,所以算法的总运行时间为O(V2+E)=O(V2)。


差分约束

17
18
19
20
技巧

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

21


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

22

递归表达式

23
矩阵乘法的修改

Floyd-Warshall算法

24
25
简记:遍历k,比较ik+kj。在矩阵中画十字,看两边比较。

算法描述:
26

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

johnson算法

27
28
29
30


  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值