52

第七章 图

Embed Size (px)

DESCRIPTION

第七章 图. 7.1 图的概念及基本操作. 7.2 图的存储结构. 7.3 图的遍历. 7.4 图的连通性. 7.5 最短路径. 7.6 拓扑排序. 7.1 图的概念及基本操作. 图的引例:. 图的结构定义:. 图 是由一个 顶点集 V 和一个 边集 E 构成的数据结构。 Graph = (V, E ). A. B. E. C. D. 由于“弧”是有方向的,因此称由顶点集和弧集构成的图为 有向图 。. 例如 :. G 1 = (V 1 , E 1 ). 其中 V 1 ={A, B, C, D, E} - PowerPoint PPT Presentation

Citation preview

Page 1: 第七章 图
Page 2: 第七章 图

7.1 图的概念及基本操作7.2 图的存储结构

7.3 图的遍历7.4 图的连通性

7.5 最短路径

7.6 拓扑排序

Page 3: 第七章 图

图的引例:

7.1 图的概念及基本操作

Page 4: 第七章 图

图是由一个顶点集 V 和一个边集 E

构成的数据结构。 Graph = (V, E )

图的结构定义 :

Page 5: 第七章 图

由于“弧”是有方向的,因此称由顶点集和弧集构成的图为有向图。

E

A

C

B

D

例如 : G1 = (V1, E1)

其中V1={A, B, C, D, E}

E1={<A,B>, <A,E>,

<B,C>, <C,D>, <D,B>,

<D,A>, <E,C> }

Page 6: 第七章 图

若 <v, w>E 必有 <w, v>E, 则称 (v,w) 为顶点 v 和顶点 w 之间存在一条边。

B C

A

F E

D

由顶点集和边集构成的图称作无向图。

例如 : G2=(V2,E2)

V2={A, B, C, D, E, F}

E2={(A, B), (A, E),

(B, E), (C, D), (D, F),

(B, F), (C, F) }

Page 7: 第七章 图

名词和术语网、子图

完全图、稀疏图、稠密图邻接点、度、入度、出度路径、路径长度、简单路径、简单回路

连通图、连通分量、强连通图、强连通分量

Page 8: 第七章 图

A

B E

C F

A

E

F

B

B

C

设图 G=(V,E) 和图 G=(V,E),若有 VV, EE,

则称 G 为 G 的子图。

Page 9: 第七章 图

假设图中有 n 个顶点, e 条边,则

含有 e=n(n-1)/2 条边的无向图称作完全图 ;

含有 e=n(n-1) 条弧的有向图称作 有向完全图 ;

Page 10: 第七章 图

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

例如 :

TD(B) = 3

TD(A) = 2

边 (v,w) 和顶点 v 和 w 相关联。 和顶点 v 关联的边的数目定义为边的度。

A

C

D

F E

B右侧图中

Page 11: 第七章 图

顶点的出度 : 以顶点 v 为弧尾的弧的数目 ;

A

B E

C F

对有向图来说,

顶点的入度 : 以顶点 v为弧头的弧的数目。顶点的度 (TD)=出度 (OD)+ 入度 (ID)

例如 :

ID(B) = 2

OD(B) = 1

TD(B) = 3

由于弧有方向性,则有入度和出度之分

Page 12: 第七章 图

设图 G=(V,{VR}) 中的一个顶点序列{ u=vi,0,vi,1, …, vi,m=w} 中, (vi,j-1,vi,j)VR 1≤j≤m,

则称从顶点 u 到顶点 w 之间存在一条路径。路径上边的数目称作路径长度。

A

B E

C F

如 : 从 A到 F长度为 3 的路径 {A,B,C,F}

简单路径 : 指序列中顶点不重复出现的路径。

简单回路 : 指序列中第一个顶点和最后一个顶点相同的路径。

Page 13: 第七章 图

若图 G中任意两个顶点之间都有路径相通,则称此图为连通图 ;

若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量。

B

A

C

D

F EB

A

C

D

F E

Page 14: 第七章 图

若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图。

A

B E

C F

A

B E

C F

对有向图,

否则,其各个强连通子图称作它的强连通分量。

Page 15: 第七章 图

结构的建立和销毁

插入或删除顶点

对邻接点的操作

