图论算法介绍

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

令x2 y4 ,S2 S1 {x2} {x0 ,x1, x2},P2 P1 (x1,x2 ),
k 2(见图1.2(d )).
7 x0 0
1
y1 7
4
2 51
2
1
x1
7
图1.2(c)
y3
5 y4
3 y5
7 x0 0
l( y4 ) min{l( y4 ),l(x1) w((x1,y4 ))} min{,1 2} 3,
l( y4 ) min{l( y5 ),l(x1) w((x1,y5 ))} min{,1 7} 8.
10
x3
3
4
2
9 16
x2 2 6
(e)
x1 1 7
1
3
15
0
x0
10
x3
3
4
2
9 16
x2 2 6
(g)
7 5

8 6
5 x5
5
4 x4
8 6
x1 1 7
1
3
15
0
x0
10
x3
3
4
2
9 16
x2 2 6
(f)
x1 1 7
1
3
15
0
x0
10
x3
3
4
2
9 16
x2 2 6
(h)
7 5
4 x4
8 6
5 x5
7
1
3
15
5
10
4
x0
2
9 16 8
6
(a)
x1 1
7
15
1
3
15
5
0
x0
2
10 4 9 16 8
2
16
6
(c)
7

1
3
15
5
0
x0
2
10 4 9 16 8


6
(b)
x1 1 7
7
1
3
15
5
0
x0
2
10 3 4 9 16 8
x2 2 6
16
(d)
x1 1 7
1
3
15
0
x0
x3 5
4
y3 8
7
25
x0 0
51
1
2
3 x2 3
1 x1
7
6 x4
图1.2( f )
x3 5
4 x5 8
7
25
x0 0
51
1
2
1
x1
7
3 x2 3 6 x4
图1.2(g)
k 5 6 1,停止.最后,我们得到一棵根在x0的树形图, 如图1.2(h)所示.
x4
)
S4

,而N
D

S4
)
S 4 {y3}.
l( y3) 8.
令x5 y3,S5 S4 {x5} {x0 ,x1, x2 , x3, x4 , x5},
P5 P2 (x2,x5 ),k 5(见图1.2(g)).
y1
4 y3
7
25
51
y4
x0 1
2
3
y2
7
y5
图1.2(a)
7 x0 0
1
y1
4
2 51
2

y2
7
图1.2(b)
y3
5 y4
3 y5
1.l(x0) 0,l( y1) l( y2) l( y3) l( y4) l( y5) ,S0 {x0}, P0 x0且k 0(见图1.2(b)).
x1
7
x5
1e1
15
3
e3
e5 5
x0
10
4
x3 e4
x4
2
e2
9 16
8
x2
6 e6
x6
(g)
1e1x1
15
7 3
e3
x5 e5 5
x0
10
4
x3 e4
x4
2
e2
9 16
8
x2
6
(f)
2. 最短路问题
问题:假设有一个铁路系统连接着若干个城市, x0 是该系统中的一个固定城市(比如是首都或省会城市). 在该系统中试求从 x0到其他各城市的最短路线. 这个 问题称为最短路问题.(shortest path problem)
图论算法及其应用 1. 最小连接问题 2. 最短路问题 3. 网络流问题 4. 匹配问题
1. 最小连接问题
问题:假设在某地区内要修建一个连接若个城镇的公 路系统.己知城 xi与x j之间直通公路的造价为cij .试设计 一个造价最低的建造方案.
这类问题很多,如某城市内供气系统的设计,供水系 统的设计,供电系统以及通讯系统的设计等等. 我们把这 类问题称为最小连接问题(smallest connection problem).
2.N
D

x0
)
S0

N
D

S0
)
S 0 {y1,y2}.
l( y1) min{,l(x0 ) w((x0,y1))} min{,0 7} 7,
l( y2 ) min{,l(x0 ) w((x0,y2 ))} min{,0 1} 1.
V4
20
V3
S={V0} S={V0,V2} S={V0,V2,V4}
S={V0,V2,V4,V3} S={V0,V2,V4,V3,V5}
Moore-Dijkstra算法
1.l(x0 ) 0,l(x) (x x0 ),S0 {x0},P0 {x0}且k 0.
2.对每个x ND (xk ) Sk ,用
有许多算法可用来求加权连通简单图的最小树,其
中最著名的是Prim(1957)算法和Kruskal(1956)算法.
Prim算法
1. 任取 x0 V (G),l(x0 ) 0,l(x) (x x0 ),V0 {x0},T0 {x0} 且 k 0.
2. 对 x NG (xk1) V k1,若w(xk1x) l(x),则用w(xk1x)替代l(x). 选取 xk V k1使l(xk ) min{l(x) : x V k1}.设e uxk ,u Vk1
min{l(x),{l(xk ) w(xk , x)}}
替代l
(
x).取xk
1
Leabharlann Baidu
N
D
(
Sk
)
S k和x j ( j k) Sk使(x j ,xk1)
E(D)并且
l
(
xk
1
)

min{l
xS k
(
x)}

l
(
x
j
)

w((
x
j
,xk
)
S 3 {y3,y5}.
l( y5 ) min{l( y5 ),l(x3) w((x3,y5 ))} min{8, 1} 6,
l( y3) 8.
令x4 y5,S4 S3 {x4} {x0 ,x1, x2 , x3, x4},
k 3(见图1.2(e)).
7 x0 0
1
y1 6
4
2 51
2
1
x1
7
图1.2(d )
y3
5 3 x2 3 8 y5
x3 5
4
y3 8
7
25
x0 0
51
1
2
1
x1
7
3 x2 3 8 y5
图1.2(e)
N
D

x3
)
S3

