390 likes | 566 Views
第 五 章 图 论 ( 第二部分 ). 1. 通路 2. 图的 连通性 3. 赋权图的最短通路. 赋权图与边的权. [ 定义 ] 权 在图的点或者边上标明的信息 ( 数量 ) 称为 权。 边 e 的权记为 W(e) ; 如果用两个端点的序列 (u, v) 表示边,则边 (u,v) 的权记为 W(u,v) 。 规定: (1) W(uu) = 0 , 若 (u, u) E(G), (2) W(uv) = ∞, 若 (u, v) E(G) 。 [ 定义 ] 赋权图
E N D
第 五 章 图 论 (第二部分) 1. 通路 2. 图的连通性 3. 赋权图的最短通路
赋权图与边的权 [定义]权 在图的点或者边上标明的信息(数量)称为权。 • 边e的权记为W(e); 如果用两个端点的序列(u, v)表示边,则边(u,v)的权记为W(u,v) 。 • 规定: (1) W(uu) = 0, 若(u, u) E(G), (2) W(uv) = ∞, 若(u, v) E(G)。 [定义]赋权图 顶点或边含有权的图称为赋权图。赋权图可以是有向图或者无向图。
b a 5 4 8 12 20 d c 例: 赋权图边权值例 W(a,b)=5, W(a,a)=0, W(b,d)=∞, W(a,d)=8
最短通路 [定义]最短通路 • 在一个边赋权的图G中,从u到v的所有通路中,边权值和最小的通路,称为u到v的最短通路(最短路径),最短通路的边权和称为u到v的距离。 • 两点间的最短通路必为基本通路。
20 5 15 2 2 8 4 1 7 6 最短通路例 B C A F D E
b a 5 4 8 12 20 d c 枚举法求最短通路 求a到c的最短通路 a到c的基本通路有: • (a, b, c)边权和为5+4=9; • (a, c)边权和为12; • (a, d, c)边权和为8+20= 28。 最短路为: abc,因此a到c的距离为9
狄克斯特洛(Dijkstra)算法 • 求图G=(V,E)中从结点a到结点z的最短通路。 • 基本思想-动态规划法 (1)求出以a为起点,V-{a}中的点为终点的最小最短通路P1;设P1终点为t1; 若t1 = z,则P1为a到z的最短通路; 否则,执行(2) (2) 求出以a为起点, V-{a,t1}中的点为终点的最小最短通路P2;设P2终点为t2; 若t2 = z,则P2为a到z的最短通路; 否则,执行(3) (3) 求出以a为起点,V-{a,t1,t2}中的点为终点的最小最短通路P3;设P3终点为t3; 若t3= z,则P3为a到z的最短通路; 否则,执行(4) (4) 依此类推,直到求得的第k条最短通路Pk;终点为z。
9 1 1 6 2 g b a d e c f z 4 4 3 4 5 3 3 7 狄克斯特洛算法:相关定义 T 设G=(V, E),求G中a到z的最短通路。 [定义]目标集 目标集T是满足以下条件的集合: (1) T V (2) z T, z是最短通路的终点 (3) a T, a是最短通路的起点 [定义]指标 设t1 T,由a到t1但不通过目标集T中其它顶点的所有通路中,各边的权之和的最小者,称为t1关于目标集T的指标,记作DT(t1). G 设T={c, e, f, g, z}, 求DT(c). a到c但不通过目标集T中其它顶点的所有基本通路: (a, b, c): 各边权之和: 1+2 =3 (a, c): 各边权之和: 4 (a, d, c): 各边权之和: 4+3 = 7 ∴ DT(c) = 3
9 1 1 6 2 b a d c z f g e 4 4 3 4 5 3 3 7 T 狄克斯特洛算法:原理 [原理]: 设目标集T = {t1, t2, ……, tn}, 其中t1为T中指标最小的点,即: DT(t1) =min{DT(t1), DT(t2) , ……, DT(tn)} (1) 始点a到t1的最短通路的边权和就是DT(t1) (2) 对任意2 in, a到t1的最短通路a到ti的最短通路 设T = {e, f, g, z}, 已求得 DT( e ) = 9; DT( f ) = 6; DT( g ) = 8; DT( z ) = ∞; 在T的所有结点中,a到f的最短通路最小 并且a到f的最短通路的边权值和为DT(f)=6。 G
狄克斯特洛算法:原理证明(1) • 证明: (1) (反证法) 假设a到t1的最短通路的权和不是DT(t1). 已知DT(t1)是从a到t1但不通过T中其它顶点的通路中权和最小者,所以如果存在另一条权和小于DT(t1)的新通路,则该通路一定至少通过T中一个其它顶点。
狄克斯特洛算法:原理证明(2) T • 证明(续): 设新通路的边权和为dnew,则 dnew < DT(t1) 设t2是新通路上经过T中的第一个顶点,则: dnew= DT(t2) + W(t2t1) >DT(t1) 其中w(t2t1) 表示新通路中t2到t1的各边权之和。 这与“dnew < DT(t1)”矛盾。 ∴ a到t1的最短通路的权和只能是DT(t1). t2 t1 a
狄克斯特洛算法:原理证明(2) T • 证明(续): (2) (反证法)假设存在ti(i2) ,使得a到ti的最短通路小于a到t1的最短通路。设该通路为P,边权值和为d。则d<DT(t1)且d<DT(ti)。 已知DT(ti)是从a到ti但不通过T中其它顶点的通路中权和最小者,则P一定至少通过T中一个其它顶点。设t2是P经过T中的第一个顶点,则: d= DT(t2) + W(t2ti) >DT(t1) 其中w(t2t1) 表示P中t2到ti的各边权之和。 这与“d< DT(t1)”矛盾。 ∴ (2)得证。 t2 ti a
狄克斯特洛算法 • 求图G=(V, E)中a到z的最短通路。 步骤: (1)令初始目标集T1=V-{a}。求T1中指标最小的结点,设为t1。 若t1=z,则DT1(t1)为a到z的最短通路边权和。 否则,执行(2) (2)令T2=T1-{t1},求T2中指标最小的结点,设为t2。 若t2=z,则DT2(t2)为a到z最短通路边权和。 否则,执行(3) (3) 依此类推,直到求得某个目标集Tk,使得z为Tk中指标最小的结 点,则DTk(z)为a到z的最短通路的边权和。 关键:求结点关于目标集Ti的指标。
t1 t2 a … … tm-1 采用“递推”的方法求目标集中的指标 已知当前目标集为Tm={tm, tm+1, …, tn},且 DTm(ti)是ti关于目标集T的指标,tm是最小指标点。 要求新的目标集Tm+1= Tm-{tm}中任意点ti的指标 可用下公式求得: Tm tm Tm+1 tm • 注: • 当tm与ti不邻接时,W(tm,ti)=∞ tm+1 … tn
狄克斯特洛算法:执行步骤 求图G=(V, E)中a到z的最短通路。 [算法]执行步骤: (1) 将目标集设置为:T = V – {a} (2) 对任意vT,令DT(v)=W(a,v); (3)将T中指标值最小的点t从T中剔除,即令T=T-{t}; 。 (4) 若t = z,则DT(z)为a到z的最短路径权值,算法结束。 否则(即t ≠ z) ,执行以下操作: 对所有v T,令DT(v)=min(DT(v), DT(t)+W(t,v)); 重复(3). • 算法执行结束后,DT(z)就是从a到z的最短通路的权和。
狄克斯特洛算法求最短通路举例 例:求下图中从始点a到终点z的最短通路。
首先,取初始目标集T1={b,c,d,e,f,g,z}。 易见: DT1(b) = 1 (通路:ab) DT1(c) = 4 (通路:ac) DT1(d) = 4 (通路:ad) DT1(e) = DT1(f) = DT1(g) = DT1(z)=∞ (无通路) 比较各点的指标可知,b是最小的指标点,b的指标对应的通路为ab。 T1
DT1(b) = 1 (通路:ab) DT1(c) = 4 (通路:ac) DT1(d) = 4 (通路:ad) DT1(e) = DT1(f) = DT1(g) = DT1(z)=∞ (无通路) 通路:abc 通路:ad 通路:abe 通路:无 通路:无 通路:无 a到c的最短通路为:abc,边权和为DT2(c)=3 T2 c是指标最小的点。
通路:ad T3 通路:abce 通路:abcf 通路:abcg 通路:无 比较T3中各点指标可知:d的指标最小,故DT3(d)=4是a到d的最短路径长度,ad是a到d的最短路径
令 T4=T3-{d}={e, f, g, z} T4中各结点的指标为: T4 通路:abce 通路:abcf 通路:abcg 通路:无 比较T4中各点指标可知:f的指标最小,故DT4(f)=6是a到f的最短路径长度,abcf是a到f的最短路径。
令 T5=T4-{f}={e, g, z} T5中各结点的指标为: 通路:abcfe T5 通路:abcg 通路:abcg 比较T4中各点指标可知:e和g的指标相同,且最小,故可选其中一个,DT5(e)=8是a到e的最短路径长度,abcfe是a到e的最短路径。
令 T6=T5-{e}={g, z} T6中各结点的指标为: 通路:abcg T6 通路:abcfez 比较T6中各点指标可知:f的指标最小,故DT6(g)=6是a到g的最短路径长度,abcg是a到g的最短路径。
令 T7=T6-{g}={z} T7中各结点的指标为: 通路:abcfez 故a到z的最短通路边权和为DT7(z)=9, 通路为abcfez T7
求最短通路的表格表示法 步骤: (1) 先把T1=V – {a}中各点写在第一行上,把各点的指标写在第二行上 然后圈出其中最小指标点。 T1 ① 1
T1 (2) 在第三行上,相应地写上T2=T1-{b}中各点的指 标。在求T2中点t的指标时,利用公式 求出T2中各点的指标后,圈出最小指标点。 T1 ③ 3 T2
在第四行上,相应地写上T3=T2-{ c }中各点的指标。 利用公式: 求出T3的指标以后,圈出其中最小指标的点。 T1 T2 T3 ④ 4
T1 T2 T3 T4 T5 T6 T7 采用同样的方法,可得完整的表格如下:
T1 T2 T3 T4 T5 T6 T7 e→z f→e→z c→f→e→z b→c→f→e→z 所以最短通路为:a→b→c→f→e→z
3 例:采用表格表示法求下图中a点到z点的最短路径
3 表格求解步骤(1) ① T1 1 5 6 ∞ ∞ ∞ ∞ ∞
3 表格求解步骤(2) T1 ④ 4 6 9 ∞ ∞ ∞ ∞ T2
3 表格求解步骤(3) T1 T2 8 7 T3 ⑥ 6 9 ∞ ∞
3 表格求解步骤(4) T2 T3 ⑦ 11 ∞ 8 7 T4 9
3 表格求解步骤(5) T3 T4 ⑧ 8 9 13 T5 9
求解过程表格表示如下: T1 T2 T3 T4 T5 T6 T7 T8 用逆向检查法,可得最短通路为: a→b→c→g→h→z
f e 2 1 5 7 1 2 3 a 8 7 d g u0 3 4 3 4 2 6 4 6 b c 课堂练习 • 求u0到c的最短路径
S T a b c d e f g 1 u0 abcdefg 8 4 ∞ ∞ 2 ① 7 2 u0 f abcdeg 8 4 ∞ 4 ② 7 3 u0 fe abcdg 8 4 ∞ ③ 7 4 u0 fed abcg 8 ④ 9 6 5 u0 fedb acg ⑥ 9 6 6 u0 fedba cg 9 ⑥ 7 u0 fedbag c ⑨ 8 u0 fedbagc Dijkstra算法执行过程 • 路径:u0,e,d,c
作业 • P203:3、5