一种网络图中最短路径的二分查找追踪方法

文档序号:6397220阅读:1078来源:国知局
专利名称:一种网络图中最短路径的二分查找追踪方法
技术领域
本发明属于应用网络图进行路径搜索技术领域,具体涉及网络图中最短路径的二
分查找追踪方法。
背景技术
随着信息技术的发展,网络图数据处理技术也随之得到了快速发展。为了便于数 据处理,常常将具体的实际问题抽象建模为网络图的结构,如计算机网络、道路网格、电力 系统网和物流运输网等。网络图中的路径寻优是常见的问题,如计算机网络路由选择、地理 信息系统的交通道路路径选择、电力系统路径规划、物流运输线路选择等问题,据《运筹学 方法与模型》(复旦大学出版社,傅家良主编,2006年1月,第216-228页)介绍,这也是图 论、运筹学等领域中的经典问题。网络图中的最短路径方法包括点到点、单源点、多点之间 和所有节点之间的最短路径算法。网络图中的路径寻优发现节点间最短路径是一个基本的 问题,传统的最短路径算法以狄克斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法为经 典,在实际中已得到广泛应用。 据《运筹学方法与模型》(复旦大学出版社,傅家良主编,2006年1月,第217-220 页)介绍,Dijkstra算法是荷兰学者Edgar Wybe Di jkstra于1959年提出来的,适合加权 有向图中求解单源点最短路径问题。最初的算法只适用于权重为正值的加权网络,后期有 不同的改进算法。Dijkstra算法的基本思想是从源节点出发,逐步地向外探寻最短路径。 每个节点都有一对标号(dn, pn),其中dn是从源节点到节点n的最短路径距离,pn记录从 源节点到节点n的最短路径中节点n的前一节点。其算法步骤包括 步骤(1)、初始化源节点标号(ds,ps)设置为(O,空),其他节点标号(dn,pn)设 置为(无穷大,未定),设置源节点为已标记,其他节点为未标记; 步骤(2):遍历所有已标记的节点i到其直接连接的未标记节点j,更新其未标记 节点的标号中dj为dj、已标号节点i的di与节点i到节点j的距离之和中的最小值,并更 新其P j ; 步骤(3):从未标记的节点中,选取标号中dj最小的,将其设置为已标记;
步骤(4)、判断是否还有未标记点如果有,转向步骤(2);否则退出,算法结束。
据《运筹学方法与模型》(复旦大学出版社,傅家良主编,2006年1月,第221-225 页)介绍,Floyd算法是通过图的邻接矩阵A来求得一个最短路径矩阵D和一个最短路由 矩阵U,来获得网络中所有节点的最短路径。其最短路径距离矩阵D和最短路由矩阵U构建 过程为 初始最短路径距离矩阵D赋值为邻接矩阵A,最短路由矩阵U根据邻接矩阵A是否 连接赋值为起点;对于每一个节点k,如果D(i, j)大于D(i, k)与D(k, j)之和,更新D(i, j)并赋值U(i, j)为k。 以上介绍的现有最短路径算法中,Dijkstra算法只能得到每个节点的标号,Folyd 算法只能有最短路径矩阵,不能求得源节点到汇节点的最短路径,离提取出网络图中的最
6短路径还差一步。 据《运筹学方法与模型》(复旦大学出版社,傅家良主编,2006年1月,第219, 222 页)介绍,对于Dijkstra算法和Folyd算法,其后期的最短路径的提取方法是逆向追踪法。 对于Dijkstra算法,逆向追踪法是根据节点的标号中的pn来反向追踪从汇节点开始,根 据其标号中的pn追踪到其紧前一个节点v,再由v逆向追踪到其紧前节点,直到反向回溯到 源节点。而Floyd算法是根据最短路由矩阵U来反向追踪从U(s, t)(其中节点s为源节 点,节点t为汇节点)得到汇节点t的紧前节点v,接着追踪到U(s, v),一直到反向追踪到 源节点s,输出其最短路径。 Dijkstra算法和Floyd算法是规划算法,Dijkstra算法适合于稀疏型网络,密集 型网络用Floyd算法求解最短路径比较方便,其实Dijkstra算法中每个节点的标号用矩阵 表示等同于Floyd算法中的最短路径距离矩阵D和最短路由矩阵U。对于并行计算来说, Dijkstra算法和Floyd算法可以改写为并行算法,但是其逆向追踪算法不可改写。逆向追 踪算法是根据最短路由矩阵U来搜索提取最短路径线路,只能得到网络图中节点对间一条 最短路径,无法提供多条最短路径来满足实际应用的需求。

