数据结构与算法图
得u ' ∈U,v ' ∈V-U,且u和u '之间,v和v '之间均有路径相连通。
将边(u ' ,v ' )删除,这样就消除了上述回路,并得到了另一棵生成树T' 。 由于W(u,v) ≤W(u ',v '),所以生成树T '的耗费不大于树T的耗费。于是T ' 是一棵包含边(u,v)的最小生成树,这与假设矛盾。
用反证法证明如下:
v)的回路。
假设网G的任何一棵最小生成树都不包含边(u,v),显然当把边(u,v) 普里姆( Prim)算法 T中时,由生成树的定义,将产生一个含有边(u, 加入到G的一棵最小生成树
克鲁斯卡尔(Kruskal)算法 由于T是生成树,T中必存在不同于边(u,v)的另一条边(u',v ' ),使
通信工程教研室
二、Prim算法
Prim算法构造最小生成树的过程
1 6 2 3 5 1
例
5 5 4 2 6 2 3 5
1
6 1 5 3 6 6
5 5
5
3 6
4
2 6
4
4
6
通信工程教研室
二、Prim算法
练习
A
21 19 33 F 14 12 12 B
13
9 9
8 8
C
9
E 18
D
边权值总和:8+9+12+13+18=60
通信工程教研室
五、Kruskal算法的计算机实现
算法描述
例 2 3 5 1 6 1 5 3 6 4 5 5 4 2 6 1 2 3 5 1 3 4 4 2
data 1 1
2
jihe 1 2
2
3 4 5 6
2
32 1 42 1 5 2 61 2 4
3
4 5 6
vexh vext weight flag 0 2 6 0 1 1 0 3 1 1 1 2 1 0 4 5 2 3 4 5 6 7 8 9 2 3 5 4 5 6 6 6 5 3 5 6 4 2 6
通信工程教研室
一、基本概念
1. 图的生成树 若G 是连通图G的子图,并有: V(G ') = V(G), E(G ) ⊆ E(G),还满足:G 是连通图,且所有顶点不 存在回路;G 是图G的一棵生成树。 2. 图的最小生成树 图G的生成树是一棵包含G的所有顶点的树,树上所
有权值总和表示代价,那么在G的所有的生成树中,
30
A→D: (A, D)30
A→通信工程教研室
7.6.1 单源最短路径
10
B
50 10
S={A, B} C
20
A
100
A→B:(A, B)10
30
A→C:(A, B, C)60
A→D: (A, D)30
E
60
D
A→E: (A, E)100
通信工程教研室
7.6.1 单源最短路径
通信工程教研室
二、Prim算法
算法思想
设G=(V,{E})是连通网,TE是G上最小生成树中边的集合, 则Prim算法通过以下步骤得到最小生成树:
初始状态:U = {u0},TE = {}。其中u0是顶点集合V中的某 一个顶点; 在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边 (u0,v0),将这条边加进集合TE中,同时将此边的另一顶 点v0并入U; 如果U = V,则算法结束;否则重复步骤2; 算法结束时,TE中包含了G中的n-1条边。经过上述步骤选 取到的所有边恰好就构成了图G的一棵最小生成树。
V1 6
V3 5 V3 5 V3 5 0 0
V1 1
0 0 0 0 0
V1 5
V1 5 V6 2 0 0 0
V1 ∞
V3 6 V3 6 V3 6 V2 3 0
V1 ∞
V3 4 0 0 0 0
{V1} {V1,V3}
{V2,V3,V4,V5,V6} {V2,V4,V5, V6}
2
5 3 1 4
{V1,V3,V6}
单源最短路径 7.6.2 每对顶点之间的最短路径
通信工程教研室
7.6 最短路径
在非网图中,最短路径是指两顶点之间经历的边数最 少的路径。 B
A
C
AE:1 ADE:2 ADCE:3 ABCE:3
E
D
通信工程教研室
7.6 最短路径
在网图中,最短路径是指两顶点之间经历的边上权值之 和最短的路径。 B
通信工程教研室
三、Kruskal算法
算法思想
初始状态:只有n个顶点而无边的非连通图T=(V,{}),每 个顶点自成一个连通分量; 在E中选取代价最小的边,若该边依附的顶点落在T中不同 的连通分量上,则将此边加入到T中;否则,舍去此边,选 取下一条代价最小的边; 依此类推,直至T中所有顶点都在同一连通分量上为止。
B
8 9
F
14
C 9
顶点—城市,边— 两城市之间的公路,权—相应的代价, 希望找到使n个城市连通的总造价最低的方案——构造最 小生成树。
通信工程教研室
7.5 最小生成树
问题分析
n个城市间,最多可修建n(n-1)/2条公路。 n个村镇间建立公路网,只需n-1条公路。
问题转化为:如何在可能的公路中选择n-1条,能把所有 村镇(顶点)均连起来,且总耗费(各边权 值之和)最小。
代价最小的生成树称为图G的最小生成树(minimum-
cost spanning tree,简称MST)。
通信工程教研室
一、基本概念
例:下图(b), (c), (d)为(a)所示连通图的不同生成树。
B E B A F (b) D B A F (d) D C F C E
A
D (a)
C
F
B A (c) D C
10
50 10
A
100
30
C
20
AE:100 ADE:90 ADCE:60 ABCE:70
E
60
D
通信工程教研室
7.6 最短路径
问题提出 用带权的有向图表示一个交通运输网,图中: 顶点——表示城市; 边——表示城市间的交通联系; 权——表示此线路的长度或沿此线路运输所花的时间 或费用等。 问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中, 各边上权值之和最小的一条路径——最短路径。
数据结构与算法 第7 章 图
信息与通信工程学院
何伟
要点回顾
图的基本概念及存储方式 图的遍历
通信工程教研室
7.5 最小生成树
基本概念 Prim算法
Kruskal算法
通信工程教研室
7.5 最小生成树
问题提出
12 21 19 33 14 9 18 E 18 D 13 8 9 19 33 12 A 21 13
2
3 3 3 4 5
0 1 1 0 0 0 1 0 0 1 0
6
5
6
通信工程教研室
五、Kruskal算法的计算机实现
Kruskal算法的时间复杂度为O(eloge)。这个算法的时 间复杂度主要取决于边数,因此Kruskal算法适合于构 造稀疏图的最小生成树。
通信工程教研室
7.6 最短路径
7.6.1
(0)用顶点数组和边数组存放顶点和边信息;
(1)初始时,令每个顶点的jihe互不相同;每个边的flag为0; (2)选出权值最小且flag为0的边; (3)若该边依附的两个顶点的jihe 值不同,即非连通,则令该边的 flag=1, 选中该边;再令该边依附的两顶点的jihe 以及两集合中所有顶 点的jihe 相同; 若该边依附的两个顶点的jihe 值相同,即连通,则令该 边的flag=2, 即舍去该边; (4)重复上述步骤,直到选出n-1条边为止 。
0 8 32 13 9 2 5 1 7 17 6
最短路径
<V0,V1> <V0,V2> <V0,V2,V3> <V0,V2,V3,V4> <V0,V2,V3,V4,V5> <V0,V1,V6>
权值
13 8 13 19 21 20
30
2 5 3 6 4
迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的
E
E
通信工程教研室
一、基本概念
2 B E 4 5 A 3 C 12 6 (a) 连通图 8
10
4 A
B
5 C
10
E
12
D
F
2 B E 4 A 3 C D 6 F (c) 边权值总和 23 8
D 6 F (b) 边权值总和 37 2 B E 5 A C 3 10 F D 6 (d) 边权值总和 26
{V1,V3,V6, V4} {V1,V3,V6, V4,V2} {V1,V3,V6,V4,V2,V5}
{V2,V4,V5}
{V2,V5} {V5} {}
通信工程教研室
四、Prim算法的计算机实现
设置辅助数组closedge,记录从U到V-U具有最小权值的边。对每个顶点 U U={ v0} V-U={ v1,V2,V3,V4,V5 } V0 5 viV-U, 在辅助数组中存在一个相应的分量 closedge[i-1] ,它包括两个域: 6 iclosedge[i-1].lowcost=Min{cost(u,vi)|u 1 0 1 2 3 4 U 5}:各顶点的边中,权值最小 5 5 V3 V 1 的边的权值; :表示上述权值最小的边所依附的 U集中的顶 V2 0 closedge[i-1].vex 0 0 0 0 0 Vex[i] 6 4 点。 3 2 0 6 1 5 max max lowcost[i] 6