对顶点的访问操作

遍历

插入和删除弧

基本操作基本操作

Page 16: 第七章 图

7.2 图的存储表示

一、图的邻接矩阵表示法

二、图的邻接表表示法

Page 17: 第七章 图

Aij={0 (i,j)E

1 (i,j)E

一、图的邻接矩阵存储表示

B

A

C

D

F E

定义 : 矩阵的元素为

0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0

Page 18: 第七章 图

无向图的领接矩阵为对称矩阵有向图的邻接矩阵为非对称矩阵

A

B E

C F

0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0

Page 19: 第七章 图

D

B

A

C

F E

二、图的邻接表 存储表示

A 1 4

B 0 4 5

C 3 5

D 2 5

E 0 1

F 1 2 3

0 1 2 3 4 5

Page 20: 第七章 图

有向图的邻接表

1 4

2

3

0 1

2

0 1 2 3 4

A

B

C

D

E

A

B E

C F

可见,在有向图的邻接表中不易找到指向该顶点的弧

Page 21: 第七章 图

7.2 图的存储表示

一、图的邻接矩阵表示法

二、图的邻接表表示法

Page 22: 第七章 图

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。

深度优先搜索遍历广度优先搜索遍历

Page 23: 第七章 图

一、深度优先搜索遍历

Page 24: 第七章 图

D

B

A

C

F E

深度优先遍历序列: ABEFCD

B

A

F E

D

C

Page 25: 第七章 图

a b

c

h

d e

k

f

g

8

1

2 3 4 5

6

7

0

F F F F F F F F F0 1 2 3 4 5 6 7 8

T T T T T T T T T

a c h d k f e b g

a

c

h k

fed

bg

访问标志 :

访问次序 :

例如 : a

c

h

d k

f e

图的深度优先遍历类似于二叉树的先序遍历。

Page 26: 第七章 图

二、广度优先搜索遍历

V

w1

w8

w3

w7

w6

w2

w5

w4

w1

V

w2

w7

w6

w3

w8

w5

w4

Page 27: 第七章 图

7.4.3 最小生成树

问题的提出:

D

B C

A

E

8

3

15

6

10 4

8

和图有关的网络的概念。

Page 28: 第七章 图

构造网的一棵最小生成树,即: 在 e 条带权的边中选取 n-1 条边(不构成回路),使“权值之和”为最小。

算法二:克鲁斯卡尔算法(寻边法)

该问题等价于:

算法一:普里姆算法(寻点法)

Page 29: 第七章 图

普里姆算法的基本思想 :

连通网: G= ( V , E )

最小生成树: T= ( U , TE )

其中V={A, B, C, D, E}

E={(A,B), (A,E),(B,C), (C,D), (D,B),(D,A),(E,C)

}

D

B C

A

E

8

3

15

6

10 4

8

Page 30: 第七章 图

a b

c

d

e

g

f

195

1418

27

16 8

21

3

127

例如 :

a

e

d

c

b

g

f

14

8

5

316

21

所得生成树权值和 = 14+8+3+5+16+21 = 67

Page 31: 第七章 图

用普里姆算法求下图的最小生成树。

1

2

6

5

4

36

5

1

2

5

7

3

4

4

Page 32: 第七章 图

克鲁斯卡尔算法的基本思想 :

连通网: G= ( V , E )

最小生成树: T= ( U , TE )

其中V={A, B, C, D, E}

E={(A,B), (A,E),(B,C), (C,D), (D,B),(D,A),(E,C)

}

D

B C

A

E

8

3

15

6

10 4

8

Page 33: 第七章 图

a b

c

d

e

g

f

195

1418

27

16 8

21

3

127

a

e

d

c

b

g

f

14

8

5

316

21

例如 :

712

18

19

Page 34: 第七章 图

用克鲁斯卡尔方法求下图的最小生成树,要求画出最小生成树的生成过程。

1

2

6

5

4

36

5

1

2

5

7

3

4

4

Page 35: 第七章 图

2

3

1

4

5

61

2

3

1

4

561

2

Page 36: 第七章 图

2

3

1

4

5

61

2

3

2

3

1

4

5

61

2

3

4

Page 37: 第七章 图

2

3

1

4

5

61

2

3

45

Page 38: 第七章 图

普里姆算法 克鲁斯卡尔算法

时间复杂度 O(n2) O(e)

边稠密图 边稀疏图

算法名

适应范围

比较两种算法

Page 39: 第七章 图

7.5.1 两点之间的最短路径问题

求从某个源点到其余各点的最短路径

每一对顶点之间的最短路径

Page 40: 第七章 图

求从源点到其余各点的最短路径的算法的基本思想 :

依最短路径的长度递增的次序求得各条路径

源点

v1

…其中,从源点到顶点 v 的最短路径是所有路径中长度最短者。

v2

Page 41: 第七章 图

在这条路径上,必定只含一条弧,并且这条弧的权值最小。

下一条路径长度次短的最短路径的特点 :

路径长度最短的最短路径的特点 :

它只可能有两种情况 : 或者是直接从源点到该点 ( 只含一条弧 ) ; 或者是,从源点经过顶点 v1 ,再到达该顶点 ( 由两条弧组成 ) 。

Page 42: 第七章 图

其余最短路径的特点:

再下一条路径长度次短的最短路径的特点 :

它可能有三种情况:或者是,直接从源点到该点 ( 只含一条弧 ) ; 或者是,从源点经过顶点 v1 ,再到达该顶点 ( 由两条弧组成 ) ;或者是,从源点经过顶点 v2 ,再到达该顶点。 它或者是直接从源点到该点 ( 只含一条弧 ) ; 或者是,从源点经过已求得最短路径的顶点,再到达该顶点。

Page 43: 第七章 图

求最短路径的迪杰斯特拉算法:

一般情况下,Dist[k] = < 源点到顶点 k 的弧上的权值 >

或者 = < 源点到其它顶点的路径长度 >

+ < 其它顶点到顶点 k 的弧上的权值 >

设置辅助数组 Dist ,其中每个分量 Dist

[k] 表示 当前所求得的从源点到其余各顶点 k 的最短路径。

Page 44: 第七章 图

1 )在所有从源点出发的弧中选取一条权值最小的弧,即为第一条最短路径。

