运筹学_最短路问题精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T(v3)=min(T(v2), P(v1)+l13)=min(+∞,0+6)=6 ⑶P(v2)=4, (v1, v2) ⑷ T(v4)=min(T(v4), P(v2)+l24)
=min(+∞,4+5)=9 T(v5)=min(T(v5), P(v2)+l25)
=min(+∞,4+4)=8
⑸P(v3)=6, (v1, v3)
5 0 10 ∞ 2 ∞2 8 4 0 ∞ 2 18 ∞ 2
23028
0 5 2 2∞ 2 8 2 4∞
23028 5 0 3∞2
7 3 3 ∞ 10
23028 1 10 0 6 4
3 13 0 8 12
§3 最短路问题
试探性标号(tentative label), 永久性标号(permanent label)
Dijkstra 算法(不含负权边)
⑴ 给vi 以P标号, P( vi )=0 , 其余各点均给T标号, T (vi)=+∞ ⑵ 与刚获P标号点vi 以相邻只有T 标号各点v j 改进:
T (v j) = min [T (v j), P (v i) + l i j ]
⑶ 比较所有具有T标号的点, 最小者改为P标号。
P (v i) = min [T (v j) ] 并列最小者, 同时改为P标号。
若全部点均为P标号则停;否则用 v i 代 v i , 转 ⑵ .
例3
用Dijkstra 算法
v2
7
v5
求v1点到v7点v2的最短7路。
v5
5
3
55
3
v1 0 2
2 7
6 v4 2
2 7
6
22
76 v4 2
1 v7 10 6
v3
4
v6
v3
4
v6 6
例9 用Dijkstra 算法 求v1点到v8点的最短路。 ⑴ P(v1)=0, 余皆为T标号:T (vi)=+∞ ( i = 2,…,8 ) ⑵ T(v2)=min(T(v2), P(v1)+l12)=min(+∞,0+4)=4
1 v7 v1 0
2 7
6
22
6 v4 2
1 v7 6
vv32
4 7
vv65
vv32
4 7
vv6567
5
3
55
3
v1 0
2 7
22
6 v4 2
1 v7 6
v1 0 2
2
2 7
76 v4 2
1 v7 6
vv32
4 7
vv65
vv32
4 7
vv6567
55
3
55
3
v1 0
2 7
22
6 v4 2
1 v7 v1 0
7∞9∞6
2∞604 1 10 0 6 4
3∞6 6 8
∞2 4 4 0 ∞2 4 4 0 ∞2 4 4 0
0 5 2 2 ∞ 5 0 3 ∞ 2 1 10 0 6 4 ∞ 7 6 6 ∞ ∞ 2 7 ∞ ∞ ∞ 12 4 10 4
P158 类例4求图中任意两点间的最短路。
2∞604 2∞2 0 4 4∞8 0 8
∞2 4 4 0 2∞2 0 4 ∞∞ 6 4 4
2∞604 ∞2 8 4 0 ∞ ∞ 14 4 4
∞2 4 4 0 ∞2 8 4 0 ∞ 4 12 8 0
0 5 1 2∞ 0 5 2 2∞
0 10 3 4 ∞
0 5 1 2∞ 5 0 3∞2
5 5 4 ∞∞
0 5 1 2∞ 1 10 0 6 4
1 15 1 8 ∞
2∞604 ∞2 440
53 1
108 2
v1 2 v3 4 v5
2 6 24
v4 dij为两相邻点的距离, 是从 i 到 j 点的直接距离。
从 i 到 j 点的最短距离不一定是 i→ j,
可能是i→ l → j, i→ l → k→ j, 或 i→ l → …→ k→ j,
n个点的网络, i 到j 的最短距离经过的中间点最多有n-2个
所以我们先考虑与之间有一个中间点的情况.
P158 类例4 求图中任意两点间的最短路。
v2
所以我们先考虑 i 与 j 之间有一个 中间点的情况 D(0) =
求v1→v2的最短距离为,
0 5 1 2∞ 5 0 10 ∞ 2 23 028
2∞604 ∞2 440
53 1
108 2
v1 2 v3 4 v5
v2
5
v1
2 7
2
v3
7
6 v4 2
v5 3
1 v7 6
4
v6
⑹T(v4)=min(T(v4), p(v3)+l34)=min(6,6+4)=9,
T(v5)=min(T(v5), P(v3)+l35)=min(8,6+7)=8
P158 类例4 求图中任意两点间的最短路。
v2
D(0) =
0 5 1 2∞ 5 0 10 ∞ 2 23 028
5 0 10 ∞ 2 5 0 3∞2
10 0 13 ∞ 4
5 0 10 ∞ 2 1 10 0 6 4
6 10 10 ∞ 6
0 5 1 2∞ 2∞2 0 4 2∞3 2∞
5 0 10 ∞ 2 2∞2 0 4 7 ∞ 12 ∞ 6
0 5 1 2∞ ∞2 8 4 0 ∞7 9 6∞
5 0 10 ∞ 2 ∞2 8 4 0 ∞ 2 18 ∞ 2
5 0 10 ∞ 2 0522∞
5 5 12 ∞ ∞
5 0 10 ∞ 2 5 0 3∞2
10 0 13 ∞ 4
5 0 10 ∞ 2 1 10 0 6 4
6 10 10 ∞ 6
0 5 1 2∞ 2∞2 0 4 2∞3 2∞
5 0 10 ∞ 2 2∞2 0 4 7 ∞ 12 ∞ 6
0 5 1 2∞ ∞2 8 4 0 ∞7 9 6∞
23028
0 5 2 2∞ 2 8 2 4∞
Fra Baidu bibliotek
23028 5 0 3∞2
7 3 3 ∞ 10
23028 1 10 0 6 4
3 13 0 8 12
23028 2∞2 0 4
4 ∞ 2 2 12
23028 ∞2 8 4 0
∞5 8 6 8
2∞604
0 5 2 2∞ 2∞8 2∞
2∞604 5 0 3∞2
2 6 24
v4
min{ d11+d12, d12+d22, d13+d32, d14+d42, d15+d52 } 即 min { d i r + d r 2 }
r = 1, 2, …, n
r 应经过网络的每一点,或网络中的每一点都要作中间点.
具体操作是把第i行和转置后的第j列相加,从中找出最小者.
第一行 转置后的第二列
0 5 1 2∞ 5 0 3∞ 2
5 5 4∞ ∞
d12(1) = 4
0 5 1 2∞ 0 5 2 2∞
0 10 3 4 ∞
0 5 1 2∞ 5 0 3∞2
5 5 4 ∞∞
0 5 1 2∞ 1 10 0 6 4
1 15 1 8 ∞
5 0 10 ∞ 2 0522∞
5 5 12 ∞ ∞
=min(+∞,4+5)=9 T(v5)=min(T(v5), P(v2)+l25)
=min(+∞,4+4)=8
⑸P(v3)=6, (v1, v3)
5 0 10 ∞ 2 ∞2 8 4 0 ∞ 2 18 ∞ 2
23028
0 5 2 2∞ 2 8 2 4∞
23028 5 0 3∞2
7 3 3 ∞ 10
23028 1 10 0 6 4
3 13 0 8 12
§3 最短路问题
试探性标号(tentative label), 永久性标号(permanent label)
Dijkstra 算法(不含负权边)
⑴ 给vi 以P标号, P( vi )=0 , 其余各点均给T标号, T (vi)=+∞ ⑵ 与刚获P标号点vi 以相邻只有T 标号各点v j 改进:
T (v j) = min [T (v j), P (v i) + l i j ]
⑶ 比较所有具有T标号的点, 最小者改为P标号。
P (v i) = min [T (v j) ] 并列最小者, 同时改为P标号。
若全部点均为P标号则停;否则用 v i 代 v i , 转 ⑵ .
例3
用Dijkstra 算法
v2
7
v5
求v1点到v7点v2的最短7路。
v5
5
3
55
3
v1 0 2
2 7
6 v4 2
2 7
6
22
76 v4 2
1 v7 10 6
v3
4
v6
v3
4
v6 6
例9 用Dijkstra 算法 求v1点到v8点的最短路。 ⑴ P(v1)=0, 余皆为T标号:T (vi)=+∞ ( i = 2,…,8 ) ⑵ T(v2)=min(T(v2), P(v1)+l12)=min(+∞,0+4)=4
1 v7 v1 0
2 7
6
22
6 v4 2
1 v7 6
vv32
4 7
vv65
vv32
4 7
vv6567
5
3
55
3
v1 0
2 7
22
6 v4 2
1 v7 6
v1 0 2
2
2 7
76 v4 2
1 v7 6
vv32
4 7
vv65
vv32
4 7
vv6567
55
3
55
3
v1 0
2 7
22
6 v4 2
1 v7 v1 0
7∞9∞6
2∞604 1 10 0 6 4
3∞6 6 8
∞2 4 4 0 ∞2 4 4 0 ∞2 4 4 0
0 5 2 2 ∞ 5 0 3 ∞ 2 1 10 0 6 4 ∞ 7 6 6 ∞ ∞ 2 7 ∞ ∞ ∞ 12 4 10 4
P158 类例4求图中任意两点间的最短路。
2∞604 2∞2 0 4 4∞8 0 8
∞2 4 4 0 2∞2 0 4 ∞∞ 6 4 4
2∞604 ∞2 8 4 0 ∞ ∞ 14 4 4
∞2 4 4 0 ∞2 8 4 0 ∞ 4 12 8 0
0 5 1 2∞ 0 5 2 2∞
0 10 3 4 ∞
0 5 1 2∞ 5 0 3∞2
5 5 4 ∞∞
0 5 1 2∞ 1 10 0 6 4
1 15 1 8 ∞
2∞604 ∞2 440
53 1
108 2
v1 2 v3 4 v5
2 6 24
v4 dij为两相邻点的距离, 是从 i 到 j 点的直接距离。
从 i 到 j 点的最短距离不一定是 i→ j,
可能是i→ l → j, i→ l → k→ j, 或 i→ l → …→ k→ j,
n个点的网络, i 到j 的最短距离经过的中间点最多有n-2个
所以我们先考虑与之间有一个中间点的情况.
P158 类例4 求图中任意两点间的最短路。
v2
所以我们先考虑 i 与 j 之间有一个 中间点的情况 D(0) =
求v1→v2的最短距离为,
0 5 1 2∞ 5 0 10 ∞ 2 23 028
2∞604 ∞2 440
53 1
108 2
v1 2 v3 4 v5
v2
5
v1
2 7
2
v3
7
6 v4 2
v5 3
1 v7 6
4
v6
⑹T(v4)=min(T(v4), p(v3)+l34)=min(6,6+4)=9,
T(v5)=min(T(v5), P(v3)+l35)=min(8,6+7)=8
P158 类例4 求图中任意两点间的最短路。
v2
D(0) =
0 5 1 2∞ 5 0 10 ∞ 2 23 028
5 0 10 ∞ 2 5 0 3∞2
10 0 13 ∞ 4
5 0 10 ∞ 2 1 10 0 6 4
6 10 10 ∞ 6
0 5 1 2∞ 2∞2 0 4 2∞3 2∞
5 0 10 ∞ 2 2∞2 0 4 7 ∞ 12 ∞ 6
0 5 1 2∞ ∞2 8 4 0 ∞7 9 6∞
5 0 10 ∞ 2 ∞2 8 4 0 ∞ 2 18 ∞ 2
5 0 10 ∞ 2 0522∞
5 5 12 ∞ ∞
5 0 10 ∞ 2 5 0 3∞2
10 0 13 ∞ 4
5 0 10 ∞ 2 1 10 0 6 4
6 10 10 ∞ 6
0 5 1 2∞ 2∞2 0 4 2∞3 2∞
5 0 10 ∞ 2 2∞2 0 4 7 ∞ 12 ∞ 6
0 5 1 2∞ ∞2 8 4 0 ∞7 9 6∞
23028
0 5 2 2∞ 2 8 2 4∞
Fra Baidu bibliotek
23028 5 0 3∞2
7 3 3 ∞ 10
23028 1 10 0 6 4
3 13 0 8 12
23028 2∞2 0 4
4 ∞ 2 2 12
23028 ∞2 8 4 0
∞5 8 6 8
2∞604
0 5 2 2∞ 2∞8 2∞
2∞604 5 0 3∞2
2 6 24
v4
min{ d11+d12, d12+d22, d13+d32, d14+d42, d15+d52 } 即 min { d i r + d r 2 }
r = 1, 2, …, n
r 应经过网络的每一点,或网络中的每一点都要作中间点.
具体操作是把第i行和转置后的第j列相加,从中找出最小者.
第一行 转置后的第二列
0 5 1 2∞ 5 0 3∞ 2
5 5 4∞ ∞
d12(1) = 4
0 5 1 2∞ 0 5 2 2∞
0 10 3 4 ∞
0 5 1 2∞ 5 0 3∞2
5 5 4 ∞∞
0 5 1 2∞ 1 10 0 6 4
1 15 1 8 ∞
5 0 10 ∞ 2 0522∞
5 5 12 ∞ ∞