运筹学及其应用10.2 最短路问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 ∞,1
11,4
∞,1
v8
18
v2 5,3 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 9,5
10,5
12,5
v8
19
v2 5,3 1
9
v2 6,1 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
∞,1
∞,1
v9
3
∞,1
v8
10
v2 6,1 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
∞,1
∞,1
v9
3
∞,1
v8
11
v2 6,1 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 9,5
10,5
12,5
v8
22
v2 5,3 1
v5 6,2 2
∞,1
v9
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
6
3
3 4
10 4
v6 2 v7 9,5
10,5
12,5
v8
从v1 到 v8 的最短路的长度为:12
7
这是因为从v1到达v4的任一条路P,假如不是
(v1 ,v4),则必先沿(v1 ,v2)到达v2,或者沿 (v1 ,v3)到达v3,而这时的路程已是6或者3单位。 由于所有的权wij ≥0,因此,不论他如何再从v2 或 者v3 到达v4 ,所经过的总路程都不会比1少,于是 就有d(v1 ,v4)=1。这样就使v4 变成具有P标号的 点。现在看从v1 和v4指向其余点的弧。如上所述,
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
11,4
∞,1
v9
3
∞,1
v8
14
v2 15,53 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
11,4
∞,1
v9
3
∞,1
v8
15
v2 5,3 1
6 2
v1
经过这个交通网到达v8,要寻求总路程最短的线路。
v2 1
v5
2
v9
6 2
6
3
v1
3 v3 6
1
2
3 4 10
4
v8
v4
10
2 v7
v6
2
从v1到v8:
P1=(v1,v2,v5,v8)
费用 6+1+6=13
P2=(v1,v3,v4, v6, v7, v8) 费用 3+2+10+2+4=21
P3= ……
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
∞,1
∞,1
v9
3
∞,1
v8
12
v2 6,1 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4v6ຫໍສະໝຸດ 2v7∞,1
11,4
∞,1
v9
3
∞,1
v8
13
v2 16,51 1
6 2
下面介绍在一个赋权有向图中寻求最短路 的方法——Dijkstra算法,它是在1959年提出来 的。目前公认,在所有的权wij ≥0时,这个算法 是寻求最短路问题最好的算法。并且,这个算法 实际上也给出了从一个始定点vs到任意一个点vj 的最短路。
5
Dijkstra算法的基本思想是从vs出发,逐步向外寻找 最短路。
在运算过程中,与每个点对应,记录一个数,叫做
一个点的标号。它或者表示从vs到该点的最短路权 (叫做P 标号),或者表示从vs到该点最短路权的 上界(叫做T 标号)。
算法的每一步是去修改T标号,把某一个具有T 标号
的点改变为具有P 标号的点,使图D中具有P 标号的
顶点多一个。这样,至多经过n-1 步,就可求出从vs
到各点vj 的最短路。
6
以例题说明这个基本思想。在例中,S=1。因 为Wij ≥0,d(v1 ,v1)=0。这时,v1是具有P标号的 点。现在看从v1出发的三条弧(v1 ,v2),(v1 ,v3) 和(v1 ,v4)。如果一个人从v1出发沿(v1 ,v2)到达 v2,这时的路程是d(v1,v1)+w12=6单位。如果从v1 出发,沿(v1 ,v3)到达v3 ,则是d(v1 ,v1)+w13=3 单位。同理,沿(v1 ,v4)到达v4,是d(v1, v1) +w14=1单位。因此,他从v1出发到达v4的最短路必 是(v1 , v4),d(v1 ,v4)=1。
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 ∞,1 2
6
3
4 10
4
v6
2
v7
∞,1
11,4
∞,1
v9
3
∞,1
v8
16
v2 5,3 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 ∞,1
11,4
∞,1
v8
17
v2 5,3 1
6 2
v1
从v1出发,分别沿(v1 ,v2),(v1 ,v3)到达v2,v3,
经过
8
的路程是6或者3单位。从v4出发沿(v4 ,v6)到达 v6,经过的路程是d(v1,v4)+ w46=1 +10=11单位。 而min {d(v1 ,v1)+w12,d(v1 ,v1)+w13,d(v1 ,v4) +w46}=d(v1,v1)+w13=3单位。根据同样的理由, 可以断定,从v1到达v3的最短路是(v1,v3),d (v1,v3)=3。这样,又使点v3变为具有P标号的点, 不断重复以上过程,就可以求出从vs到达任一点vj 的最短路。
v2 1
v5
2
v9
6 2
6
3
v1
3 v3 6
1
2
3 4 10
4
v8
v4
10
2 v7
v6
3
最短路问题:
设一个赋权有向图D=(V,A),对于每一个弧a =(vi ,vj), 相应地有一个权wij , vs ,vt是D中的两个顶点,P 是D中从vs 到vt 的任意一条路,定义路的权是P 中所有弧的权的和, 记作S(p)。
从v1 到 v8 的最短路线为:
v1
v3 v2 v5 v8
23
步骤:
1、给起点一个永久标号(0,0)。标号中的第一 个数表示从起点到该点的距离;第二个数表示该点 的前面没有点了。
2、修改非永久标号点 vi 的临时标号为 (a,b), 其中 a 为以 vi 为终点的弧长,如果其起点为永久标号,则 求其永久标号的第一个数与弧长的和,如果这样的 和有多个,则取最小值。b为前一个点的下标。
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 9,5
10,5
12,5
v8
20
v2 5,3 1
6 2
v1
3
3,1
v3
0,0
6
1
2
10
v4
1,1
v5 6,2 2
∞,1
v9
6
3
3 4
10 4
v6 2 v7 9,5
10,5
12,5
v8
21
v2 5,3 1
3、在临时标号中取第一个标号的最小值,将该标 号改为永久标号,再返回到 2步
24
作业: P254 6.1
25
无向图上的Dijkstra算法
方法: 1. 无向变有向 2. 寻找邻点时注意区别 结果:
所有顶点都有标号; 最优结果不会劣于相应有向图的最优结果。
26
注:含有负权的最短路
v1 2
1 v2
§10. 2 最短路问题
一.引言 最短路径问题是图论中十分重要的最优化问
题之一,它作为一个经常被用到的基本工具,可以 解决生产实际中的许多问题,比如城市中的管道铺 设,线路安排,工厂布局,设备更新等等。也可以 用于解决其它的最优化问题。
1
例 如图所示的单行线交通网,每个弧旁边的数字
表示这条单行线的长度。现在有一个人要从v出发, 1
-3 v3
Dijkstra算法失效
27
最短路问题就是要在所有从vs到vt的路P中,寻找一个权最 小的路P0 ,即S(P0)=minS(p)。P0 叫做从vs到vt的最短路。
P0的权S(P0) 叫做从vs到vt 的距离,记作d(vs,vt)。
由于D是有向图,很明显d(vs,vt)与d(vt,vs)一般不
相等。
4
二.Dijkstra算法(双标号法)