最短路模型

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

例2 求右图所示带权图中从v1到 v8 的最短路 解:这里只给出结果 P(v1)=0 , P(v4)=1 , P(v3)=3 , P(v2)=5 ,
6
v2
2 3 1
1
v5
2 6 3
v9
3
v1
v3
2
6 10
4
P(v5)=6 , P(v9)=8 , P(v7)=9 , P(v6)=10 ,
v4
v6
2
v7 4
如果T(vj)>P(vk) +wkj ,则把T(vj) 修改为P(vk) +wkj ,把 (vj) 修改为k; 否则转入(3) 。
(3) 令T (v ji ) min {T (v j )}
v j S i
如果T (v ji ) , 则把v ji 的T 标号变为P标号,P(v ji ) T (v ji ), 令S i 1 S i {v ji }, k ji 把 i 换成 i 1, 转入( 1);否则终止, 这时对每个v Si , d (v s , v ) P(v ), 而对每个v S i , d (v s , v ) T (v )
i=0 : S0={v1} , P(v1) = 0 , (v1) =0 , T(vi)=+, (v) =M ,(i =2,3, …,9) , k=1 (2)因为(v1 ,v2) E ,且v2 S0, P(v1)+w12 v1 <T(v2), 把T(v2)修改为P(v1)+w12=6 , (v2) 修改为1 ;
以引例为例,说明标号法的基本思想。
s =1,因所有wij0,故d(v1,v1)=0, 这 时v1 是具有P 标号的点。 考察从v1出发的三条弧(v1,v2), (v1,v3), (v1,v4) 。如果从v1出发沿(v1,v2)到达v2, 则需要d(v1,v1)+w12=6单位费用;如果 v1
v2
v8
P(v8)=11; (v1)=0 , (v4)=1 , (v3)=1 , (v2)=3 , (v5)=2, (v9)=5 , (v7)=5 , (v6)=5, (v8)=9 。 最短路:(v1,v3,v2,v5,v9,v8) , d(v1,v8)=11 v1 例3 求右图中从v0到v5 的最短路
v0
4
2
v2
1
v4
例3 设备更新问题
某企业使用一台设备,每年年初,经理就要决定是购置新设备,还 是继续使用旧的。若购置新设备,就要支付一定的购置费;若继续 使用旧的,则需要支付一定的维修费。现在的问题是如何制定一个 几年之内的设备更新计划,使得总的支付费用最少。我们用一个五 年内要更新某设备的计划为例,若该种设备在各年年初的价格为下 表1;还已知使用不同时间的设备所需维修费为下表2。
第 1年 11 使用年数 维修费用
第 2年 11 0- 1 5
第 3年 12 1- 2 6 2- 3 8
第 4年 12 3- 4 11
第 5年 13 4- 5 18
第1,3年年初 或1,4年年初 购进 v1 总费用:53 Vi表示第i 年 年初购进一 台新设备, 弧(vi,vj)表 示第i 年初购 进的设备一 直使用到第j 年年初。
6 3 2
1
v5
2 6 3
v9
3
v3
2
1
6 4 10
10
v4
v6
2
v7 4
v8
从v1出发沿(v1,v3)到达v3 ,则需要d(v1,v1)+w13=3单位费用;类似地 若沿(v1,v4)到达v4 , 则需要d(v1,v1)+w14=1单位费用。由于 min {d(v1,v1)+w12 , d(v1,v1)+w13 , d(v1,v1)+w14}= d(v1,v1)+w14=1 所以从v1出发到达v4所需要的最小费用必定是1单位,即从v1到v4的 最短路是(v1,v4) ,d(v1,v4)=1 。v4 变成具有P 标号点。
1 7 5
v3
2 3 6
v0
4
2
v5
用标号法解题时,可将计算过程用 一张图表来表示。
v2
1
v4
vk
i 0 1 2 3 4 5
v0
v1
v2
v3
v4
v5
0
1 1/v0
4 3 3/v1
+ 8 8 7 7/v4
v1
1
+ 6 4 4/v2
+ + + 10 9 9/v3
v3
2 3 6
7
5
最短路:T=v0v1v2v4v3v5
最短路问题:设G 是带权图,vs,vt是G 的两个顶点,P是G 中从vs到 vt的一条通路,定义路P 的权为P 中所有边的权之和,记为w(P)。 最短路就是在所有从vs到vt的路中,求一条权最小的路,即求一条 从vs到vt的路P0,使
w( P0 ) min w( P)
P
上式中对G 中所有从vs到vt的路P 取最小,称P0为从vs到vt的最短路。 路P0的权称为从vs到vt的距离,记为d(vs,vt),显然d(vs,vt)与d(vt,vs)不 一定相等。 二、最短路算法 设G=<V,E,W>为n阶带权图,wij0,若vi与vj 不相邻,令wij=∞
(3)在所有的T 标号中,T(v5)=6最小,令P(v5)=6 , 令 S4={v1,v4,v3,v2,v5} , k=5 。
i=4: (2)把T(v6) ,T(v7) ,T(v8)分别 修改为10,9,12 ; (v6), (v7), (v8)修改为5 (3)在所有的T 标号中,T(v7)=9最小, 令P(v7)=9 , 令S5={v1,v4,v3,v2,v5 ,v7} , k=7 。
标号法:标号法是由E.W.Dijkstra于1959年提出来的,其基本思想 是:从vs出发,逐步地向外探寻最短路。在执行过程中,与每点对 应,记录下一个数(称为这个点的标号),它或者表示从vs到该点 的最短路的权(称为P 标号),或者表示从vs 到该点的最短路的权 的上界(称为T 标号),方法的每步是去修改T 标号,并把某个T 标号的点改变为具有P 标号的点,从而使G 中具有P 标号的顶点数 多一个,这样,至多经过p-1步,就可以求出从vs到各点的最短路。
i=6: 在所有的T 标号中,T(v8)=12最小,令P(v8)=12 , 令 S7={v1,v4,v3,v2,v5 ,v7 ,v6,v8 } , k=8 。 最短路:(v1,v3,v2,v5,v8)
i=7: T(v9)=+ ,算法终止。 d(v1,v8)=12 算法终止时:d(v1,vi)=P(vi) , i =1 ,2 , …, 8 ;从v1到v9不存在路。
所以从v1出发到达v3所需要的最小费用必定是3 单位,即从v1到v3的 最短路是(v1,v3) ,d(v1,v3)=3 。v3变成具有P 标号点。如此重复此过 程,可以求出从v1到任意一点的最短路。 几个记号:用P ,T 分别表示某点具有P 标号,T 标号,用Si 表示 第i 步时具有P 标号点的集合。在每个点v 处给一个值 (v) 。如果 算法结束时, (v) =m ,表示从vs 到v 的最短路上,v 的前一个点 是vm ;如果(v) =M ,则表示G 中不含从vs 到v 的最短路;如果 (v) =0,则表示v =vs 。 Dijkstra方法的步骤: 开始(i =0)令S0 ={vs },P(vs )=0 , (vs) =0 ,对每个v ≠vs ,令T(v)=+, (v)=M ,令k = s 。 (1)如果Si =V ,算法终止,这时,对每个v Si ,d(vs ,v) =P(v);否 则转(2) (2)考察每个使(vk ,vj) E ,且vj Si 的点vj 。
1 6
v2
2
1
v5
2 6
v9
3
3
v3
2
6 4 10
10
3
v4
v6
2
v7 4 v8
同理,把T(v3)修改为P(v1)+w13=3 , (v3)修改为1 ;把T(v4)修改为 P(v1)+w14=1, (v4)修改为1 。
(3)在所有的T 标号中,T(v4)=1最 小,令P(v4)=1,令S1=S0{v4} , k=4 。 i=1 : (2)把T(v6)修改为P(v4)+w46=11 , v1 (v6)修改为4 (3)在所有的T 标号中,T(v3)=3最小, 令P(v3)=3,令S2={v1,v4,v3} , k=3 。 i=2 :
考察从v1及v4指向的其余点的弧,由上已知,从v1出发分别沿(v1,v2), (v1,v3) 到达v2,v3, 所需6 ,3单位费用,而从v1出发沿(v1,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
一、引例 例1:已知如图所示的单行线交通网, 每弧旁的数字表示通过这条单行线所 需的费用。现在某人要从v1出发通过 v1 这个交通网到v8 ,求使总费用最小的 旅行路线。
v2
6 3 2
1
v5
2 6 3
v9
3
v3
2
1
6 4 10
10Байду номын сангаас
v4
v6
2
v7 4 v8
对于有向图G 或无向图G 的每一条边e ,附加一个实数w(e),则称 w(e)为边e 上的权,当e=(vi,vj)时,w(e)也可记为wij 。G 连同其各边 上的权称为带权图,带权图常记为G=<V,E,W>。
v2
6 2 3
1
v5
2 6 3
v9
3
v1
1
v3
2
6 4 10
10
v4
v6
2
v7 4
v8
i=5: (2)因T(v8)<P(v7)+w78 , 所以T(v8)不变 (3)在所有的T 标号中,T(v6)=10最小,令P(v6)=10 , 令 S6={v1,v4,v3,v2,v5 ,v7 ,v6} , k=6 。
16
22
30 16
41
59
23
v2
v3
17 22
v4
17 31
v5
18 41
v6
i
vk
v1
v2
v3
v4
v5
v6
0 1 2 3 4 5
0
16 16/v1
22 22 22/v1
30 30 30 30/v1
41 41 41 41 41/v1
59 57 53 53 53 53/v3,v4
v2
6 3 2
1
v5
2 6 3
v9
3
v3
2
1
6 4 10
10
v4
v6
2
v7 4
v8
(2)把T(v2)修改为P(v3)+w32=5 , (v2)修改为3
(3)在所有的T 标号中,T(v2)=5最小,令P(v2)=5,令S3={v1,v4,v3,v2} , k=2 。 i=3 : (2)把T(v5)修改为P(v2)+w25=6 , (v5)修改为2
相关文档
最新文档