数据结构与算法分析第九章 图论算法.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

v1
物理与电子学院-数据结构
p1
v2
19
2.拓扑排序

下图表示课程之间的依赖关系。根据该图 排一张学习的先后次序表。
1 离散数学 数学 程序设计
3
数据结构 5 7 编译原理
2
汇编程 序设计
4
6 结构程序设计

1,2,3,4,5,6,7
20
物理与电子学院-数据结构
2.拓扑排序

先决条件问题。 拓扑排序(topological sort)
表示成右图矩阵
0
1 1 0
1
0 0 1
1
0 0 0
0
1 0 0
0
1 1 1
E
C
D
0
1
1
1
0
•在物理实现时的考虑,和前一页的无向图类似。
物理与电子学院-数据结构
14
1.概念定义
•有向图的加权邻接矩阵
设有向图具有 n 个结点,则用 n 行 n 列的矩阵 A 表示该有向图; 并且 A[i,j] = a , 如果i 至 j 有一条有向边且它的权值为a。A[i,j] = ‘ 空 或其它标 志;如果 i 至 j 没有一条有向边。 a A B
边上的值
6



物理与电子学院-数据结构
1.概念定义

路径


构成首尾相连的一系列边的顶点集合。 例如路径w1,w2,w3,…,wN (wi,wi+1) E,0<i<N 路径长=边数=N-1

环 简单路径

顶点不重复出现的路径,但第一个顶点和最 后一个顶点可能相同。
7
物理与电子学院-数据结构
表示成右图矩阵
0 0 1 2 3
0
1 2
1 1
3
0
0
0 1
0
0 0
0
0 0
0
1 0
C
D
•在物理实现时的考虑:分别用 0、1、2、3 分别标识结点A、B、C、D。而将真 正的数据放入一个一维数组之中。
0
1
2 C
3
A
B
D
13
物理与电子学院-数据结构
1.概念定义
•无权值的无向图的邻接矩阵 设无向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该无向图; 并且 A[i,j] = 1 , 如果i 至 j 有一条无向边;A[i,j] = 0如果 i 至 j 没有一条无向边 注意: A[i,i] = 0。i结点的度: i行或i列之和。上三角矩阵或下三角矩阵。 A B
6 b 4 5 d c 2 1 1 8 g 4 h 2
a
e
7
k
4
f
a b c d e f g h k ve vl
0 0 6 0 4 0 5 0 5 7 0 7 15 0 14 11 0 18 0
34
18 0 18 6 18 6 18 8 18 8 10 16 18 18 14 18 7 18
物理与电子学院-数据结构

赋权最短路径

见图9-20,源点v1

最短路径的子路径仍是最短路径 Dijkstra算法

把图中所有顶点分成两组

第一组包括已确定最短路径的顶点 第二组包括尚未确定最短路径的顶点;

按最短路径长度递增的顺序逐个把第二组的 顶点加到第一组中去

直至从s出发可以到达的所有顶点都包括进第一组 中。
D
C
C
D 无向图G2的子图
C
D
B
A
A
B
A
B
A
B
E
E
E
C
D
D
C
D
C
D
物理与电子学院-数据结构
5
1.概念定义

邻接

假若顶点v 和顶点w 之间存在一条边,则称 顶点v 和w 互为邻接点,或v和w邻接。

顶点的度(degree)

与该顶点相关联的边的数目。 入度(in degree) 出度(out degree)
1.概念定义

图的四种常用的存储形式:


邻接矩阵和加权邻接矩阵(labeled adjacency matrix) 邻接表 十字链表 邻接多重表
物理与电子学院-数据结构
12
1.概念定义
•无权值的有向图的邻接矩阵 设有向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该有向图; 并且 A[i,j] = 1 , 如果i 至 j 有一条有向边;A[i,j] = 0如果 i 至 j 没有一条有向边 注意: A[i,i] = 0。出度: i行之和。入度: j列之和。 A B
B
A
• 无向图:G2 =(V2,E2) V2 = {A,B,C,D,E} E2 = {(A,B), (A,C), (B,D),
B
<C,D>, <D,A>}
物理与电子学院-数据结构
(B,E), (C,E), (D,E)}
4
1.概念定义
A 有向图 G1 B A A B 有向图G1的子图 A B
C 无向图 G2 A
物理与电子学院-数据结构
35
4.网络流问题

