OR 逐次逼近 和 FLOYD 算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
逐次逼近法
2013-7-13
1
二、逐次逼近算法
本算法可用于网络中带有负权的边时,求指定点 V1到网络中任
意一点的最短路。
基本思路是基于以下事实:如果V1到Vj的路径总是沿该路从V1 先到一点Vi,然后再沿边<Vi,Vj>到达Vj,则V1到Vi的这条路也是V1
到Vi的最短路。 令P1j表示从V1到Vj的最短路长,P1i表示从V1到Vi的最短路长,则必 有以下方程:
i
当进行t步,若出现
P (jt ) P (jt 1) 1 1
则停止;
P (jt ) ( j 1, 2,..., n ) 1
即为V1到各点的最短路径
例题:求下图中V1到各点的最短路径
V5 4 2 V1 5 V3 6 V6 2
-3
4
3 V8
-3
V4
4
7 V7
-1
解 初始条件为:
(1) (1) (1) (1) P11 0, P12 2, P13 5, P14 -3, (1) (1) (1) (1) P15 P16 P17 P18
第一轮迭代:
( (1) (1) (1) (1) P112) min{ P11 l11, P12 l 21, P13 l31, P14 l 41, (1) P15 l51,. . P18 l81} . , (1)
= mi n{0+ 0, 2+ , , 3 , , , , } 0 5+
(k ) ( k 1) ( k 1)
其中 dij =min[dij , dik (3)D
(n)
(n)
d kj ]
(n)
( k 1)
(dij ) nn 中元素dij 就是vi到v j的最短路长
2013-7-13
13
例13:求图中各点之间的最短距离
D
v1 v1 v2 v3 v4 v5 0 5 2 2 ∞ v2 5 0 3 ∞ 2 v3 1 10 0 6 4 v4 2 ∞ 2 0 4
P1(jk ) 的实际意义为V1到Vj之间至多含有k-1个中间点
的最短路权
因此在含有n个点的图中,如果不含有总权小于零的回 路,求从V1点到任意一点的最短路权,用上诉算法最多 经过n-1次必定收敛。 如果含有总权小于零的回路,最短路权没有下限。
Floyd算法
2013-7-13
10
Dijkstra算法是求源点到其它顶点的最短路径。 怎样求任意两个顶点之间的最短路径?我们可以把 Dijkstra算执行n次,每次从不同的顶点开始,则算 法时间复杂度为O(n3)。 Floyd弗洛伊德给出了另一个算法,时间复杂度 也是O(n3),但是形式上简单些。
2013-7-13
11
算法基本思想
(d n 令网络的权矩阵为 D ij)n
lij 其中dij
lij 为vi到v j的距离
,
(vi , v j ) E o.w
2013-7-13
12
算法基本步骤
(1)输入权矩阵 D(0) D (2)计算 D
(k )
(k )
(dij ) nn (k=1,2,3,...,n)
(0)
v5 ∞ 2 8 4 0
2013-7-13
14
2013-6
P1 j min( P1i lij )
i
用迭代法解方程: P1 j min( P1i lij ) i
开始时令
P1(1) l1 j j
即用V1与Vj间的直接距离做初始解,若V1与Vj之间无边,那么记+∞
第二步起,使用迭代公式: P1(jk ) min[ P1(i k 1) lij ]
( (1) (1) (1) (1) P122) min{ P11 l12, P12 l 22, P13 l32, P14 l 42, (1) P15 l52,. . P18 l82 } . , (1)
= mi n{0+ 2, 2+ 0, , 3 , , , , } 2 5+
如需求V1到V8的最短路径:
已知P18=10,而P18=min{P1i+Li8},在表中寻求满足等式的Vi点,
容易知道P16+L68=10,记下<V6,V8>; 再考察V6,由于P16=6,而6=0+6=P13+L36,记下<V3,V6>; 再考察V3,由于P13=0,而0=2+(-2)=P12+L23,记下<V2,V3>; 再考察V2,由于P12=2,而2=0+2=P11+L12,记下<V1,V2>; 所以V1到V8的最短路径为v1 v2 v3 v6 v8
第一轮迭代:
类似可得:
( P132) 0, P ( 2) 3, P ( 2) 6, 14 15 ( P162) 11 P ( 2) P ( 2) , , 17 18
(2) 可以看出 P1 j
表示V1两步到Vj的最短路径
计算结果: 第六列与第五列相同 为最后计算结果
已知最短路长,若需知道V1到各点的最短路径,可以用 “反追踪”的方法。
2013-7-13
1
二、逐次逼近算法
本算法可用于网络中带有负权的边时,求指定点 V1到网络中任
意一点的最短路。
基本思路是基于以下事实:如果V1到Vj的路径总是沿该路从V1 先到一点Vi,然后再沿边<Vi,Vj>到达Vj,则V1到Vi的这条路也是V1
到Vi的最短路。 令P1j表示从V1到Vj的最短路长,P1i表示从V1到Vi的最短路长,则必 有以下方程:
i
当进行t步,若出现
P (jt ) P (jt 1) 1 1
则停止;
P (jt ) ( j 1, 2,..., n ) 1
即为V1到各点的最短路径
例题:求下图中V1到各点的最短路径
V5 4 2 V1 5 V3 6 V6 2
-3
4
3 V8
-3
V4
4
7 V7
-1
解 初始条件为:
(1) (1) (1) (1) P11 0, P12 2, P13 5, P14 -3, (1) (1) (1) (1) P15 P16 P17 P18
第一轮迭代:
( (1) (1) (1) (1) P112) min{ P11 l11, P12 l 21, P13 l31, P14 l 41, (1) P15 l51,. . P18 l81} . , (1)
= mi n{0+ 0, 2+ , , 3 , , , , } 0 5+
(k ) ( k 1) ( k 1)
其中 dij =min[dij , dik (3)D
(n)
(n)
d kj ]
(n)
( k 1)
(dij ) nn 中元素dij 就是vi到v j的最短路长
2013-7-13
13
例13:求图中各点之间的最短距离
D
v1 v1 v2 v3 v4 v5 0 5 2 2 ∞ v2 5 0 3 ∞ 2 v3 1 10 0 6 4 v4 2 ∞ 2 0 4
P1(jk ) 的实际意义为V1到Vj之间至多含有k-1个中间点
的最短路权
因此在含有n个点的图中,如果不含有总权小于零的回 路,求从V1点到任意一点的最短路权,用上诉算法最多 经过n-1次必定收敛。 如果含有总权小于零的回路,最短路权没有下限。
Floyd算法
2013-7-13
10
Dijkstra算法是求源点到其它顶点的最短路径。 怎样求任意两个顶点之间的最短路径?我们可以把 Dijkstra算执行n次,每次从不同的顶点开始,则算 法时间复杂度为O(n3)。 Floyd弗洛伊德给出了另一个算法,时间复杂度 也是O(n3),但是形式上简单些。
2013-7-13
11
算法基本思想
(d n 令网络的权矩阵为 D ij)n
lij 其中dij
lij 为vi到v j的距离
,
(vi , v j ) E o.w
2013-7-13
12
算法基本步骤
(1)输入权矩阵 D(0) D (2)计算 D
(k )
(k )
(dij ) nn (k=1,2,3,...,n)
(0)
v5 ∞ 2 8 4 0
2013-7-13
14
2013-6
P1 j min( P1i lij )
i
用迭代法解方程: P1 j min( P1i lij ) i
开始时令
P1(1) l1 j j
即用V1与Vj间的直接距离做初始解,若V1与Vj之间无边,那么记+∞
第二步起,使用迭代公式: P1(jk ) min[ P1(i k 1) lij ]
( (1) (1) (1) (1) P122) min{ P11 l12, P12 l 22, P13 l32, P14 l 42, (1) P15 l52,. . P18 l82 } . , (1)
= mi n{0+ 2, 2+ 0, , 3 , , , , } 2 5+
如需求V1到V8的最短路径:
已知P18=10,而P18=min{P1i+Li8},在表中寻求满足等式的Vi点,
容易知道P16+L68=10,记下<V6,V8>; 再考察V6,由于P16=6,而6=0+6=P13+L36,记下<V3,V6>; 再考察V3,由于P13=0,而0=2+(-2)=P12+L23,记下<V2,V3>; 再考察V2,由于P12=2,而2=0+2=P11+L12,记下<V1,V2>; 所以V1到V8的最短路径为v1 v2 v3 v6 v8
第一轮迭代:
类似可得:
( P132) 0, P ( 2) 3, P ( 2) 6, 14 15 ( P162) 11 P ( 2) P ( 2) , , 17 18
(2) 可以看出 P1 j
表示V1两步到Vj的最短路径
计算结果: 第六列与第五列相同 为最后计算结果
已知最短路长,若需知道V1到各点的最短路径,可以用 “反追踪”的方法。