Floyd最短路径算法的动态优化_李洪波
- 格式:pdf
- 大小:138.42 KB
- 文档页数:4
李洪波 1, 王茂波 2 ( 1.烟台师范学院 数学与信息学院, 山东 烟台 264025;
2.大连理工大学 计算机系, 辽宁 大连 116023)
E- mail: fast_run_man@sina.com
摘 要: 根据 Floyd 最短路径算法的三层循环, 设计了动态优化新算法。动态优化新算法设计了独特的动态 AV 集合、可 发表 B 和可达表 A, 分别对原算法的外层循环、中层循环和内层循环进行极小化的运算。在极小化的处理过程中, 为保证 可发表 B 和可达表 A 中不存在重复元素, 引入了仅一次插入矩阵 M。动态优化新算法的时间复杂度为 O( n2+|AV|×e2/n2) ( |AV|!n) , 使得算法能够根据点数、边数和边的实际分布动态调整自身的性能。 关键词: Floyd 最短路径; AV 集合; 可达表 A; 可发表 B; 仅一次插入矩阵 M 文章编号: 1002- 8331( 2006) 34- 0060- 04 文献标识码: A 中图分类号: TP331
for( v=0; v<G.vexnum; ++v) //1.1 for( w=0; w<G.vexnum; ++w) //1.2 D[v][w]=G.arcs[v][w]; //1.3 for( u=0; u<G.vexnum; ++u) //1.4 for( v=0; v<G.vexnum; ++v) //1.5
1 ∞ 0 ∞ 4 ∞ 0 ∞ 4 ∞ 0 ∞ 4 ∞ 0 ∞ 4 ∞ 0 11 4
2 ∞ 12 0 ∞ ∞ 12 0 ∞ ∞ 12 0 16 ∞ 12 0 16 ∞ 12 0 16
3 ∞ ∞ 7 0 ∞ ∞ 7 0 ∞ ∞ 7 0 ∞ 19 7 0 ∞ 19 7 0
2.2 动态优化算法的设计
设有向图 G=( V, E) , 边数为 e, 点数为 n。引入一个辅助集 合 AV, AV 表示所有入度大于 0 的顶点集合, 当 AV 集合不空, 从中选择第一个顶点 P0( 下标 0 为顶点在 AV 集合中的序号) , 计算 D( P0) , 从 AV 集合中删除 P0。当 AV 集合不空, 重复上述 过程 依 次 计 算 D(P1) , … , D ( (P|AV|) |AV|为 AV 集 合 中 数 据 元 素 的 个 数) , D(P|AV|)[i][j]就是顶点 i 到顶点 j 的最短路径长度。动态优化 算法也是按路径长度递增的次序产生源点到各顶点的最短路 径, 只不过每次经过的中间点必须是入度大于 0 的点, 避免了 无谓的循环, 这构成动态优化算法的一个方面, 即如何选择中 间点以裁减路径中不可能经过的中间点的无关循环计算, 也就 是极小化算法 1 的 1.4 语句的执行次数。表 2 是 Floyd 最短路 径动态优化后有向图 G1 各点对间的最短路径求解过程。
若<vi, vj>存在, 则存在路径{vi, vj}( 路径中不含其它顶点) ; 若<vi, v1>, <v1, vj>存 在 , 则 存 在 路 径{vi, v1, vj}( 路 径 中 所 含 顶点序号不大于 1) ; 若{vi, …, v2}, {v2, …, vj}存在, 则存在一条路径{vi, …, v2, …, vj} ( 路径中所含顶点序号不大于 2) 。 依次类推, 则 vi 到 vj 的 最 短 路 径 应 是 上 述 这 些 路 径 中 , 路 径长度最小者。 现 定 义 一 个 n 阶 方 阵 序 列 D(-1), D(0), D(1), … , D(k), … , D , (n-1) 其中: D( - 1) [i][j]=G.arcs[i][j] D(k)[i][j]=Min{D(k-1)[i][j], D(k-1)[i][k]+D(k-1)[k][j]} 0!k!n- 1 从 上 述 计 算 公 式 可 见 , D(1) [i][j]是 从 vi 到 vj 的 中 间 顶 点 的 序 号 不 大 于 1 的 最 短 路 径 长 度 ; D(k)[i][j]是 从 vi 到 vj 的 中 间 顶 点的序号不大于 k 的最短路径长度 ; D(n-1)[i][j]是 从 vi 到 vj 的 最 短路径长度。Floyd 最短路径算法( 算法 1) 的 C 语言描述如下: void ShorestPath_FLOYD( MGraph G, DistanceMatrix &D) {
6
V0
V1
12
16
4
V2
V3
7
图 1 带权有向图 G1
Floyd 算法 1 的执行过程如表 1 所示。显然, 其循环语句的 执行频度为 43+42=80。观察图 1 不难发现, V0 顶点入度为 0, 它 不会成为任何点对间最短路径的中间点, 应该避免这样无关的 循环; 另一方面, 当 V1、V2 或 V3 依次作为中 间 点 求 解 最 短 路 径
for( w=0; w<G.vexnum; ++w) //1.6 if( D[v][u]+D[u][w]<D[v][w]) { //1.7 D[v][w]=D[v][u]+D[u][w]; //1.8 }
} 在 算 法 1 中 , MGraph 是 图 的 邻 接 矩 阵 存 储 结 构 体 类 型 , DistanceMatrix 是距离矩阵二维数组类型, 详见参考文献[1]。算 法 1 语句执行频度为 n3+n2, 时间复杂度为 O( n3) 。显然, 算法 1 的缺陷是时间开销为点数的多项式函数, 而不管该图是否存在 边。进一步, 对于具有 n 个孤立顶点没有弧的图, Floyd 最短路 径 算 法 处 理 的 时 间 开 销 是 n3+n2, 而 不 是 接 近 于 0。 为 此 , 对 Floyd 最短路径算法进行改进, 使其能够根据依赖于弧头的点 数做出动态的调整。举例说明一般的有向图算法 1 的执行过程。 例: 设图 G1=( V1, E1) , V1={v1, v2, v3, v4, v5}, E1={<v1, v2>, <v1, v4>, <v2, v4>, <v4, v3>, <v3, v2>}, 如图 1 所示。求图上所有点对间 的最短路径。
作者简介: 李洪波( 1969- ) , 男, 讲师, 主要研究方向: 算法分析与设计、数据挖掘、并行计算。 60 2006.34 计算机工程与应用
2 Floyd 最短路径算法的动态优化 2.1 Floyd 最短路径算法简介
为便于比较, 先简要介绍 Floyd 算 法 , 详 见 参 考 文 献[1]。 Floyd 算法仍从图的带权邻接矩阵 cost 出发, 其基本思想是从 vi 到 vj 的最短路径是以下各种可能路径中的长度最小者:
时, 应根据其实际的连线情况进行最小化的判断。
表 1 有向图 G1 各点对间的最短路径求解过程
( - 1)
D
( 0)
D
( 1)
D
( 2)
D
( 3)
D
DБайду номын сангаас
0 12301230123 0 1 2 3 0 1 2 3
0 0 6 ∞ 16 0 6 ∞ 16 0 6 ∞ 10 0 6 ∞ 10 0 6 17 10
1 引言
单源点最短路径问题是给定带权有向图 G 和源点 v, 求从 v 到 G 中其余各顶点的最短路径。Dijkstra 提 出 了 一 个 按 最 短 路径递增的次序产生最短路径的算法, 其时间开销为 2n( n- 1) +n( n 为图 G 的顶点个数) 。如果求所有点对间的最短路径, 解 决这个问题的一个方法是: 每次以一个顶点为源点, 重复执行 Dijkstra 算法 n 次, 这样便可求得每一对顶点间的最短路径。总 的执 行 时 间 为 O( n3) 。Floyd 提 出 了 解 决 每 一 对 顶 点 间 最 短 路 径的一个方法, 该方法形式上更简洁些, 但其总的执行时间为 O( n3) 。这两种方案的缺陷是时间开销为点数 n 的多项式, 不能 根 据 图 的 边 数 、边 的 实 际 分 布 和 点 数 联 合 动 态 调 整 算 法 本 身 的 时间开销, 以使得算法的运行时间极小化, 运算速度极大化。
Yantai, Shandong 264025, China; 2.Department of Computer Science and Engineering, Dalian University of
Technology, Dalian, Liaoning 116023, China)
Abstr act: According to the three layers’cycle of the floyd shortest path’s algorithm, design dynamic optimum new al- gorithm.The new algorithm devises an unique dynamic AV aggregate, a reachable table A and a starting- off table B, separately to proceed corresponding the exterior layer, middle layer and inner layer with minimum operation.In the pro- cess of the minimum operation, in order to eliminate the repetition in every queue of reachable table A and starting off- table B, introduces a only once added array M.The time complexity of the dynamic optimum new algorithm is O( n2+|AV|×e2/n2) ( |AV|!n) , which is able to adjust its performance according to the number vertex, the number of edge and the real distributing of edge. Key wor ds: Floyd shortest path; AV aggregate; reachable table A; starting- off table B; only once added array M