矢量地图中一种求最短路径的快速算法.docVIP

矢量地图中一种求最短路径的快速算法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
矢量地图中一种求最短路径的快速算法.doc

矢量地图中一种求最短路径的快速算法   摘 要:在分析总结了经典Dijkstra算法的基础上,提出了求最短路径的一种快速实现算法,根据算法的复杂度与网络节点数n成线性关系即O(n)的特点,给出了该算法的具体实现结构。   关键词:最短路径算法;城市道路网络;地理信息系统;经典Dijkstra算法   中图分类号:TP391 文献标识码:A 文章编号:2095-1302(2015)09-00-03   0 引 言   最短路径问题(SP)是最基本的网络优化问题之一,在交通网络分析系统中占有重要地位,是其它网络优化算法的基础。最短路径问题在实际中常用于汽车导航系统以及各种应急系统,这些系统一般要求到目的地的最佳路线所用时间尽可能短,并且要求根据交通状况进行实时计算。经典的最短路径算法――Dijkstra算法是目前多数系统解决最短路径问题采用的理论基础,不同系统对Dijkstra算法采用了不同的实现方法。本文以经典Dijkstra算法为理论基础,在对矢量地图进行大量分析、实验的基础上,提出最短路径的一种快速实现算法,算法的复杂度与网络节点数n成线性关系,即O(n),与经典Dijkstra算法的O(n2)相比,提高了算法的实用性。   1 最短路径快速实现算法   1.1 经典Dijkstra算法的主要思想   Dijkstra算法的基本思路是:假设每个点都有一对标号(dj , pj),其中dj是从源点s到点j的最短路径的长度(不包括顶点到其本身);pj则是从s到j的最短路径中j点的前一点,k为已标记节点的集合。求解从源点s到点j的最短路径算法的基本过程如下:   (1)初始化。源点设置为:ds=0,ps为空;所有其它点:di=∞,pi=?;标记源点s,记k ={s},其他所有点设为未标记。   (2)检验从所有已标记的点k到其直接连接的未标记的点j的距离,并设置:dj=min[dj,dk+lkj],其中,lkj是从点k到j的直接连接距离。   (3)选取下一个点。从所有未标记的结点中,选取dj中最小的一个i:di=min[dj,所有未标记的点j],点i就被选为最短路径中的一点,并设为已标记的。   (4)找到点i的前一点。从已标记的点中找到直接连接到i的点j,作为前一点,设置:pi= j。   (5)如果所有点已标记,则算法完全退出,否则,记k=k ∪{i},转到(2)再继续。   1.2 Dijkstra算法的分析与待改进的地方   图1所示是上海市区的部分街道图,其中节点1为起始点。根据上一节描述的Dijkstra算法,当计算进行到若干次循环后的情况如图1所示。其中“◎”表示已标记的节点,“●”表示与已标记节点相邻的未标记节点。可以看到,此时图1中节点1、2本身都已标记,并且它们相邻的节点也已标记。因此形如节点1、2这种类型的节点应该而且能够直接跳过算法的第(2)步,从而不做比较。设已标记节点为m个,其中相邻节点中有未标记的已标记节点有k个,我们令K={dj|j=1,...,k},M={dj|j=1,...,m},则KM。把集合K用平滑曲线连接起来,可以得到一个以起始点为原点的近似圆c,其中集合K中的元素位于圆c的周围长上,集合M是圆c围住的所有已标记节点。   图1 道路示意图   表1、表2是以上海市城区道路图数据为例的实验结果,从中可以观察kMax和mMax,和之间的关系。   表1的几点说明:所有数据的起点相同,终点随机选取;kMax、mMax为计算最短路径时集合K和集合M中元素曾经达到的的最大数目,和则是集合K和集合M中元素的平均个数;ArcNum为起点到终点沿最短路径所经过的弧段的个数;Distance是起点到终点的实际距离,单位是m。显然,弧段的个数与实际距离不成正比。   关于表2的几点说明:取表1的最后一组数据,即kMax=135,mMax=6 756来验证一次Dijkstra算法计算最短路径时集合K中元素个数Knum和集合M中元素个数Mnum之间的关系,Knum的采样间隔大约为10。随着计算的进行,集合K中元素的数目逐渐增多,集合M中元素的数目增长的非常快。若干次计算后,集合K、M中的元素数目分别达到最大值kMax和mMax。   观察表1、表2的数据,可以得到如下结论:   (1)随着起点和终点间距离的增大,kMax、mMax和、都增大,但kMax增长速度远小于mMax,增长速度远小于。最坏情况下与的比例只有3%左右。   (2)集合K中元素的数目始终小于集合M中元素的数目。因此,如果算法中我们只针对集合K进行操作,将极大缩小d的规模,使修改d的时间和在d中选择最小分量的时间因d的规模的缩小而降低很多。更进一步,如果d是有序的,则从k(k≤

文档评论(0)

lmother_lt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档