2 )修改其它各顶点的 Dist[k] 值。假设求得最短路径的顶点为 u ,若 Dist[u]+G.arcs[u][k]<Dist[k]

则将 Dist[k] 改为 Dist[u]+G.arcs[u][k]

INFINITY

kvarcsGkDist

]][0[.][

V0 和 k 之间存在弧V0 和 k 之间不存在弧

其中的最小值即为最短路径的长度。

Page 45: 第七章 图

求每一对顶点之间的最短路径

弗洛伊德算法的基本思想是:

从 vi 到 vj 的所有可能存在的路径中,选出一条长度最短的路径

Page 46: 第七章 图

若 <vi,vj> 存在,则存在路径 {vi,vj}

// 路径中不含其它顶点若 <vi,v1>,<v1,vj> 存在,则存在路径 {vi,v1,v

j}

// 路径中所含顶点序号不大于 1

若 {vi,…,v2}, {v2,…,vj} 存在, 则存在一条路径 {vi, …, v2, …vj}

// 路径中所含顶点序号不大于 2 … 依次类推,则 vi 至 vj 的最短路径应是上述这些路径中,路径长度最小者。

Page 47: 第七章 图

7.6 拓扑排序 问题 : 假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。

检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。

Page 48: 第七章 图

何谓“拓扑排序”?对有向图进行如下操作 :

按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。

Page 49: 第七章 图

例如:对于下列有向图

B

DAC

可求得拓扑有序序列:

A B C D 或 A C B D

由此所得顶点的线性序列称之为拓扑有序序列

Page 50: 第七章 图

B

DA

C

反之,对于下列有向图

不能求得它的拓扑有序序列。

因为图中存在一个回路 {B, C, D}

Page 51: 第七章 图

如何进行拓扑排序?

一、从有向图中选取一个没有前驱 的顶点,并输出之 ;

重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

二、从有向图中删去此顶点以及所 有以它为尾的弧 ;

Page 52: 第七章 图

a

b

c

g

h

d

f

e

a b h c d g f e

在算法中需要用定量的描述替代定性的概念

没有前驱的顶点 入度为零的顶点

删除顶点及以它为尾的弧 弧头顶点的入度减 1