问题

从源节点到目的节点能够通过的最大流量 受到边的限制(每条边有一个最大容量)
物理与电子学院-数据结构
36
5.最小生成树

Prim算法

从最小的树开始向外延伸 选取最小的边,当该边不形成圈

Kruskal算法

选取最小的边,当该边不与已有的边形成圈
a
b a b a b
表示成右图矩阵
b
b b
a
a
C
D
优点:判断任意两点之间是否有边方便,仅耗费 O(1) 时间。 缺点:即使 << n2 条边,也需内存 n2 单元,太多; 仅读入数据耗费 O( n2 ) 时间,太长。
物理与电子学院-数据结构 15
1.概念定义
邻接表
A 向图 G1 B data adj 0 A null 1 B 2 C 3 D 1 3
弱连通图G 图G的两个强连通分量
A
B
A
B
C
D
C
D
10
物理与电子学院-数据结构
1.概念定义

生成树

极小连通子图。包含图的所有 n 个结点,但 只含图的 n-1 条边。
无向图G A B A 无向图G的生成树 B
E
H H
E
M
C D C
M
D

完全图

每一对顶点间都存在一条边。
11
物理与电子学院-数据结构
0 1

2 0∧∧
1 B 2 C
2 1∧
0 2∧∧
18
物理与电子学院-数据结构
1.概念定义
邻接多重表
A
无向图 G2
B
•用途:用于无向图,边表中 的边结点只需存放一
E
次,节约内存。
C
D
data first 0 A 1 B
0 2 4
1 4 1
0 1 3 p2
∧ ∧
2 3 4
∧ ∧ ∧
2 C 3 D 4 E
物理与电子学院-数据结构
22
2.拓扑排序

任何有向无圈图,其顶点都可以排在一个 拓扑序列里,其拓扑排序的方法是:


(1)从图中选择一个入度为0的顶点且输出 之。 (2)从图中删掉此顶点及其所有的出边。 (3)回到第(1)步继续执行。
物理与电子学院-数据结构
23
2.拓扑排序

拓扑排序

简单方法 O(|V|2)
第九章 图论算法
本源自文库纲要


1.概念定义 2.拓扑排序 3.最短路径算法 4.网络流问题 5.最小生成树 6.深度优先搜索的应用 7.NP-完全性介绍
物理与电子学院-数据结构
2
1.概念定义

飞机航空路线图

公路交通图 图


图G是由一个顶点集 V 和一个边集E构成的数 据结构。 G = (V, E )
物理与电子学院-数据结构
31
3.最短路径算法

例子:

见图9-28
物理与电子学院-数据结构
32
3.最短路径算法

无圈图

工程最快进度问题

工程包含很多任务,任务之间存在依赖关系 完成每一项任务需要一定的时间 该工程的最早完成时间?

动作节点图 事件节点图
物理与电子学院-数据结构
33
3.最短路径算法
1.概念定义



w1=wN,长度至少为1的一条路径; 该路径若是简单路径,该圈就是简单圈。 无向图中,圈的边是互异的 无圈的有向图,称为DAG
物理与电子学院-数据结构
8
1.概念定义


连通:顶点v至w之间有路径存在 连通图:无向图 G 的任意两点之间都是连通 的,则称 G 是连通图。 连通分量:极大连通子图
1
null
物理与电子学院-数据结构
16
1.概念定义
•逆邻接表实例: A 有向图 G1 B
0 1 2 3
C D
A B
C D
2 0
null null null
3
null
0
2
物理与电子学院-数据结构
17
1.概念定义
十字链表
进入|离开
•用途:用于有向图, 查询 进入结点和离开结点
A B
C
的边容易。
0 A
null
null
dest link null 2 寻找进入结点的边非常困难!!! 改进:建立逆邻接表或十字链表
0
C
D
无向图 G2 A B
data adj 0 A 1 B
1 0 0
2 3
null
dest link null 4
null null
E
2 C 3 D 4 E
D
4
4
1
C
2 3 6条边却用了 12 个边结点!!! 改进:建立邻接多重表
27
物理与电子学院-数据结构
3.最短路径算法

无权最短路径

见图9-10 S 为 v3

广度优先搜索


