[发明专利]一种基于Boost库的K则最短路径搜索方法和系统有效
申请号: | 201110406474.2 | 申请日: | 2011-12-08 |
公开(公告)号: | CN102523155A | 公开(公告)日: | 2012-06-27 |
发明(设计)人: | 卢利锋;周静 | 申请(专利权)人: | 中国电力科学研究院 |
主分类号: | H04L12/56 | 分类号: | H04L12/56 |
代理公司: | 北京安博达知识产权代理有限公司 11271 | 代理人: | 徐国文 |
地址: | 100192 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 boost 则最短 路径 搜索 方法 系统 | ||
技术领域
本发明属于计算机网络领域,具体涉及一种基于Boost库的K则最短路径搜索方法和系统。
背景技术
在网络规划或路径搜索中,经常需要寻找新路由,一般地,这可以通过图论中的最短路径方法解决。常用的最短路方法是广度优先方法、dijkstra方法等经典方法。这些方法的一个共同特点是只寻找图中给定点到任意点间的最短路径。但是这在实践中往往是不够的,比如,在路由规划中,除了最短路径外,可能需要寻找第二短路径作为备用,在有些条件下,可能需要寻找第三、第四短的路径或者所有路径。这类问题统一称为K短路径问题或K则最短路径问题。
K短路径问题最早由Hoffman和Pavley提出,多年来一直受到业界广泛重视,K短径分为严密K则最短路径方法和有损K则最短路径方法两类。前者具有严密的理论基础,所得到的K条路径是起终点间所有可能路径按权值递增排序后的前K条路径,后者通过启发式策略等技术,通过牺牲有限的精度以换取效率的大幅度提高。根据路径是否成环,K则最短路径方法还可以分为限定无环方法和自由路径方法。前者要求求得的路径必须是简单路径,不能含有回路,后者允许路径包含回路。限定无环路径的K则最短路径应用更加普遍。本发明针对限定无环K短路径。
与单源最短路径问题相比,K则最短路径问题在方法设计上更为复杂,目前尚没有一种K则最短路径方法如单源最短路径方法中的Dijkstra方法一样得到业界共识并且达到大规模实用化程度。对于单源最短路径问题,已经有现成的可以直接调用的高效率免费开源计算机方法,最著名的是C++Boost Graph图库。该库已经集成了图论中的大多数基本方法,包括BFS、DFS、dijkstra、Bellman Ford等基本最短路径方法,这样大大减轻了应用的难度,基本可以直接嵌入在自己代码中,不需要单独编写方法本身代码。
常用的K短路径搜索方法有删除边方法、偏离边方法等。但是这些方法仅仅是一种理论上的模型,与实际应用还有一定差距,不同于最短路径方法,尚未有开源的成熟高效计算机方法可供直接应用。
发明内容
本发明的目的是供一种能直接应用于网络的多重最短路径搜索方法,该方法应能解决以下几个方面具体问题:
1)可提供限定无环路径的K则最短路径问题的计算机算法,具有实用性,而非一种纯理论上的算法概念;
2)给出源宿节点间任意给定数目(即K数)并且以路径距离排序的所有路径,如果实际路径数小于K或K=0,则给出所有实际路径,否则给出前K短路径;
3)可提供限定分离条件的K则最短路径问题计算机算法,限定分离方式分别为节点分离、边分离、不分离3种;
为实现上述目的,本发明提供一种基于Boost库的K则最短路径搜索方法,其改进之处在于:该方法在成熟的C++Boost Graph图库基础之上扩展K则最短路径算法;采用d叉堆数据结构最优化排序待选最短路径;采用偏离边的方式发展多重最短路由。
本发明提供的优选技术方案中,所述K短路径搜索方法包括如下步骤:
步骤1:调用Boost库函数计算源宿节点间最短路径,令k=1;
步骤2:如果要求路径分离,则调用支持分离的K短路径算法,否则进入步骤3;
步骤3:定义d叉堆数据结构Q,将所求最短路径放入堆Q;
步骤4:判断如果k<K且堆Q不空,进入步骤5,否则算法结束;
步骤5:从堆Q中弹取出第k短路径,记为p,采用偏离边方法从p发展新的偏离短路径,存入堆Q;
步骤6:k++,返回步骤4;
本发明提供的第二优选技术方案中,在所述步骤2中支持分离的K短路径搜索方法包括如下步骤:
步骤2-1:判断如果k<K并且第k短路径非空则进入步骤2-2,否则算法结束;
步骤2-2:将前k短路径所有节点或边存入排除列表;
步骤2-3:调用改进Boost库函数,忽略(不遍历)排除列表中的节点或边,求得第k+1短路径,存入所求K短路径集;
步骤2-4:k++,返回步骤2-1。
本发明提供的第三优选技术方案中,在所述步骤5中以路径p为基础发展偏离路径方法包括如下步骤:
步骤5-1:令i=路径p偏离点索引;
步骤5-2:判断如果i<p.size()则进入步骤5-3,否则算法结束;
步骤5-3:记录i对应节点为dev,记录路径p中第一个节点到第i节点集合为colors,记录节点dev对应偏离边集合为edges;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电力科学研究院,未经中国电力科学研究院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110406474.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:插齿机主运动控制装置
- 下一篇:铸造生产流水线