最短路径算法的改进及其实现方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 5 0 00 1 4 3 00 2 5 6 78 2 0 0 00 1 6 3 90 5 3 7 00 3 6 9 80 3 7 10 0 0 10 7 5 0 0 8 9 0 00
4) 有邻接结点矩阵和初始判断矩阵, 就可以 求网络中任意两点间的最短路径。若起点 S , 终点 为T。
第一步, 初始化标记向量 P , Pi = - 1, i = 1, 2, …, m-i N odesN um, ( m-iN odesN um 为网 络 结 点总数) :
class CRout e
{ ∥成员变量
pr ot ected: CHA IN * m-pChains; ∥网络边集指针 int m -iChainsNum; ∥边总数 int * m-pPoint s; ∥网络结点集指针 int m -iNodesN um ; ∥结点总数 int m -iNodeNumM ax; ∥最大邻接结点数 fl oat * * m-pDj; ∥判断矩阵指针 int * * m-pJ; ∥邻接结点矩阵指针 int * m-pWays; ∥最短路径经过边串指针 int m -iWayNum; ∥最短路径经过边数 fl oat m -fDist anceM in; ∥最短路径距离 BOOL m -bIsL oaded; ∥是否数据装载成功 ∥成员函数
徐立华( 1989) 提出最大相关边数的概念, 通 过定义点-边相关矩阵, 节省了存储空间, 提高了 运算速度, 为计算机解决大网络问题提供了切实 可行的算法。作者在 Dijkst ra 算法基础上, 对相关 边算法进行改进, 提出邻接结点算法, 进一步提高 运算速度。
1 邻接结点算法的基本思想 1. 1 Di jkstra 算法基本思想
传统的算法中应用关联矩阵和邻接矩阵存储 网 络数据, 会有大量的无效的 0 元素或 ∞ 元素, 占用大量存储空间。在此基础上进行矩阵运算, 必 将浪费大量运行时间。
收稿日期Байду номын сангаас 1997-10-21
1. 2 相关边算法基本思想 相关边算法的关键是提出了最大相关边数的
概念, 即一个网络中各结点的相关边数的最大值 称为网络的最大相关边数。取网络的最大相关边 数作为矩阵的列, 网络的结点数作为矩阵的行, 构 造相关矩阵 R , 表示网络结构。相关矩阵的行按结 点号从小到大顺序排列, 与结点 i 相关的边的边 号 写在矩阵的第 i 行。对照相关矩阵, 把相关矩阵 中各元素对应的边号的权值填在同一位置上, 构 造相应的初始判断矩阵 dR 。
在 m-p Dj 已标记的第 1 行、第 2 行、第 3 行、第 4 行、第 5 行和第 6 行中, dmin = 26, di = 6, dj = 3, m -f DistanceM in = 26; w = m-p J 〔6〕〔3〕 = 7, P〔7〕= 6, ri = 7, r j = 2; 将 m -p Dj 刚获得 标记的第 7 行中各元素值加上 26, m-p Dj 〔6〕〔3〕 = ∞, m-p Dj 〔7〕〔2〕= ∞;
将 m -p Dj 刚获得标记的行中各元素值均加 上 m -f DistanceM in, 并 使 m-p Dj 的 ( di , dj ) 和 ( r i, r j ) 元素为 ∞。
转第三步。 第五步, 从终点 T 开始, 由标记向量 P 的分量 循前点, 直到起 点 S , 查得 最短路 径 m -p W ay s。 m-f Di st anceMi n 即为最短路径距离。 假 设求结点 1 到结点 7 的最短路径, 过程如 下。
相关边算法用点 -边相关矩阵描述网络结 构, 大大减少无效的 0 元素和 ∞ 元素, 从而节约 存储空间, 提高运算速度。但是当网络结点数很多 时, 在 R 的其它行中寻找长值为 w 的元素的工作 量也是很大的。为了进一步提高运行速度, 可以对 相关边算法进行改进。 1. 3 邻接点算法基本思想
在 最大相关边数的启发下, 作者提出最大邻 接结点数的概念。一个网络中, 各结点的邻接结点 的最大值称为该网络的最大邻接结点数。取网络 的最大邻接结点数作为矩阵的列, 网络的结点总 数作为矩阵的行, 构造邻接结点矩阵 J 来描述网
关键词 最短路径, Dijkst ra 算法, 相关边算法, 邻接结点算法 分类号 P283. 7
最短路径分析是 GIS 最基本的网络分析功 能。在求解最短路径问题的算法中, Dijkstr a 算法 是目前国内外一致公认的较好算法〔1, 2, 3〕。现在许 多计算机实现的算法都是在 Dijkstr a 算法的基础 上, 运用关联矩阵、邻接矩阵的概念, 使得存储网 络数据和运算, 都需要定义 N × N ( N 为网络结 点数) 的矩阵。当网络的结点数较大时, 将占用大 量的存储空间, 并且运算也很浪费时间。
在 m-p Dj 已标记的第 1 行、第 2 行和第 5 行中, dmi n = 17, di = 5, dj = 2, m-f Di st anceMi n = 17; w = m -p J 〔1〕〔2〕= 6, P 〔6〕= 5, ri = 6, r j = 1; 将 m-p Dj 刚获得标记的第 6 行中各元素值 均加上 17, m-p Dj 〔5〕〔2〕= ∞, m -p Dj 〔6〕〔1〕= ∞; P〔7〕= - 1;
m-p Dj 〔4〕〔1〕= ∞; P 〔7〕= - 1; 在 m-p Dj 已标记的第 1 行、第 2 行、第 4
行、第 5 行和第6 行中, dmi n = 21, di = 2, dj = 3, m-f Di st anceMi n = 21; w = m-p J 〔2〕〔3〕= 3, P 〔3〕= 2, ri = 3, rj = 1; 将 m-p Dj 刚获得标记的 第 3 行中 各元素 值均 加上 21, m-p Dj 〔2〕〔3〕= ∞, m-p Dj 〔3〕〔1〕= ∞; P 〔7〕= - 1;
P 〔7〕= 6 → P 〔6〕= 5 → P〔5〕= 1, m-p W ay s = ( 1, 5, 6, 7) , m -f DistanceM in = 26。 2. 2 面向对象的实现方法
采 用面向对象的方法, 可以把网络的最短路 径算法生成库文件, 以软件模块的形式提供给用 户。抽象的路径类描述如下。
12 2
解放军测绘学院学报
络结构。邻接结点矩阵的行按结点号从小到大顺
序排列, 与结点 i 邻接的结点号写在矩阵的第 i 行, 如果结点 i 的邻接结点数小于最大邻接结点 数, 则以 0 填充, 直到填满矩阵。对照邻接结点矩 阵, 把邻接结点矩阵中各元素邻接关系对应的边 的权值填在同一位置上( ∞ 对应 0 元素) , 构造相 应的初始判断矩阵 dJ 。
设已知图中对总长度来说最接近于结点 S 的 m 个结点, 以及从结点 S 到这些结点中的每个结 点的最短路。对结点 S 和这 m 个结点着色, 然后最 接近于 S 的第 m + 1 个结点可这样求 对于每 个未着色的结点, 考虑所有已着色结点 x, 将弧 ( x , y ) 接在从 S 到 x 的最短路后面, 从构成的 S 到 y 的 m 条不同路中选出最短路, 就是S 到y 的最短 路。从 m = 0 开始, 将此过程重复进行, 直至求得 S 到 T 的最短路为止〔1〕。
第 15 卷第 1998 年 6
2月期 Jo ur n
al
of
解放 t he PLA
军 测绘 学院 学报 Ins tit ut e of S urveyi ng
and
M apping
VJoul .n1. 51N99o8. 2
最短路径算法的改进及其实现方法
龚洁辉 白 玲 高健美
素的最小值 dmi n。若 dmi n = ∞, 说明不存在最短 路径, 则退出。否则 m-f Di st anceMin = dmin, 记 录最小值元素的行 d i、列 dj 。
然后在邻接结点矩阵 m -p J 中取( di , dj ) 元 素, 记为 w 。若第 w 行还未标记, 则将 m-p Dj 的第 w 行标记, Pw = d i; 并在 m-p J 的第 w 行寻找值为 di 的元素, 记录该元素的行 ri 、列 rj 。
邻接结点矩阵 J 和相关矩阵 R 虽然占用存储 空间相等, 但是邻接结点矩阵为在计算机实现过 程中进一步提高运算速度, 提供了更加有效的网 络结构组织方式。
11 12 ∞ ∞ ∞ 11 8 10 ∞ ∞
10 19 10 15 17 8 ∞∞∞∞ 12 5 19 30 ∞ 5 10 9 ∞ ∞ 15 9 16 7 ∞ 17 7 14 ∞ ∞ 6 16 30 ∞ ∞ 14 6 ∞ ∞ ∞
有了相关矩阵 R 和初始判断矩阵 dR , 根据 Dijkst ra 算法的着色思想, 就可以求网 络中任意 两点间的最短路径了。关键步骤是, 在 dR 已标记 的行中, 求所有元素的最小值, 并记下最小值的行 和列。然后在 R 中取相同行列的元素, 记为 w , 再 在 R 的其它行中, 寻找值为 w 的元素所在的行, 将 dR 的对应行作标记〔4〕。
初始化标记向量 P ; P 〔1〕= 0, m -f DistanceM in = 0; 在 m-p Dj 已标记的第 1 行中, dmi n = 11,
di = 1, dj = 1, m -f DistanceM in = 11; w = m-p J 〔1〕〔1〕= 2, P 〔2〕= 1, ri = 2, rj = 1; 将
第 二 步, 根 据 起点 S, 标 记 初始 判 断 矩 阵 m-p D j 的 第 S 行, P s = 0, 记 最 短 距 离
m-f Di st anceMi n = 0; 第三步, 根据终点 T , 判断 m-p Dj 的第 T 行
是否已标记, 是则转第五步, 否则继续。 第四步, 在 m-p Dj 已标记的行中, 求所有元
在 m-p Dj 已标记的第 1 行、第 2 行、第 5 行 和 第 6 行 中, dmin = 19, di = 2, dj = 2, m-f Di st anceMi n = 19; w = m-p J 〔2〕〔2〕= 4, P 〔4〕= 2, ri = 4, rj = 1; 将 m-p Dj 获得标记的第 4 行中各元素值均加上 19, m-p Dj 〔2〕〔2〕= ∞,
2) 求 网 络 的 最 大 邻 接 结 点 数 m-iN odeN umMax 。该网络各结点的邻接结点数 的最大值 m -i N odeN umM ax = 5。
3) 构造邻接结点矩阵 m-p J , 各行中的结点 序号可以前后随意放置。对应邻接结点矩阵各元 素, 构造初始判断矩阵 m-p Dj 。
( 解放军测绘学院 郑州 450052) ( 郑州市民用建筑设计研究所 450000)
摘要 最短路径分析是 GIS 最基本的网络分析功能。Dijkst ra 算法是目前公认的较好的 最短路径算法。文中从节约存储空间, 提高运算速度出发, 在 Dijkst ra 算法基础上, 对相关边 算法进行改进, 提出邻接结点算法, 并给出算法的面向对象的实现方法。
第2 期
龚洁辉等: 最短路径算法的改进及其实现方法
1 23
m-p Dj 刚获得标记的第 2 行中各元素值均加上 11, m-p Dj 〔1〕〔1〕 = ∞, m-p Dj 〔2〕〔1〕 = ∞; P 〔7〕= - 1;
在 m-p Dj 已标记的第 1 行和第 2 行中, dmin = 12, di = 1, d j = 2, m-f Di st anceMi n = 12; w = m-p J 〔1〕〔2〕= 5, P 〔5〕= 1, ri = 5, rj = 1; 将 m-p Dj 刚获得标记的第 5行中各元素值均加 上 12, m -p Dj 〔1〕〔2〕= ∞, m-p Dj 〔5〕〔1〕= ∞; P 〔7〕= - 1;
图 2 邻接结点矩阵和初始判断矩阵
1998 年
2 邻接结点算法的实现方法 2. 1 算法实现步骤
为了使读者了解邻接结点算法求解最短路径 问题的具体过程, 现举一例说明( 图 1) 。
图 1 网络模型
1) 从数据文件中装载网络数据, 网络的结点 和边分别获得计算机的内部序号。需要说明的是, 网络结点和边的内部序号和实际编号, 有可能不 相同。为了增加算法的灵活性, 算法使用内部编号 参与运算。( 这里假设内部序号和实际编号相同) 。
4) 有邻接结点矩阵和初始判断矩阵, 就可以 求网络中任意两点间的最短路径。若起点 S , 终点 为T。
第一步, 初始化标记向量 P , Pi = - 1, i = 1, 2, …, m-i N odesN um, ( m-iN odesN um 为网 络 结 点总数) :
class CRout e
{ ∥成员变量
pr ot ected: CHA IN * m-pChains; ∥网络边集指针 int m -iChainsNum; ∥边总数 int * m-pPoint s; ∥网络结点集指针 int m -iNodesN um ; ∥结点总数 int m -iNodeNumM ax; ∥最大邻接结点数 fl oat * * m-pDj; ∥判断矩阵指针 int * * m-pJ; ∥邻接结点矩阵指针 int * m-pWays; ∥最短路径经过边串指针 int m -iWayNum; ∥最短路径经过边数 fl oat m -fDist anceM in; ∥最短路径距离 BOOL m -bIsL oaded; ∥是否数据装载成功 ∥成员函数
徐立华( 1989) 提出最大相关边数的概念, 通 过定义点-边相关矩阵, 节省了存储空间, 提高了 运算速度, 为计算机解决大网络问题提供了切实 可行的算法。作者在 Dijkst ra 算法基础上, 对相关 边算法进行改进, 提出邻接结点算法, 进一步提高 运算速度。
1 邻接结点算法的基本思想 1. 1 Di jkstra 算法基本思想
传统的算法中应用关联矩阵和邻接矩阵存储 网 络数据, 会有大量的无效的 0 元素或 ∞ 元素, 占用大量存储空间。在此基础上进行矩阵运算, 必 将浪费大量运行时间。
收稿日期Байду номын сангаас 1997-10-21
1. 2 相关边算法基本思想 相关边算法的关键是提出了最大相关边数的
概念, 即一个网络中各结点的相关边数的最大值 称为网络的最大相关边数。取网络的最大相关边 数作为矩阵的列, 网络的结点数作为矩阵的行, 构 造相关矩阵 R , 表示网络结构。相关矩阵的行按结 点号从小到大顺序排列, 与结点 i 相关的边的边 号 写在矩阵的第 i 行。对照相关矩阵, 把相关矩阵 中各元素对应的边号的权值填在同一位置上, 构 造相应的初始判断矩阵 dR 。
在 m-p Dj 已标记的第 1 行、第 2 行、第 3 行、第 4 行、第 5 行和第 6 行中, dmin = 26, di = 6, dj = 3, m -f DistanceM in = 26; w = m-p J 〔6〕〔3〕 = 7, P〔7〕= 6, ri = 7, r j = 2; 将 m -p Dj 刚获得 标记的第 7 行中各元素值加上 26, m-p Dj 〔6〕〔3〕 = ∞, m-p Dj 〔7〕〔2〕= ∞;
将 m -p Dj 刚获得标记的行中各元素值均加 上 m -f DistanceM in, 并 使 m-p Dj 的 ( di , dj ) 和 ( r i, r j ) 元素为 ∞。
转第三步。 第五步, 从终点 T 开始, 由标记向量 P 的分量 循前点, 直到起 点 S , 查得 最短路 径 m -p W ay s。 m-f Di st anceMi n 即为最短路径距离。 假 设求结点 1 到结点 7 的最短路径, 过程如 下。
相关边算法用点 -边相关矩阵描述网络结 构, 大大减少无效的 0 元素和 ∞ 元素, 从而节约 存储空间, 提高运算速度。但是当网络结点数很多 时, 在 R 的其它行中寻找长值为 w 的元素的工作 量也是很大的。为了进一步提高运行速度, 可以对 相关边算法进行改进。 1. 3 邻接点算法基本思想
在 最大相关边数的启发下, 作者提出最大邻 接结点数的概念。一个网络中, 各结点的邻接结点 的最大值称为该网络的最大邻接结点数。取网络 的最大邻接结点数作为矩阵的列, 网络的结点总 数作为矩阵的行, 构造邻接结点矩阵 J 来描述网
关键词 最短路径, Dijkst ra 算法, 相关边算法, 邻接结点算法 分类号 P283. 7
最短路径分析是 GIS 最基本的网络分析功 能。在求解最短路径问题的算法中, Dijkstr a 算法 是目前国内外一致公认的较好算法〔1, 2, 3〕。现在许 多计算机实现的算法都是在 Dijkstr a 算法的基础 上, 运用关联矩阵、邻接矩阵的概念, 使得存储网 络数据和运算, 都需要定义 N × N ( N 为网络结 点数) 的矩阵。当网络的结点数较大时, 将占用大 量的存储空间, 并且运算也很浪费时间。
在 m-p Dj 已标记的第 1 行、第 2 行和第 5 行中, dmi n = 17, di = 5, dj = 2, m-f Di st anceMi n = 17; w = m -p J 〔1〕〔2〕= 6, P 〔6〕= 5, ri = 6, r j = 1; 将 m-p Dj 刚获得标记的第 6 行中各元素值 均加上 17, m-p Dj 〔5〕〔2〕= ∞, m -p Dj 〔6〕〔1〕= ∞; P〔7〕= - 1;
m-p Dj 〔4〕〔1〕= ∞; P 〔7〕= - 1; 在 m-p Dj 已标记的第 1 行、第 2 行、第 4
行、第 5 行和第6 行中, dmi n = 21, di = 2, dj = 3, m-f Di st anceMi n = 21; w = m-p J 〔2〕〔3〕= 3, P 〔3〕= 2, ri = 3, rj = 1; 将 m-p Dj 刚获得标记的 第 3 行中 各元素 值均 加上 21, m-p Dj 〔2〕〔3〕= ∞, m-p Dj 〔3〕〔1〕= ∞; P 〔7〕= - 1;
P 〔7〕= 6 → P 〔6〕= 5 → P〔5〕= 1, m-p W ay s = ( 1, 5, 6, 7) , m -f DistanceM in = 26。 2. 2 面向对象的实现方法
采 用面向对象的方法, 可以把网络的最短路 径算法生成库文件, 以软件模块的形式提供给用 户。抽象的路径类描述如下。
12 2
解放军测绘学院学报
络结构。邻接结点矩阵的行按结点号从小到大顺
序排列, 与结点 i 邻接的结点号写在矩阵的第 i 行, 如果结点 i 的邻接结点数小于最大邻接结点 数, 则以 0 填充, 直到填满矩阵。对照邻接结点矩 阵, 把邻接结点矩阵中各元素邻接关系对应的边 的权值填在同一位置上( ∞ 对应 0 元素) , 构造相 应的初始判断矩阵 dJ 。
设已知图中对总长度来说最接近于结点 S 的 m 个结点, 以及从结点 S 到这些结点中的每个结 点的最短路。对结点 S 和这 m 个结点着色, 然后最 接近于 S 的第 m + 1 个结点可这样求 对于每 个未着色的结点, 考虑所有已着色结点 x, 将弧 ( x , y ) 接在从 S 到 x 的最短路后面, 从构成的 S 到 y 的 m 条不同路中选出最短路, 就是S 到y 的最短 路。从 m = 0 开始, 将此过程重复进行, 直至求得 S 到 T 的最短路为止〔1〕。
第 15 卷第 1998 年 6
2月期 Jo ur n
al
of
解放 t he PLA
军 测绘 学院 学报 Ins tit ut e of S urveyi ng
and
M apping
VJoul .n1. 51N99o8. 2
最短路径算法的改进及其实现方法
龚洁辉 白 玲 高健美
素的最小值 dmi n。若 dmi n = ∞, 说明不存在最短 路径, 则退出。否则 m-f Di st anceMin = dmin, 记 录最小值元素的行 d i、列 dj 。
然后在邻接结点矩阵 m -p J 中取( di , dj ) 元 素, 记为 w 。若第 w 行还未标记, 则将 m-p Dj 的第 w 行标记, Pw = d i; 并在 m-p J 的第 w 行寻找值为 di 的元素, 记录该元素的行 ri 、列 rj 。
邻接结点矩阵 J 和相关矩阵 R 虽然占用存储 空间相等, 但是邻接结点矩阵为在计算机实现过 程中进一步提高运算速度, 提供了更加有效的网 络结构组织方式。
11 12 ∞ ∞ ∞ 11 8 10 ∞ ∞
10 19 10 15 17 8 ∞∞∞∞ 12 5 19 30 ∞ 5 10 9 ∞ ∞ 15 9 16 7 ∞ 17 7 14 ∞ ∞ 6 16 30 ∞ ∞ 14 6 ∞ ∞ ∞
有了相关矩阵 R 和初始判断矩阵 dR , 根据 Dijkst ra 算法的着色思想, 就可以求网 络中任意 两点间的最短路径了。关键步骤是, 在 dR 已标记 的行中, 求所有元素的最小值, 并记下最小值的行 和列。然后在 R 中取相同行列的元素, 记为 w , 再 在 R 的其它行中, 寻找值为 w 的元素所在的行, 将 dR 的对应行作标记〔4〕。
初始化标记向量 P ; P 〔1〕= 0, m -f DistanceM in = 0; 在 m-p Dj 已标记的第 1 行中, dmi n = 11,
di = 1, dj = 1, m -f DistanceM in = 11; w = m-p J 〔1〕〔1〕= 2, P 〔2〕= 1, ri = 2, rj = 1; 将
第 二 步, 根 据 起点 S, 标 记 初始 判 断 矩 阵 m-p D j 的 第 S 行, P s = 0, 记 最 短 距 离
m-f Di st anceMi n = 0; 第三步, 根据终点 T , 判断 m-p Dj 的第 T 行
是否已标记, 是则转第五步, 否则继续。 第四步, 在 m-p Dj 已标记的行中, 求所有元
在 m-p Dj 已标记的第 1 行、第 2 行、第 5 行 和 第 6 行 中, dmin = 19, di = 2, dj = 2, m-f Di st anceMi n = 19; w = m-p J 〔2〕〔2〕= 4, P 〔4〕= 2, ri = 4, rj = 1; 将 m-p Dj 获得标记的第 4 行中各元素值均加上 19, m-p Dj 〔2〕〔2〕= ∞,
2) 求 网 络 的 最 大 邻 接 结 点 数 m-iN odeN umMax 。该网络各结点的邻接结点数 的最大值 m -i N odeN umM ax = 5。
3) 构造邻接结点矩阵 m-p J , 各行中的结点 序号可以前后随意放置。对应邻接结点矩阵各元 素, 构造初始判断矩阵 m-p Dj 。
( 解放军测绘学院 郑州 450052) ( 郑州市民用建筑设计研究所 450000)
摘要 最短路径分析是 GIS 最基本的网络分析功能。Dijkst ra 算法是目前公认的较好的 最短路径算法。文中从节约存储空间, 提高运算速度出发, 在 Dijkst ra 算法基础上, 对相关边 算法进行改进, 提出邻接结点算法, 并给出算法的面向对象的实现方法。
第2 期
龚洁辉等: 最短路径算法的改进及其实现方法
1 23
m-p Dj 刚获得标记的第 2 行中各元素值均加上 11, m-p Dj 〔1〕〔1〕 = ∞, m-p Dj 〔2〕〔1〕 = ∞; P 〔7〕= - 1;
在 m-p Dj 已标记的第 1 行和第 2 行中, dmin = 12, di = 1, d j = 2, m-f Di st anceMi n = 12; w = m-p J 〔1〕〔2〕= 5, P 〔5〕= 1, ri = 5, rj = 1; 将 m-p Dj 刚获得标记的第 5行中各元素值均加 上 12, m -p Dj 〔1〕〔2〕= ∞, m-p Dj 〔5〕〔1〕= ∞; P 〔7〕= - 1;
图 2 邻接结点矩阵和初始判断矩阵
1998 年
2 邻接结点算法的实现方法 2. 1 算法实现步骤
为了使读者了解邻接结点算法求解最短路径 问题的具体过程, 现举一例说明( 图 1) 。
图 1 网络模型
1) 从数据文件中装载网络数据, 网络的结点 和边分别获得计算机的内部序号。需要说明的是, 网络结点和边的内部序号和实际编号, 有可能不 相同。为了增加算法的灵活性, 算法使用内部编号 参与运算。( 这里假设内部序号和实际编号相同) 。