按层次处理顶点:距源点近的顶点先被访问, 远的顶点后被访问。 类似树的层序遍历
物理与电子学院-数据结构
28
3.最短路径算法

队列实现

O(|E|+|V|)
物理与电子学院-数据结构
29
3.最短路径算法
物理与电子学院-数据结构
37
6.深度优先搜索的应用

深度优先搜索

递归的遍历节点v的每一个邻接的顶点 与广度优先搜索不同。

无向图

深度优先生成树 背向边:属于图但不属于深度优先生成树的 边,其方向由搜索过程决定。
物理与电子学院-数据结构
38
6.深度优先搜索的应用

1.寻找无向图割点

30
物理与电子学院-数据结构
3.最短路径算法

在这个过程中,总保持从s到第一组各顶点的 最短路径长度都不大于从s到第二组的任何顶 点的最短路径长度,而且,每个顶点都对应 一个距离值:


第一组的顶点对应的距离值就是从s到该顶点的最 短路径长度 第二组的顶点对应的距离值是从s到该顶点的只包 括第一组的顶点为中间顶点的最短路径长度
3.最短路径算法

工程最早完成时间

关键路径

从第一个事件到最后一个事件最长路径的长
EC1 0 ECw max ( ECv cv , w )
( v , w )E

每个任务的最早完成时间

每个任务的最晚完成时间
LCn ECn LCv min ( LCw cv , w )
( v , w )E
无向图G A E H K M C D M F I G J H L K B A E 无向图G的三个连通分量 B F G
I
J
L
C
物理与电子学院-数据结构
D
9
1.概念定义


连通:顶点v至v’’之间有路径存在 强连通图:有向图 G 的任意两点之间都是连通的, 则称 G 是强连通图。 强连通分量:极大连通子图(每个子图是强连通的) 基础图:有向图去掉弧上方向形成的无向图 弱连通图:非强连通但其基础图是连通的有向图。

队列实现

图9-6 O(|E|+|V|)
物理与电子学院-数据结构
24
3.最短路径算法

赋权路径长

路径上所有权值之和

无权路径长

路径长:边数之和
物理与电子学院-数据结构
25
3.最短路径算法

单源最短路径(single-source shortest paths)

指的是对已知图G=(V,E),给定源顶点 s∈V,找出s到图中其它各顶点的最短路径。

每对顶点间的最短路径(all-pairs shortest paths)

指的是对已知图G=(V,E),任意的顶点Vi, Vj∈V,找出从Vi到Vj的最短路径。
26
物理与电子学院-数据结构
3.最短路径算法
一个示例
源点 V0 30 10
10
V1 50
100
源点 V4 60 V0 V1 ( V0 ,V 1) 10 终点 最短路径 最短路径长度
3
物理与电子学院-数据结构
1.概念定义
有向图 G1 A B A 无向图 G2 B
E
C
D
C
D
• 结点或 顶点:
A
B
• 结点或 顶点: • 无向边或边
A
B
• 有向边(弧)、弧尾或初始结 点、弧头或终止结点
A
• 有向图:G1 =(V1,E1) V1 = {A,B,C,D} E1 = {<A,B>, <A,C>,
图的割点 深度优先生成树 Num:按照搜索顺序给节点的编号 Low:通过零或多条边(最多包括一条背向边)所能到 达的最小编号节点

将一个有向无圈图中所有顶点在不违反先决 条件关系的前提下排成线性序列的过程称为 拓扑排序
物理与电子学院-数据结构
21
2.拓扑排序

拓扑序列

对于有向无圈图G=(V,E),V里顶点的线 性序列称作一个拓扑序列,如果该顶点序列 满足:

若在有向无圈图G中从顶点Vi到Vj有一条路径,则 在序列中顶点Vi必在顶点Vj之前。
V2
加权邻接矩阵:
20
V3
V2
V3
(V0,V3 ,V2 )
(V0,V3) (V0 ,V3 ,V2 ,V4)
50
30 60
0 1 2 3 4
V4
0 1 2
0 10 ∞ 30 100 ∞ 0 50 ∞ ∞ ∞ ∞ 0 ∞ 10 ∞ ∞ 20 0 ∞ ∞ ∞ ∞ 60 0
3
4
注意:这里0、1、2、3、4用于标识结点V0 、 V1、V2、V3、V4。
相关文档
最新文档