{
y5},而N
D

S3
使w(ek ) l(xk ).令Vk Vk1 {xk },Tk Tk1 ek .
3. 若k v 1,则转2;若k v 1,则停止.
例1 考虑图1.1(a)所示的加权图(G, w). 按Prim算法 构造最小树 Tv1的过程图解在图1.1中,其中(b)所示 的是算法的第1步;而(c)到(h)所示的是算法第2步 的6次迭代,每次迭代后得到一个新顶点 xk 和一条 新边 ek (图中用线色边所示).最后得到的最小树Tv1 如图1.1(h)所示( 红色的边). w(Tv1) 21即各顶点标号 l(x)之和).
2、用S表示已经选取的顶点集合 S={V0,V1,V2,…Vj}
下次要选取的顶点X,从V0到X的路径中 经过的顶点一定都在S中。
假设存在路径V0→→W→X,W S,该路径
最短。
因为路径V0→→W→X比路径V0→→W长,所 以会选择W,而V0到W的路径中的顶点都在S 中。
V5
V0
30
10
10
V1 V2
令x1 y2 ,S1 S0 {x1} {x0 ,x1},P1 P0 (x0 ,x1),
k 1(见图1.2(c)).
y1
4
7
2
x0 0
51
1
2

y2
7
图1.2(b)
y3
5 y4
3 y5
7 x0 0
1
y1 7
1
)).

Sk1 Sk {xk1},Pk1 Pj (x j ,xk1). 3.若k v 1,则用k 1替代k并转2;若k v 1,则停止.
例2 考虑图1.2(a)所示的加权图(G, w). Moore-Dijkstra
算法执行如下:
所以,不存在比V0Vj更短的路径。 不失一般性,假设j=1
Dijkstra算法
它只可能有两种情况: 1)直接从源点到该点,V0X 2)从源点经过顶点v1,再到达该顶点,V0V1X 假设存在另外一个路径,V0WX,它比上面的路径 更短。 如果W≠V1,则V0W比V0WX更短,所以,要选取W, 符合形式一 如果W=V1,则符合形式二
更一般的最短路问题的提法是:设(D, w)是有正值 加权简单有向图x0, 是D中的一个固定顶点.寻找从x0 到 其他顶点y且有最小权的有向路.
单源点的最短路径
给定带权有向图G和V0,求从V0到其余各顶点 的最短路径。
V0 V1
V5
30
10
10
V2
V4
20
V3
Dijkstra算法
按照路径长度递增的次序产生最短路径
4
2 51
2
1
x1
7
图1.2(c)
y3
5 y4
3 y5
N
D

x1
)
S1

N
D

S0
)
S 0 {y1,y4 ,y5}.
l( y1) min{l( y1),l(x1) w((x1,y1))} min{7,1 5} 6,
1
y1 6
4
2 51
2
1
x1
7
图1.2(d )
y3
5 3 x2 3 8 y5
N
D

x2
)
S2

{
y1
,
y3},而N
D

S2
)
S 2 {y1,y3,y5}.
l( y1) min{l( y1),l(x2 ) w((x2,y1))} min{6,3 2} 5,
l( y3) min{l( y3),l(x2 ) w((x2,y3))} min{, 5} 8,
l( y5 ) 8.
令x3 y1,S3 S2 {x3} {x0 ,x1, x2 , x3},P3 P2 (x2 ,x3 ),
制作加权简单图(G, w), 其中城镇 xi 被视为G的顶 点 xi ,xi x j E(G) cij (若 cij 则认为城 xi 和城 x j 之间不可能修建公路), w(xi x j ) cij. 于是最小连接问 题就转化为在(G, w)中找出一棵权和最小的支撑树. 这样的支撑树称为最小树(树:不含圈的连通图).
v1
v2 …
源点
Dijkstra算法
1、长度最短的路径
终点一定是V0的邻接点Vj,边一定是<V0, Vj>,它 在V0的所有邻接边中最短。该路径是V0Vj
V5
V0
30
10
10
V1 V2
V4
20
V3
Dijkstra算法
如果路径V0Vj 不是最短路径,则一定有另外一条 路径,V0W…U,它比V0Vj短。 但是,因为W是V0的邻接点,所以,边<V0, W>一 定比边<V0, Vj>长。
7
1
3
15
5
10
4
x0
2
9 16 8
6
(a)
x1
7
1e1
3
15
5
10
4
x0
2
e2
9 16
8
x2
6
(c)
1e1x1
7 3
15
5
10
4
x0
2
9 16 8
6
(b)
1e1x1
7 3
15 e3
5
x0
10
4
x3
2
e2
9 16
8
x2
6
(d)
1e1x1
7 3
15
5
x0
10
4
x3 e3
x4
2
e2
9 16
8
x2
6
(e)
5
4 x4
8
6 x6
Kruskal算法 1. 选取 e1 E(G),使w(e1)尽可能小,
2.若e1,e2 , , ei选定,则取ei1 E(G) \ {e1,e2, , ei}使 G[{e1,e2 , , ei ,ei1}]不含圈且尽可能地小,
3. 若i v 1,则转2;若i v 1,则停止.
P4 P3 (x3,x4 ),k 4(见图1.2( f )).
x3 5
4
y3 8
7
25
x0 0
51
1
2
1
x1
7
3 x2 3 8 y5
图1.2(e)
x3 5
4
y3 8
7
25
x0 0
51
1
2
3 x2 3
1 x1
7
6 x4
图1.2( f )
N
D

相关文档
最新文档