发明内容
本发明的目的是提出一种网络图中最短路径的二分查找追踪法,以解决网络图中
最短路径算法的后期路径的快速提取问题,找出任意两节点间的最短路径。 本发明网络图中最短路径的二分查找追踪法,先把出现在包括计算机网络、道路
网格、电力系统网或物流运输网在内的实际网络中存在的交叉点作为节点、交叉点之间的
联系作为边形成网络图,将所有的节点随机地从1开始按自然数字进行编号,节点之间的
边用邻接矩阵存储;其特征在于采用本发明改进的狄克斯特拉(Dijkstra)算法或改进的
弗洛伊德(Floyd)算法来获得最短路径步数矩阵;将实际网络中的出发点作为源节点,将
目的地作为汇节点,从出发点到目的地的最短路径步数即出发点到目的地的最短路径经过
的编号节点个数加上1,是最短路径步数矩阵中源节点的行、汇节点的列的值;从最短路径
步数矩阵提取源节点到汇节点的最短路径步数,接着查找源节点到汇节点最短路径的中间
节点判断源节点到汇节点的最短路径步数是否为l,如果为l,源节点到汇节点最短路径
没有中间节点,结束其中间节点的查找过程;否则对源节点到汇节点的最短路径步数进行
拆分,将最短路径步数除以2并对其上取整作为前步数,源节点到汇节点的最短路径步数
减去前步数作为后步数;从最短路径步数矩阵的源节点行向量中搜索出步数等于前步数的
所有节点,其节点编号的集合称为前步数节点集;从最短路径步数矩阵的汇节点列向量中
搜索步数等于后步数的所有节点,其节点编号的集合称为后步数节点集;取前、后步数节点
集的交集,称该交集为源节点到汇节点最短路径的中间节点集,则该集合中的每个节点为
源节点到汇节点最短路径的中间节点,作为出发点到目的地最短路径的一层中间节点;以
每个出发点到目的地最短路径的一层中间节点为基准,并行进行查找源节点到一层中间节
点最短路径的中间节点、一层中间节点到汇节点最短路径的中间节点,其操作如下查找源
节点到一层中间节点最短路径的中间节点,源节点不变,一层中间节点作为汇节点,前步数
为源节点到汇节点的最短路径步数,接着重复前面所述的查找源节点到汇节点最短路径的
中间节点,得到源节点到汇节点最短路径中的中间节点集,将该中间节点集中的每个节点作为出发点到目的地最短路径的前二层中间节点;查找一层中间节点到汇节点最短路径的 中间节点, 一层中间节点作为源节点,汇节点不变,后步数为源节点到汇节点的最短路径步 数,接着重复前面所述的查找源节点到汇节点最短路径的中间节点,得到源节点到汇节点 最短路径中的中间节点集,其集合中的每个节点作为出发点到目的地最短路径的后二层中 间节点;分别以每个出发点到目的地最短路径的前、后二层中间节点为基准,并行进行查找 源节点到前二层中间节点、前二层中间节点到一层中间节点、一层中间节点到后二层中间 节点、后二层中间节点到汇节点最短路径的中间节点;依此类推,直到要搜索的节点间的最 短路径步数为1时为止;在出发点与目的地之间将所得到的各层中间节点顺次插入到对应 位置,即得到出发点到目的地的所有最短路径;根据网络图中编号节点与实际网络中交叉 点的一一对应关系,最短路径线路上的中间节点分别对应实际网络中的交叉点,即得到实 际网络中从出发点到目的地的所有最短路径,选择其中任意一条线路即为出发点到目的地 最优路径,从而快速实现了实际复杂网络中的路径择优; 所述本发明改进的狄克斯特拉(Dijkstra)算法为,对每个节点设置一对标号第 一个标号表示从源节点到该节点的最短路径距离,第二个标号表示从源节点到该节点的最 短路径的步数;其算法步骤包括 步骤一、初始化源节点的一对标号设置为0和空,其他节点一对标号设置为无穷 大和未定,设置源节点为已标记节点,其他节点为未标记节点; 步骤二 遍历所有已标记的节点到其有边连接的未标记节点,对于每个未标记节 点,如果源节点到该未标记节点最短路径距离大于中间插入第三个节点后最短路径距离, 更新该未标记节点的第一个标号为中间插入第三个节点后最短路径距离,第二个标号在原 来的基础上加上1 ; 步骤三从未标记的节点中选取其第一个标号的值最小的节点,将其设置为已标 记; 步骤四、判断是否还有未标记点如果有,转向步骤二 ;否则退出,算法结束;
将每个节点的第一个标号插入到最短路径距离矩阵的源节点标号的向量中,将每 个节点的第二个标号插入到最短路径步数矩阵的源节点标号的向量中;以每个节点作为源 节点重复使用改进的狄克斯特拉(Dijkstra)算法,得到最短路径距离矩阵和最短路径步 数矩阵; 所述本发明改进的弗洛伊德(Floyd)算法为初始最短路径距离矩阵赋值为邻接 矩阵;最短路径步数矩阵根据邻接矩阵两节点是否有边存在两节点间有边存在,其对应 的最短路径步数赋值为l,否则赋值为0 ; 更新最短路径距离矩阵和最短路径步数矩阵如果两个节点间的最短路径距离大 于中间插入第三个节点后的最短路径距离,更新其最短路径距离为插入第三个节点后的最 短路径距离,两个节点间的最短路径步数更新为这两个节点分别与第三个节点最短路径步 数之和;把每个节点作为第三个节点,循环执行上述更新最短路径距离矩阵和最短路径步 数矩阵。 上述网络图中最短路径的二分查找追踪法中的某一条最短路径查找的具体操作 如下 对已给定的网络图,根据其邻接矩阵A采用改进的狄克斯特拉(Dijkstra)算法或
8改进的弗洛伊德(Floyd)算法的得到最短路径步数矩阵S,从节点i到节点j的最短路径所 经过的网络图中边的条数即为节点i到节点j的最短路径步数S(i, j);对于给定出发点作 为源节点s,目的地作为汇节点t,根据最短路径步数矩阵S,得到源节点s到汇节点t的最 短路径步数k = S(s, t); 查找源节点s到汇节点t最短路径的中间节点 步骤1、判断如果最短路径步数k为1,则源节点s到汇节点t最短路径为边e (s, t),结束源节点S到汇节点t最短路径的中间节点的查找过程;否则,取前步数、等于最短 路径步数k除以2后对其上取整,后步数k2等于最短路径步数k减去前步数、;
步骤2 :在最短路径步数矩阵S中的源节点S行向量中搜索步数等于前步数lq的 所有节点,得到其前步数节点集Akl ;在最短路径步数矩阵S中的汇节点t列向量中搜索步 数等于后步数k2的所有节点,得到其后步数节点集Ak2 ; 步骤3 :取前步数节点集Aw和后步数节点集Ak2的交集,在该交集中任意选择一个 中间节点t ; 结束源节点s到汇节点t最短路径的中间节点的查找过程,中间节点^即为源 节点s到汇节点t最短路径的一个中间节点,作为出发点到目的地最短路径的一层中间节 点; 步骤4、查找源节点到中间节点^最短路径的中间节点,作为出发点到目的地最短 路径的前一层中间节点以中间节点t替代前面的汇节点t,前步数、替代最短路径步数 k,查找源节点S到汇节点t最短路径的中间节点,跳转到步骤1 ; 步骤5、与步骤4并行,查找中间节点^到汇节点t最短路径的中间节点,作为出 发点到目的地最短路径的后一层中间节点以中间节点^替代前面的源节点s,后步数k2 替代最短路径步数k,查找源节点S到汇节点t最短路径的中间节点,跳转到步骤1 ;
再分别查找源节点到前二层中间节点、前二层中间节点到一层中间节点、一层中 间节点到后二层中间节点、后二层中间节点到汇节点最短路径的中间节点,依此类推,直到 要搜索节点间的最短路径步数为1时为止; 在出发点与目的地之间将所得到的各层中间节点顺次插入到对应位置,即得到出 发点到目的地的一条最短路径出发点,...,前二层中间节点,...,一层中间节点,...,后 二层中间节点,...,目的地; 所述本发明改进的狄克斯特拉(Dijkstra)算法为每个节点有一对标号Dn、Sn,其 中第一个标号Dn是从起源节点到节点n的最短路径的长度,第二个标号Sn记录的是从源节 点到节点n的最短路径的步数。其算法步骤包括 步骤(A)、初始化源节点标号第一个标号A、第二个标号Ss分别设置为0、空,其 他节点标号的第一个标号Dn、第二个标号Sn设置为无穷大、未定,设置源节点为已标记,其 他节点为未标记; 步骤(B):遍历所有已标记的节点i到其直接连接的未标记节点j,对于其未标记 节点j,如果节点j的第一个标号Dj大于第一个标号Di与节点i到节点j的距离A(i, j) 之和,更新第一个标号Dj,第二个标号Sj更新为第二个标号Si加上1 ;
步骤(C):从未标记的节点中,选取标号中第一个标号Dj最小的节点,将其设置为 已标记;
步骤(D)、判断是否还有未标记点如果有,转向步骤(B);否则退出,算法结束;
将每个节点的第一个标号Dn插入到最短路径距离矩阵D的源节点标号的向量中, 将每个节点的第二个标号Sn插入到最短路径步数矩阵S的源节点标号的向量中;以每个节 点作为源节点重复使用改进的狄克斯特拉(Dijkstra)算法,得到最短路径距离矩阵D和最 短路径步数矩阵S ; 所述本发明改进的弗洛伊德(Floyd)算法为初始最短路径距离矩阵D赋值为邻 接矩阵A,最短路径步数矩阵S根据邻接矩阵A中两节点是否有边存在,如果有边存在赋值 为l,否则赋值为0 ;对于每一个节点k,如果节点i到节点j的最短路径距离D(i, j)大于 节点i到节点k的最短路径距离D(i, k)与节点k到节点j的最短路径距离D(k, j)之和, 更新节点i到节点j的最短路径距离D(i,j)为节点i到节点k的最短路径距离D(i,k)与 节点k到节点j的最短路径距离D(k, j)之和,节点i到节点j的最短路径步数S(i, j)更 新为节点i到节点k的最短路径步数S(i,k)与节点k到节点j的最短路径步数S(k, j)之 和。 若对所述步骤1中最短路径步数k的拆分方式采用前步数、等于最短路径步数k 减去1、后步数k2等于1来替代,就转化成为逆向追踪法。 若所述步骤3中前步数节点集Akl和后步数节点集Ak2的交集中有多个中间节点,
表明源节点到汇节点有多条最短路径;则采用每次取不同的中间节点源节点s到汇节点t
最短路径的中间节点执行步骤4和步骤5,即可提取出多条不同的最短路径。 若将所述步骤4和步骤5在并行计算机中分别分配给2个处理器进行最短路径的
提取,可加快算法的进程。 本发明网络图中最短路径的二分查找追踪法的一种在实际网络的地图上作业具 体操作方法如下 先标出地图中各线路的交叉点和各交叉点间边,根据本发明改进的狄克斯特拉 (Dijkstra)算法或改进的弗洛伊德(Floyd)算法的求得所有交叉点间的最短路径步数,并 在地图上标出所有交叉点间的最短路径步数;将出发点到目的地的最短路径步数除以2后 上取整作为前步数,出发点到目的地的最短路径步数减去前步数作为后步数;在地图上找 出出发点到其它交叉点的最短路径步数等于前步数,记录这些交叉点为前步数节点集;再 在地图上找出各交叉点到目的地的最短路径步数等于后步数,记录其交叉点为后步数节点 集;在前步数节点集和后步数节点集中找出共同的交叉点,即为在地图上标记为最短路径 必经过的一层中间点;再用相同的方法分别求出发点到一层中间点的中间节点为前二层中 间点、一层中间点到目的地的中间点为后二层中间点,如此类推,直到要搜索的节点间的最 短路径步数为1时为止;按照出发点,...,前二层中间点,...,一层中间点,...,后二层中 间点,...目的地顺序得到一个交叉点序列,即为出发点到目的地的最短路径。
由于本发明采用了二分折半分解问题的思想,根据最短路径步数矩阵,在得到源 节点和汇节点的最短路径步数基础上,找到源节点经过一半步数其最短路径到达的节点集 和经过一半步数最短路径到达汇节点集,其交集中的节点为源节点和汇节点必经过的中间 节点,如此类推,用并行方法操作二分折半分解方法求源节点与中间节点、中间节点与汇节 点间的中间节点,直到最短路径步数二分折半到1为止,提取出源节点到汇节点最短路径; 对于以上过程中交集的节点数目多于1,提取源节点与汇节点间多条最短路径线路。与逆向追踪算法相比较,克服了最短路径追踪方法无法用并行算法来处理,且二分查找追踪法对 于有多条最短路径的网络图提取其所有的最短路径线路。 由于本发明根据最短路径步数矩阵,将网络作为一个从源节点到汇节点的一个层 次结构的图,离源节点最短路径只经过一条边的为第一层,离源节点最短路径经过两条边
的为第二层;......,依此类推。得知源节点到汇节点最短路径步数后,用二分折半的方法
找到其中必经点,再分别就源节点与该节点、该节点与汇节点的最短路径,这样就加快了最 短路径的提取进程的速度,并得到源节点到汇节点的所有最短路径线路,与现有逆向追踪 方法相比较,克服了现有技术的反向顺序查找追踪只能提取一条最短路径线路,提供了一 种追踪所有最短路径线路的方法。 由于本发明采用了分解问题的思想,分而治之的方法,分解得到的每个子问题都 是和原问题相同的问题,可以用递归算法来处理,与现有逆向追踪方法相比较,克服了现有 技术的反向顺序查找追踪思想,提供了一种新的追踪最短路径的方法。 由于本发明采用了应用分解问题的思想,将整个问题分解为几个部分,对多个子
问题同时并行处理。如果用计算机来处理,应用并行计算来实现,与现有逆向追踪方法相比
较,克服了现有技术的串行计算方法,提供了一种并行方法追踪最短路径方法。 由于本发明算法的复杂度是线性时间复杂度,复杂程度低,因此对于大规模的网
络具有很好的应用价值。本发明适用的网络可以是无向网络、有向网络、无权网络、加权网
络,对于存在负权重的网络同样适用,是包括计算机网络、道路网格、电力系统网或物流运
输网在内的实际网络。 采用本发明方法可利用预先计算得到的最短路径信息,通过较少的空间和时间代 价提高最短路径的发现和执行效率并能得到多条最短路径,达到存储有限的预先计算的节 点间的最短路径关系,提高了网络中两节点间最短路径的发现效率。 本发明通过采取改进的Dijkstra算法和改进的Floyd算法,提供求解最短路径步 数矩阵方法,可以方便地求解最短路径步数矩阵而并没有给算法增加附带的计算量。
具体实施例方式
以下举例说明本发明在不同类型网络下的具体使用。
实施例1 :提取计算机网络中路由器的无权网络的最短路径 计算机网络中,由在路由器层面上建立网络,节点为路由器,边为路由器之间的物 理连接(如光纤)。同样,在自治系统的层面上,节点为域,边为连接域的物理连接。
选取某个区域的互联网上的路由器层面的网络,将各个路由器按照顺序标号,各 个路由器的连接状况用无权边来连接表示,无连接为O,有连接的为l,建立商空间覆盖模 型。本实施例中对于一个无向无权网络,共有5个节点记为X{1, 2, 3, 4, 5, 6, 7, 8},设其边 集E :节点1到节点2、节点1到节点3、节点2到节点3、节点2到节点4、节点3到节点5、 节点4到节点6、节点5到节点6、节点5到节点7、节点6到节点8、节点7到节点8之间有 边,其他节点间无相连。
其初始网络,对应的邻接矩阵^ =
<formula>formula see original document page 12</formula> 根据改进的Floyd算法,求所有顶点对的最短路径矩阵D和最短路径步数矩阵St
其计算机算法的伪代码为 begin
<formula>formula see original document page 12</formula>对于无权网络来说,最短路径矩阵D和最短路径步数矩阵S是相等的,求得的最短
<formula>formula see original document page 13</formula>
应用二分查找追踪法来提取从出发点节点1到目的地节点8的最短路径根据最 短路径步数矩阵S求得S(l,8) = 4,则得到源节点1到汇节点8的最短路径步数k = 4。
最短路径步数k除以2的对其上取整得前步数、=2,最短路径步数k减去前步 数、得后步数k2 = 2 ;在最短路径步数矩阵S中的节点1行向量中搜索步数等于前步数、 =2,得前步数节点集Akl = {4, 5},在最短路径步数矩阵S中的节点8列向量中搜索步数等 于后步数k2 = 2,得后步数节点集Ak2 = {4, 5};取前步数节点集Akl和后步数节点集Ak2交 集为{4, 5}。 在交集中选择第一个节点4,节点4为出发点节点1到目的地节点8的最短路径的 一层中间节点,并行求解节点1到节点4最短路径的中间节点和节点4到节点8最短路径 的中间节点 求节点1到节点4最短路径的中间节点前步数、代替最短路径步数k,节点4替 代汇节点,则有最短路径步数k = 2,源节点为节点l,汇节点为节点4 ;最短路径步数k除
以2的对其上取整得前步数、=l,最短路径步数k减去前步数、得后步数k2 = 1 ;在最
短路径步数矩阵S中的节点1行向量中搜索步数等于l,得前步数节点集Aw = {2,3},在最 短路径步数矩阵S中的节点4列向量中搜索步数等于步数l,得后步数节点集Ak2二 {2};取 节点集合Akl和节点集合Ak2交集为{2}。节点2为出发点节点1到目的地节点8的最短路 径的前二层中间节点,再求节点1到节点2最短路径的中间节点和节点2到节点4最短路 径的中间节点,由于lq = 1和k2 = l,表示节点1到节点2的最短路径为节点1到节点2的 边,节点2到节点4的最短路径为节点2到节点4的边。 求节点4到节点8最短路径的中间节点后步数k2代替最短路径步数k,节点4替 代源节点,则有最短路径步数k = 2,源节点为节点4,汇节点为节点8 ;最短路径步数k除 以2的对其上取整得前步数、=l,最短路径步数k减去前步数、得后步数k2 = 1 ;在最 短路径步数矩阵S中的节点4行向量中搜索步数等于l,得前步数节点集Aw = {6},在最短 路径步数矩阵S中的节点8列向量中搜索步数等于步数l,得后步数节点集Ak2二 {6,7};取 节点集合Akl和节点集合Ak2交集为{6}。节点6为出发点节点1到目的地节点8的最短路 径的后二层中间节点,再求节点4到节点6的最短路径和节点6到节点8的最短路径,由于 ki = i和k2 = l,表示节点4到节点6的最短路径为节点4到节点6的边,节点6到节点8 的最短路径为节点6到节点8的边。 在出发点节点1与目的地节点8之间将所得到的各层中间节点顺次插入到对应位 置,即得到出发点到目的地的一条最短路径出发点,前二层中间节点,一层中间节点,后二 层中间节点,目的地;得最短路径1 , 2 , 4 , 6 , 8 。
在交集中选择第二个节点5,节点5为出发点节点1到目的地节点8的最短路径的 一层中间节点,并行求解节点1到节点5的最短路径和节点5到节点8的最短路径
求节点1到节点5最短路径的中间节点前步数、代替最短路径步数k,节点5替 代汇节点,则有最短路径步数k = 2,源节点为节点l,汇节点为节点5 ;最短路径步数k除 以2的对其上取整得前步数、=l,最短路径步数k减去前步数、得后步数k2 = 1 ;在最 短路径步数矩阵S中的节点1行向量中搜索步数等于l,得前步数节点集Aw = {2,3},在最 短路径步数矩阵S中的节点5列向量中搜索步数等于步数l,得后步数节点集合Ak2二 {3}; 取前步数节点集Akl和后步数节点集Ak2交集为{3}。节点3为出发点节点1到目的地节点 8的最短路径的前二层中间节点,再求节点1到节点3的最短路径和节点3到节点4的最短 路径,由于、=1和k2 = l,表示节点1到节点3的最短路径为节点1到节点3的边,节点 3到节点5的最短路径为节点3到节点5的边。 求节点5到节点8最短路径的中间节点后步数k2代替最短路径步数k,节点5替 代源节点,则有最短路径步数k = 2,源节点为节点5,汇节点为节点8 ;最短路径步数k除 以2的对其上取整得前步数、=l,最短路径步数k减去前步数、得后步数k2 = 1 ;在最 短路径步数矩阵S中的节点5行向量中搜索步数等于l,得前步数节点集Aw二 {6,7},在最 短路径步数矩阵S中的节点8列向量中搜索步数等于步数l,得后步数节点Ak2二 {6,7};取 前步数节点集Akl和后步数节点集Ak2交集为{6, 7}。节点6和节点7为出发点节点1到目 的地节点8的最短路径的后二层中间节点,选取交集中的第一个节点6,再求节点4到节点 6的最短路径和节点6到节点8的最短路径,由于、=1和k2 = l,表示节点5到节点6的 最短路径为节点5到节点6的边,节点6到节点8的最短路径为节点6到节点8的边;选取 交集中的第二个节点7,再求节点5到节点7的最短路径和节点7到节点8的最短路径,由 于ki = i和k2 = l,表示节点5到节点7的最短路径为节点5到节点7的边,节点7到节 点8的最短路径为节点7到节点8的边。 在出发点节点1与目的地节点8之间将所得到的各层中间节点顺次插入到对应位
置,即得到出发点到目的地的一条最短路径出发点,前二层中间节点,一层中间节点,后二
层中间节点,目的地;得最短路径1,3,5,6,8和1,3,5,7,8。最后得最短路径有三条1,2,4,6,8、1,3,5,6,8和1,3,5,7,8。 以上是对有向无权网络的一个例子分析。 对于无向无权网络,可以作为两个有向无权网络的叠加,最短路径矩阵D和最短 路径步数矩阵S为对称矩阵且D和S相等,故采用二分查找追踪法查找源节点到汇节点的 最短路径过程是一样的。 应用二分查找追踪算法提取出任意两节点间的最短路径,再将最短路径的数字编 码对应于各个网络路由器名称,即可得到任意两路由器之间的最短路径,使得网络路径经 过路由器最少,为网络中的路径选择提供方便,为网络资源的综合充分利用创造条件。对于 移动无线网络路由,也是与此类似的。 以上是总体的最短路径的提取查找过程,对于每个路由器预先应用改进的 Di jkstra算法计算出以自身为源节点的最短路径树,该最短路径树存储的是源节点到其他 节点的最短路径步数,再利用二分查找追踪法就可以快速提取最短路径线路。
实施例2 :提取道路网格中的加权网络的最短路径
对于公路交通网络中,节点为有交叉点的地名,边为道路。在铁路交通网络中,节 点为火车站,边为铁路。同理在航空网络以飞机场为节点,边是航班。
下面以公路网络来举例说明。 根据中国《公路工程技术标准》将公路划分为五个等级,城市道路分为快速路、主 干路、次干路及支路四类。具体的城市路段通常包括高速公路、街、路、巷、道多种类型。在 城市、城乡和城镇间,公路路段有高速公路、国道、省道和乡镇公路,路道有4车道、3车道、2 车道和单车道。对于某一有公路相通的城镇集合地区构建道路交通网络图,可将其节点对 应为城市的具体地点和各个叉路口,网络边上的权则可根据公路的节点间的距离和行驶速 度来设定,其中行驶速度是根据路段类型、路面宽度、允许行车时速和红绿灯设置间距来设 定对于路段好、路面宽、允许时速大和红绿灯间距大的路段,所对应的速度快,反之对应的 速度慢小。 将所选取的某一地区城市间公路网络中的城市地点、各个叉路口按顺序标号为1, 2,3,4,5,6,7,8 ;城市间的交通公路状况用带权值的网络边表示无公路连接的两城市间 的网络边权值是0,其它网络边权值的大小由公路的节点间的距离和行驶速度来设定,将距 离除以行驶速度得到边的权值大小;由上面设定条件所对应出其节点2到节点3、节点3到 节点4、节点5到节点6、节点6到节点8的权值分别为5,节点4到节点5、节点4到节点7、 节点5到节点4的权值分别为4,节点2到节点4、节点2到节点5、节点5到节点7、节点7 到节点8的权值分别为3,节点1到节点3、节点4到节点6的权值分别为2,节点1到节点 2、节点6到节点7的权值分别为l,其它节点间无相连。
1 2 0 0 0 0 0、 00533000 00050080 00004240 00040530 0 0 0 0 0 0 1 5 00000003 、0 0 0 0 0 0 0 0, 根据改进的Floyd算法或者改进的Dijkstra算法,求所有顶点对的最短路径矩阵 D和最短路径步数矩阵S。
,0 1 12 2 3 3 4、 0 0 1 1 1 2 2 3 0 0 0 1 2 2 1 2 0 0 0 0 1 1 2 3 0 0 0 1 0 1 1 2 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 1 、 , 、0 0 0 0 0 0 0 0; 应用二分查找追踪法来提取从节点1到节点8的最短路径。根据最短路径步数矩 阵S求得S(1,8) = 4,则得到源节点1到汇节点8的最短路径步数k = 4。
15 其初始网络,对应的邻接矩阵A- D=
,0 1 2
0 0 5
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
4
3
0
4 0 0 0
4 6 7
3 5 6 9 7 8
4 2 3 0 5 3 0 0 1 0 0 0 0 0 0
10 9
11 6 6 4 3 0
,S=
步数k除以2的对其上取整得、=2,步数k减去、得k2 = 2 ;在最短路径步数 矩阵S中的节点1行向量中搜索步数等于2,得其节点集合A^ = {4,5},在最短路径步数矩 阵S中的节点8列向量中搜索步数等于步数2,得其节点集合A^二 {3,5,6};取节点集合 AM和节点集合A^交集为{5}。 在交集中选择节点5,求节点1到节点5的最短路径和节点5到节点8的最短路 径 步数、除以2的对其上取整得kn = 1,步数、减去ku得k12 = 1 ;在最短路径步 数矩阵S中的节点l行向量中搜索步数等于l,得其节点集合Aku = {2,3},在最短路径步 数矩阵S中的节点5列向量中搜索步数等于步数l,得其节点集合Ak2二 {2,4};取节点集合 Akl和节点集合Ak2交集为{2}。再求节点1到节点2的最短路径和节点2到节点5的最短 路径,由于ku = 1和k12 = l,表示节点1到节点2的最短路径为节点1到节点2的边,节 点2到节点5的最短路径为节点2到节点5的边。 步数k2除以2的对其上取整得k21 = 1,步数k2减去k21得k22 = 1 ;在最短路径步 数矩阵S中的节点5行向量中搜索步数等于1,得其节点集合A^ = {4,6,7},在最短路径 步数矩阵S中的节点8列向量中搜索步数等于步数l,得其节点集合Ak2二 {7};取节点集合 Ak21和节点集合Ak22交集为{7}。再求节点5到节点7的最短路径和节点7到节点8的最短 路径,由于k21 = 1和k22 = l,表示节点5到节点7的最短路径为节点5到节点7的边,节 点7到节点8的最短路径为节点7到节点8的边。 得节点1到节点8的最短路径为(1,2,5,7,8),其最短路径长度为D(1,8) = 10。
应用二分查找追踪法提取网络中的最短路径,然后将最短路径的数字编码对应于 城市和各个叉路口的名称对应,即得到任意两个地理位置间的最短路径。如果只需要两地 理位置间的最短路径线路,只要预先存储最短路径步数矩阵即可,这样大大减少了空间存 储便于在实际中应用。 以上是有向加权网络的一个例子分析,对于无向加权网络可以认为是两个有向加 权网络的叠加,最短路径矩阵D和最短路径步数矩阵S为对称矩阵,二分查找追踪法在查找 源节点到汇节点的最短路径过程是一样的。
实施例3 :提取电力系统网络中的最短路径 根据我国远距离输电的电压有110千伏、220千伏、330千伏,近年还建成了 500千 伏的超高压输电线路,以及国外还建有1150千伏的试验性超高压输电线路的具体实际情 况,对电力系统的电力输送过程建立有向加权网络,节点是各个配电变压器、升压器和降压 器,边上的权根据输送线路的输送电压、线路总长度和输送功率等来决定,其输送过程中的 电能损耗越少,其边上权值越小。 选取某一区域的电力输送系统,将各个配电变压器、升压器和降压器按照顺序标
号,各个配电变压器、升压器和降压器的连接状况用加权的有向边表示,无连接的权值是o,
其它的权值根据输送过程中的电能损耗越少来决定。应用本发明方法通过计算机仿真模拟 了 1500节点以内的网络,分别用改进的Dijkstra算法和改进的Floyd算法计算最短路径 步数矩阵,应用二分查找追踪法来提取查找最短路径线路,并与逆向追踪算法进行了时间 复杂度的比较,其中二分查找追踪法速度要快。 应用二分查找追踪法提取任意两节点间的最短路径,然后将最短路径的数字编码对应于各个配电变压器、升压器和降压器名称对应,即可以得到任意两配电变压器、升压器
和降压器间的最短路径,从而为电力输送过程提供了方便。
实施例4 :提取物流运输网中最短路径 在物流运输网的地图中,先标出地图中各线路的交叉点和各交叉点间边,根据改 进的狄克斯特拉(Dijkstra)算法或改进的弗洛伊德(Floyd)算法的求得所有交叉点间的 最短路径步数,并在地图上标出所有交叉点间的最短路径步数;将出发点到目的地的最短 路径步数除以2后上取整作为前步数,出发点到目的地的最短路径步数减去前步数作为后 步数;在地图上找出出发点到其它交叉点的最短路径步数等于前步数,记录这些交叉点为 前步数节点集;再在地图上找出各交叉点到目的地的最短路径步数等于后步数,记录其交 叉点为后步数节点集;在前步数节点集和后步数节点集中找出共同的交叉点,即为在地图 上标记为最短路径必经过的一层中间点;再用相同的方法分别求出发点到一层中间点的中 间节点为前二层中间点、一层中间点到目的地的中间点为后二层中间点,如此类推,直到要 搜索的节点间的最短路径步数为1时为止;按照出发点,...,前二层中间点,...,一层中间 点,...,后二层中间点,...目的地顺序得到一个交叉点序列,即为出发点到目的地的最短 路径。 应用二分查找追踪法提取任意两节点间的最短路径,为物流运输的路径寻优过程 提供了多条可供选择的快捷线路,从而可减少运输的费用和时间、带来良好的经济效益。
1权利要求
一种网络图中最短路径的二分查找追踪法,先把出现在包括计算机网络、道路网格、电力系统网或物流运输网在内的实际网络中存在的交叉点作为节点、交叉点之间的联系作为边形成网络图,将所有的节点随机地从1开始按自然数字进行编号,节点之间的边用邻接矩阵存储;其特征在于采用改进的狄克斯特拉算法或改进的弗洛伊德算法来获得最短路径步数矩阵;将实际网络中的出发点作为源节点,将目的地作为汇节点,从出发点到目的地的最短路径步数即出发点到目的地的最短路径经过的编号节点个数加上1,是最短路径步数矩阵中源节点的行、汇节点的列的值;从最短路径步数矩阵提取源节点到汇节点的最短路径步数,接着查找源节点到汇节点最短路径的中间节点判断源节点到汇节点的最短路径步数是否为1,如果为1,源节点到汇节点最短路径没有中间节点,结束其中间节点的查找过程;否则对源节点到汇节点的最短路径步数进行拆分,将最短路径步数除以2并对其上取整作为前步数,源节点到汇节点的最短路径步数减去前步数作为后步数;从最短路径步数矩阵的源节点行向量中搜索出步数等于前步数的所有节点,其节点编号的集合称为前步数节点集;从最短路径步数矩阵的汇节点列向量中搜索步数等于后步数的所有节点,其节点编号的集合称为后步数节点集;取前、后步数节点集的交集,称该交集为源节点到汇节点最短路径的中间节点集,则该集合中的每个节点为源节点到汇节点最短路径的中间节点,作为出发点到目的地最短路径的一层中间节点;以每个出发点到目的地最短路径的一层中间节点为基准,并行进行查找源节点到一层中间节点最短路径的中间节点、一层中间节点到汇节点最短路径的中间节点,其操作如下查找源节点到一层中间节点最短路径的中间节点,源节点不变,一层中间节点作为汇节点,前步数为源节点到汇节点的最短路径步数,接着重复前面所述的查找源节点到汇节点最短路径的中间节点,得到源节点到汇节点最短路径中的中间节点集,将该中间节点集中的每个节点作为出发点到目的地最短路径的前二层中间节点;查找一层中间节点到汇节点最短路径的中间节点,一层中间节点作为源节点,汇节点不变,后步数为源节点到汇节点的最短路径步数,接着重复前面所述的查找源节点到汇节点最短路径的中间节点,得到源节点到汇节点最短路径中的中间节点集,其集合中的每个节点作为出发点到目的地最短路径的后二层中间节点;分别以每个出发点到目的地最短路径的前、后二层中间节点为基准,并行进行查找源节点到前二层中间节点、前二层中间节点到一层中间节点、一层中间节点到后二层中间节点、后二层中间节点到汇节点最短路径的中间节点;依此类推,直到要搜索的节点间的最短路径步数为1时为止;在出发点与目的地之间将所得到的各层中间节点顺次插入到对应位置,即得到出发点到目的地的所有最短路径;根据网络图中编号节点与实际网络中交叉点的一一对应关系,最短路径线路上的中间节点分别对应实际网络中的交叉点,即得到实际网络中从出发点到目的地的所有最短路径,选择其中任意一条线路即为出发点到目的地最优路径,从而快速实现了实际复杂网络中的路径择优;所述改进的狄克斯特拉算法为,对每个节点设置一对标号第一个标号表示从源节点到该节点的最短路径距离,第二个标号表示从源节点到该节点的最短路径的步数;其算法步骤包括步骤一、初始化源节点的一对标号设置为0和空,其他节点一对标号设置为无穷大和未定,设置源节点为已标记节点,其他节点为未标记节点;步骤二遍历所有已标记的节点到其有边连接的未标记节点,对于每个未标记节点,如果源节点到该未标记节点最短路径距离大于中间插入第三个节点后最短路径距离,更新该未标记节点的第一个标号为中间插入第三个节点后最短路径距离,第二个标号在原来的基础上加上1;步骤三从未标记的节点中选取其第一个标号的值最小的节点,将其设置为已标记;步骤四、判断是否还有未标记点如果有,转向步骤二;否则退出,算法结束;将每个节点的第一个标号插入到最短路径距离矩阵的源节点标号的向量中,将每个节点的第二个标号插入到最短路径步数矩阵的源节点标号的向量中;以每个节点作为源节点重复使用改进的狄克斯特拉算法,得到最短路径距离矩阵和最短路径步数矩阵;所述改进的弗洛伊德算法为初始最短路径距离矩阵赋值为邻接矩阵;最短路径步数矩阵根据邻接矩阵两节点是否有边存在两节点间有边存在,其对应的最短路径步数赋值为1,否则赋值为0;更新最短路径距离矩阵和最短路径步数矩阵如果两个节点间的最短路径距离大于中间插入第三个节点后的最短路径距离,更新其最短路径距离为插入第三个节点后的最短路径距离,两个节点间的最短路径步数更新为这两个节点分别与第三个节点最短路径步数之和;把每个节点作为第三个节点,循环执行上述更新最短路径距离矩阵和最短路径步数矩阵。
2.如权利要求1所述网络图中最短路径的二分查找追踪法,特征在于其中的某一条最 短路径查找的具体操作如下对已给定的网络图,根据其邻接矩阵A采用改进的狄克斯特拉算法或改进的弗洛伊德 算法的得到最短路径步数矩阵S,从节点i到节点j的最短路径所经过的网络图中边的条数 即为节点i到节点j的最短路径步数S(i, j);对于给定出发点作为源节点S,目的地作为汇 节点t,根据最短路径步数矩阵S,得到源节点S到汇节点t的最短路径步数k = S(S, t);查找源节点S到汇节点t最短路径的中间节点步骤1、判断如果最短路径步数k为1,则源节点S到汇节点t最短路径为边e (S, t), 结束源节点S到汇节点t最短路径的中间节点的查找过程;否则,取前步数、等于最短路 径步数k除以2后对其上取整,后步数k2等于最短路径步数k减去前步数、;步骤2 :在最短路径步数矩阵S中的源节点S行向量中搜索步数等于前步数、的所有 节点,得到其前步数节点集Akl ;在最短路径步数矩阵S中的汇节点t列向量中搜索步数等 于后步数k2的所有节点,得到其后步数节点集Ak2 ;步骤3 :取前步数节点集Aw和后步数节点集Ak2的交集,在该交集中任意选择一个中间 节点t ;结束源节点s到汇节点t最短路径的中间节点的查找过程,中间节点^即为源节点s到汇节点t最短路径的一个中间节点,作为出发点到目的地最短路径的一层中间节点;步骤4、查找源节点到中间节点^最短路径的中间节点,作为出发点到目的地最短路径的前一层中间节点以中间节点t替代前面的汇节点t,前步数、替代最短路径步数k,查 找源节点S到汇节点t最短路径的中间节点,跳转到步骤1 ;步骤5、与步骤4并行,查找中间节点^到汇节点t最短路径的中间节点,作为出发点到目的地最短路径的后一层中间节点以中间节点"替代前面的源节点S,后步数k2替代 最短路径步数k,查找源节点S到汇节点t最短路径的中间节点,跳转到步骤1 ;再分别查找源节点到前二层中间节点、前二层中间节点到一层中间节点、一层中间节 点到后二层中间节点、后二层中间节点到汇节点最短路径的中间节点,依此类推,直到要搜 索节点间的最短路径步数为1时为止;在出发点与目的地之间将所得到的各层中间节点顺次插入到对应位置,即得到出发点 到目的地的一条最短路径出发点,…,前二层中间节点,…,一层中间节点,…,后二层中 间节点,…,目的地;所述改进的狄克斯特拉算法为每个节点有一对标号Dn、Sn,其中第一个标号Dn是从起源节点到节点n的最短路径的长度,第二个标号Sn记录的是从源节点到节点n的最短路径 的步数。其算法步骤包括步骤(A)、初始化源节点标号第一个标号A、第二个标号Ss分别设置为0、空,其他节点标号的第一个标号Dn、第二个标号Sn设置为无穷大、未定,设置源节点为已标记,其他节点为未标记;步骤(B):遍历所有已标记的节点i到其直接连接的未标记节点j,对于其未标记节点 j,如果节点j的第一个标号Dj大于第一个标号Di与节点i到节点j的距离A(i, j)之和, 更新第一个标号Dj,第二个标号Sj更新为第二个标号Si加上1 ;步骤(C):从未标记的节点中,选取标号中第一个标号Dj最小的节点,将其设置为已标记;步骤(D)、判断是否还有未标记点如果有,转向步骤(B);否则退出,算法结束; 将每个节点的第一个标号Dn插入到最短路径距离矩阵D的源节点标号的向量中,将每 个节点的第二个标号Sn插入到最短路径步数矩阵S的源节点标号的向量中;以每个节点作 为源节点重复使用改进的狄克斯特拉算法,得到最短路径距离矩阵D和最短路径步数矩阵S ;所述改进的弗洛伊德算法为初始最短路径距离矩阵D赋值为邻接矩阵A,最短路径步 数矩阵S根据邻接矩阵A中两节点是否有边存在,如果有边存在赋值为l,否则赋值为O ;对于每一个节点k,如果节点i到节点j的最短路径距离D(i, j)大于节点i到节点k的最短 路径距离D(i, k)与节点k到节点j的最短路径距离D(k, j)之和,更新节点i到节点j的 最短路径距离D(i,j)为节点i到节点k的最短路径距离D(i,k)与节点k到节点j的最短 路径距离D(k, j)之和,节点i到节点j的最短路径步数S(i, j)更新为节点i到节点k的 最短路径步数S(i, k)与节点k到节点j的最短路径步数S(k, j)之和。
3. 如权利要求2所述网络图中最短路径的二分查找追踪法,特征在于对所述步骤1中 最短路径步数k的拆分方式采用前步数、等于最短路径步数k减去1、后步数k2等于1来 替代,则转化成逆向追踪法。
4. 如权利要求2所述网络图中最短路径的二分查找追踪法,特征在于所述步骤3中前 步数节点集Akl和后步数节点集Ak2的交集中有多个中间节点,表明源节点到汇节点有多条 最短路径;则采用每次取不同的中间节点源节点s到汇节点t最短路径的中间节点执行步 骤4和步骤5,即提取出多条不同的最短路径。
5. 如权利要求2所述网络图中最短路径的二分查找追踪法,特征在于将所述步骤4和 步骤5在并行计算机中分别分配给2个处理器进行最短路径的提取,加快算法的进程。
6. 如权利要求1所述网络图中最短路径的二分查找追踪法,特征在于在实际网络的地图上作业具体操作方法如下先标出地图中各线路的交叉点和各交叉点间边,根据改进的狄克斯特拉算法或改进的 弗洛伊德算法的求得所有交叉点间的最短路径步数,并在地图上标出所有交叉点间的最短 路径步数;将出发点到目的地的最短路径步数除以2后上取整作为前步数,出发点到目的 地的最短路径步数减去前步数作为后步数;在地图上找出出发点到其它交叉点的最短路径 步数等于前步数,记录这些交叉点为前步数节点集;再在地图上找出各交叉点到目的地的 最短路径步数等于后步数,记录其交叉点为后步数节点集;在前步数节点集和后步数节点 集中找出共同的交叉点,即为在地图上标记为最短路径必经过的一层中间点;再用相同的 方法分别求出发点到一层中间点的中间节点为前二层中间点、一层中间点到目的地的中间 点为后二层中间点,如此类推,直到要搜索的节点间的最短路径步数为1时为止;按照出发 点,…,前二层中间点,…,一层中间点,…,后二层中间点,…目的地顺序得到一个交叉 点序列,即为出发点到目的地的最短路径。
全文摘要
本发明公开了一种网络图中最短路径的二分查找追踪方法,特征是根据最短路径步数矩阵提取源节点到汇节点的最短路径步数,对其折半拆分为前、后步数;在最短路径步数矩阵的源节点行向量中搜索步数等于前步数的节点,为前步数节点集;在最短路径步数矩阵的汇节点列向量中搜索步数等于后步数的节点,为后步数节点集;取前、后步数节点集的交集为中间节点;以交集中每节点为基准,用上述方法求源节点与该节点、该节点与汇节点的中间节点,直到需求解节点间最短路径步数为1为止;将所求的中间节点顺次插到对应位置得源到汇节点的所有最短路径;利用本发明方法查找两点间所有最短路径,可对应于实际数据中抽象出网络图的择优路径选择提供多种方案。
文档编号G06F17/30GK101788999SQ20091025166
公开日2010年7月28日 申请日期2009年12月30日 优先权日2009年12月30日
发明者何富贵, 张燕平, 张铃, 赵姝, 陈洁 申请人:安徽大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1