Dijkstra算法优化及其在GIS中的应用.docVIP

  • 9
  • 0
  • 约4.29千字
  • 约 7页
  • 2016-09-10 发布于北京
  • 举报
Dijkstra算法优化及其在GIS中的应用.doc

Dijkstra算法优化及其在GIS中的应用   摘 要:本文在详细介绍经典Dijkstra算法和对算法性能深入分析的基础上,发现制约经典算法的瓶颈是问题的规模,提出从减少搜索计算顶点数量入手,对经典算法进行改进。详细分析了算法的设计思想并给出了设计步骤,并通过在ArcGis平台进行二次开发验证了算法的正确性和性能。   关键字:Dijkstra算法;最短路径;GIS   中图分类号:TP301.6   Dijkstra算法是一种经典的求最短路径的算法。所谓最短路径问题是指:从带权图的某一顶点出发,找出一条通往另一顶点的最短路径。最短路径问题是GIS应用中研究的一个重要内容,在事故抢修、交通指挥、应急管理、GPS导航等应用中都是必要的功能,所以最短路径分析功能一般会作为基本功能集成到GIS平台中,如ARCGIS,SuperMap。多数系统解决最短路径问题采用Dijkstra算法为理论基础,它非常适合在带权有向图中求解单源单目的最短路径问题。   1 经典Dijkstra算法   1.1 算法思想   Dijkstra算法是典型最短路算法,用于计算一个顶点到其他所有顶点的最短路径。其基本思想是,逐步产生最短路径。首先求出从某一顶点出发到其他顶点长度最短的一条路径,然后参照它求出长度次短的路径,依次类推,按路径长度的递增次序,直到计算出该顶点到其他所有顶点的最短路径。   为了实现该算法,设带权图G=(V,E),V为图中顶点的集合,E为边或者弧的集合。设集合S存放已经求出的最短路径的顶点,设集合T为除了S以外的其他顶点,引入辅助数组dist[],它的每一个分量dist[i]表示当前找到的从出发点到顶点i的最短路径长度。   算法的具体步骤:   (1)初始化:S={V0};T={V-S};Dist[j]=Edge[0][j];j=1,2,…..n-1,n为图中顶点的个数;   (2)求出最短路径长度:dist[k]=min{dist[i]},i∈V-S;S=S∪{k};   (3)修改:dist[i]=min{dist[i],dist[k]+EDedge[k][i]}对于每一个i∈V-S;   (4)判断:若S=V,则算法结束,否则转到(2);   初始时,S中仅含有初始顶点V0,每次从V-S中取出具有最短特殊路长度的顶点,将其添加到S中,同时对数组dist作必要的修改。一旦S包含了所有V中顶点,dist就记录了从源到所有其它顶点之间的最短路径长度。   1.2 算法分析   实现经典的Dijkstra算法需要两个并列的for循环。一个循环用来实现辅助数组的初始化工作,时间复杂度为O(n),第二个for循环是一个二重循环,实现最短路径求解的功能,因为图中所有顶点都要做计算,每个顶点的计算又要对集合S内的顶点进行检测,对集合V-S中的顶点进行修改,所以时间复杂度为O(n2)。算法总的时间复杂度为O(n2),复杂度比较高。   2 Dijkstra算法改进   通过Dijkstra经典算法思想可知,计算从u到v的最短路径时,也计算了u到S中所有顶点的最短路径,但是,S中的某些顶点可能与最终最短路径中的顶点无关,该算法在进行最短路径搜索过程中会涉及到图中所有的顶点,那么图中S的大小直接影响着算法的速度。这直接影响了算法的效率,因为由时间复杂度可看出顶点数量越多所用时间就越长。优化该算法势在必行。   2.1 改进策略   改进的策略用一句话描述就是顶点覆盖,分段进行。通过前面的分析可知,如果能减少算法中集合S中顶点的个数,会减少算法的运行时间。在这借用希尔提出希尔排序的思想,把有向图中的顶点按照某种策略分成若干个小的集合,形成顶点的全覆盖,这样每个集合的数量就比原来少了,但是把他们合起来顶点及关系总数不变,并且要求不同的集合要有一个连接的关键顶点,关键点的确定是计算最短路径的关键。   顶点覆盖划分的方法可根据具体的计算应用决定,比如可以按照区域划分,按关键点划分,按公路、铁路线划分等等。划分的数量不宜太多也不宜太少,应根据实际情况科学分析。划分数量和每个划分中顶点的数量应事宜,划分数量多,重复执行的次数就有可能多;划分的数量少对算法的改进程度不高。确定连接不同集合的关键点和划分策略有关,有时也要进行事先的运算,关键点应该具有这样的性质,是从一个集合区域到另一个集合区域必经的顶点或者就是终点。最短路径的计算结果是每个小集合划分的结果之和得到的。这样改的好处是,既能减少程序运行时涉及的顶点的数量,如果采用邻接矩阵的方式存储带权图,还能节省存储空间。   2.2 算法设计   下面给出改进算法的方法步骤:   (1)根据划分策略,确定顶点所属不同集合Si,i=1,2,3小于等于划分的个

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档