最短路问题__D算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
——从始点到该标号点的最短路权 ② T 标号(Temporary临时性标号) ——从始点到该标号点的最短路权上界
(4) 计算步骤及例子:
第一步:给起始点v1标上固定标号p(v1 ) 0 其余各点标临时性标号 T(vj)=, j1; 第二步:考虑满足如下条件的所有点 v j ①与 v1相邻的点,即 (v1 , v j ) A ; ② v j 具有T 标号,即v j s , s 为T 标号点集.
1
2
3
3
7
6
p7=3
p8=10
1到8的最短路径为{1,4,7,5,8},长度为10。
v2 2 5 6 v5 4 1 4 1 3 v7
2
v1
4 v4 1
2 v6
v3
1.D氏标号法(Dijkstra)
(1)求解思路——从始点出发,逐步顺序 地向外探寻,每向外延伸一步都要求是最 短的。
(2)使用条件——网络中所有的弧权均
非负,即 lij 0 。
(3)选用符号的意义:
① P 标号(Permanent固定/永久性标号)
最短路问题
一、问题的提法及应用背景
(1)问题的提法——寻求网络中两点间 的最短路就是寻求连接这两个点的边的 总权数最小的通路。(注意:在有向图 中,通路——开的初等链中所有的弧应 是首尾相连的。) (2)应用背景——管道铺设、线路安排、 厂区布局、设备更新等。
二、最短路算法
1. D氏标号法(Dijkstra);边权非负 2. 列表法(福德法);有负权,无负回路
min{T (v j )} min{ T (v3 ),T (v4 ),T (v5 ),T (v6 )}
v j s
T (v3 ) 4,
所以有,p(v3 ) 4
v2
2 2 4
v4 4
3 v1
5
1 v3
2
2
v6
v5
T (v5 ) , P(v3 ) l35 ] min[5, 4 4] 5 (5) T (v5 ) min[
min[ , 5 4, 5 2] 7
min{T (v j )} min{ T (v6 )} 7,
v j s
所以有,p(v6 ) 7
反向追踪得v1到v6的最短路为:v1 v2 v5 v6
求从1到8的最短路径
1
1 2 10 4 5 6 4 2 7
2
5
6 9 5 3 8 4
1
2wenku.baidu.com
3
3
7
6
p7=3
min {d23,d25,d75,d78}=min {2+6,2+5,3+3,3+8}=min {8,7,6,11}=6
X={1,2,4,5,6,7}, p5=6
X={1,2,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
例一、
用Dijkstra算法求下图从v1到v6的最短路。
v2
2 v4 3 v1 5 v3 1 4
2
4 2 v6
2
v5
(4)T (v3 ) min[T (v3 ) , P(v2 ) l23 ] min[5 , 3 1] 4
T (v4 ) min[ T (v4 ) , P(v2 ) l24 ] min[ , 3 2] 5 T (v5 ) min[ T (v5 ) , P(v2 ) l25 ] min[ , 3 2] 5
min{T (v j )} min{ T (v4 ),T (v5 ),T (v6 )} T (v4 ) T (v5 ) 5,
v j s
所以有,p(v4 ) 5, p(v5 ) 5
(6) T (v6 ) min[ T (v6 ) , P(v4 ) l46 , P(v5 ) l56 ]
1
2
3
3
7
6
p7=3
min {d23,d53,d58,d78}=min {2+6,6+9,6+4,3+8}=min {8,15,10,11}=8
X={1,2,3,4,5,6,7}, p3=8
X={1,2,3,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
T (v j ), p(v1 ) l1 j } ,并将结 修改 v j 的T标号为 min{ 果仍记为T(vj)。= l1j
若网络图中已无满足此条件的T标号点,停止计算。
,
第三步: 令 T (v j ) min{T (v j )} , 然后将 v j0 的
0
v j s
T 标号改成P 标号,转入第二步。此时,要 注意将第二步中的 v1 改为 v j0 。
p7=3
min {d23,d25,c47,d67}=min {2+6,2+5,1+2,3+4}=min {8,7,3,7}=3
X={1,2,4,6,7}, p7=3
X={1,2,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9
T (v3 ) min[ T (v3 ) , P(v1 ) l13 ] min[ , 0 5] 5
min{T (v j )} min{ T (v2 ),T (v3 ),T (v4 ),T (v5 ),T (v6 )}
v j s
T (v2 ) 3,
所以有,p(v2 ) 3
1
2
3
3
7
6
p7=3
p8=10
min {d38,d58,d78}=min {8+6,6+4,3+7}=min {14,10,11}=10
X={1,2,3,4,5,6,7,8}, p8=10
X={1,2,3,4,6,7,8}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
例一、
用Dijkstra算法求下图从v1到v6的最短路。
v2
2 v4 3 v1 5 v3 1 4
2
4 2 v6
2
v5
解 (1)首先给v1以P标号,给其余所有点T标号。
P(v1 ) 0
T (vi ) (i 2 , 3,, 6)
(2) T (v2 ) min[T (v2 ) , P(v1 ) l12 ] min[ , 0 3] 3
3
3
7
6
8
X={1}
p1=0 2 1 p4=1 4 5 6 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3
7
6
min {d12,d14,d16}=min {0+2,0+1,0+3}=min {2,1,3}=1
X={1,4}, p4=1
X={1,4}
p1=0 p2=2 2 1 p4=1 4 5 6 4 2 7 10 6 5 9 5 3 8 4 8
7
6
min {d16,d23,d25,d47}=min {0+3,2+6,2+5,1+2}=min {3,8,7,3}=3
X={1,2,4,6}, p6=3
X={1,2,4,6}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3
7
6
1
2
3
3
7
6
min {d12,d16,d42,d47}=min {0+2,0+3,1+10,1+2}=min {2,3,11,3}=2
X={1,2,4}, p2=2
X={1,2,4}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3
(4) 计算步骤及例子:
第一步:给起始点v1标上固定标号p(v1 ) 0 其余各点标临时性标号 T(vj)=, j1; 第二步:考虑满足如下条件的所有点 v j ①与 v1相邻的点,即 (v1 , v j ) A ; ② v j 具有T 标号,即v j s , s 为T 标号点集.
1
2
3
3
7
6
p7=3
p8=10
1到8的最短路径为{1,4,7,5,8},长度为10。
v2 2 5 6 v5 4 1 4 1 3 v7
2
v1
4 v4 1
2 v6
v3
1.D氏标号法(Dijkstra)
(1)求解思路——从始点出发,逐步顺序 地向外探寻,每向外延伸一步都要求是最 短的。
(2)使用条件——网络中所有的弧权均
非负,即 lij 0 。
(3)选用符号的意义:
① P 标号(Permanent固定/永久性标号)
最短路问题
一、问题的提法及应用背景
(1)问题的提法——寻求网络中两点间 的最短路就是寻求连接这两个点的边的 总权数最小的通路。(注意:在有向图 中,通路——开的初等链中所有的弧应 是首尾相连的。) (2)应用背景——管道铺设、线路安排、 厂区布局、设备更新等。
二、最短路算法
1. D氏标号法(Dijkstra);边权非负 2. 列表法(福德法);有负权,无负回路
min{T (v j )} min{ T (v3 ),T (v4 ),T (v5 ),T (v6 )}
v j s
T (v3 ) 4,
所以有,p(v3 ) 4
v2
2 2 4
v4 4
3 v1
5
1 v3
2
2
v6
v5
T (v5 ) , P(v3 ) l35 ] min[5, 4 4] 5 (5) T (v5 ) min[
min[ , 5 4, 5 2] 7
min{T (v j )} min{ T (v6 )} 7,
v j s
所以有,p(v6 ) 7
反向追踪得v1到v6的最短路为:v1 v2 v5 v6
求从1到8的最短路径
1
1 2 10 4 5 6 4 2 7
2
5
6 9 5 3 8 4
1
2wenku.baidu.com
3
3
7
6
p7=3
min {d23,d25,d75,d78}=min {2+6,2+5,3+3,3+8}=min {8,7,6,11}=6
X={1,2,4,5,6,7}, p5=6
X={1,2,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
例一、
用Dijkstra算法求下图从v1到v6的最短路。
v2
2 v4 3 v1 5 v3 1 4
2
4 2 v6
2
v5
(4)T (v3 ) min[T (v3 ) , P(v2 ) l23 ] min[5 , 3 1] 4
T (v4 ) min[ T (v4 ) , P(v2 ) l24 ] min[ , 3 2] 5 T (v5 ) min[ T (v5 ) , P(v2 ) l25 ] min[ , 3 2] 5
min{T (v j )} min{ T (v4 ),T (v5 ),T (v6 )} T (v4 ) T (v5 ) 5,
v j s
所以有,p(v4 ) 5, p(v5 ) 5
(6) T (v6 ) min[ T (v6 ) , P(v4 ) l46 , P(v5 ) l56 ]
1
2
3
3
7
6
p7=3
min {d23,d53,d58,d78}=min {2+6,6+9,6+4,3+8}=min {8,15,10,11}=8
X={1,2,3,4,5,6,7}, p3=8
X={1,2,3,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
T (v j ), p(v1 ) l1 j } ,并将结 修改 v j 的T标号为 min{ 果仍记为T(vj)。= l1j
若网络图中已无满足此条件的T标号点,停止计算。
,
第三步: 令 T (v j ) min{T (v j )} , 然后将 v j0 的
0
v j s
T 标号改成P 标号,转入第二步。此时,要 注意将第二步中的 v1 改为 v j0 。
p7=3
min {d23,d25,c47,d67}=min {2+6,2+5,1+2,3+4}=min {8,7,3,7}=3
X={1,2,4,6,7}, p7=3
X={1,2,4,6,7}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9
T (v3 ) min[ T (v3 ) , P(v1 ) l13 ] min[ , 0 5] 5
min{T (v j )} min{ T (v2 ),T (v3 ),T (v4 ),T (v5 ),T (v6 )}
v j s
T (v2 ) 3,
所以有,p(v2 ) 3
1
2
3
3
7
6
p7=3
p8=10
min {d38,d58,d78}=min {8+6,6+4,3+7}=min {14,10,11}=10
X={1,2,3,4,5,6,7,8}, p8=10
X={1,2,3,4,6,7,8}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 p5=6 5 3 8 4 8 9 p3=8
例一、
用Dijkstra算法求下图从v1到v6的最短路。
v2
2 v4 3 v1 5 v3 1 4
2
4 2 v6
2
v5
解 (1)首先给v1以P标号,给其余所有点T标号。
P(v1 ) 0
T (vi ) (i 2 , 3,, 6)
(2) T (v2 ) min[T (v2 ) , P(v1 ) l12 ] min[ , 0 3] 3
3
3
7
6
8
X={1}
p1=0 2 1 p4=1 4 5 6 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3
7
6
min {d12,d14,d16}=min {0+2,0+1,0+3}=min {2,1,3}=1
X={1,4}, p4=1
X={1,4}
p1=0 p2=2 2 1 p4=1 4 5 6 4 2 7 10 6 5 9 5 3 8 4 8
7
6
min {d16,d23,d25,d47}=min {0+3,2+6,2+5,1+2}=min {3,8,7,3}=3
X={1,2,4,6}, p6=3
X={1,2,4,6}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3
7
6
1
2
3
3
7
6
min {d12,d16,d42,d47}=min {0+2,0+3,1+10,1+2}=min {2,3,11,3}=2
X={1,2,4}, p2=2
X={1,2,4}
p1=0 p2=2 2 1 p4=1 4 5 6 p6=3 4 2 7 10 6 5 9 5 3 8 4 8
1
2
3
3