最短路径算法中Dijkstra算法的优化及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
---------------------------------------------------------------范文最新推荐------------------------------------------------------ 最短路径算法中Dijkstra算法的优化
及应用
摘要:计算最短路径的经典算法之一就是Dijkstra 算法,它是解决工程中最短路径问题的基础。
但是,传统的Dijkstra算法在求解节点间最短路径时,对已标识节点外的大量节点进行了计算,从而影响了算法的速度。
本在传统Dijkstra算法的基础上,对最短路径上节点的邻节点做了一些处理,从而不涉及到其他的一些节点。
故而,此优化算法在计算的节点数较传统算法大幅减少,提高了算法的速度。
本文通过实际应用对改进后的算法进行了简单的验证。
7025
关键词:最短路径;Dijkstra算法;优化算法Optimization and Application of Dijkstra Algorithm for
1 / 9
the Shortest Path
Abstract:Dijkstra algorithm is a classic arithmetic for the shortest path.It is the academic foundation that many engineerings were solved in the shortest path is use.When a shortest path between nodes is searched with Dijkstra algorithm,a lot of nodes away from lagged nodes are involved,so that the efficiency of Dijkstra algorithm is low.An optimization algorithm is presented in this paper based on analysis of Dijkstra algorithm.Only these nodes that the neighbor of nodes in the shortest path are processed, Therefore,the number of processed nodes is largely reduced in the optimization algorithm,and efficiency of the optimization algorithm is improved.
Key Words:the shortest path; Dijkstra algorithm; optimization algorithm
目录
---------------------------------------------------------------范文最新推荐------------------------------------------------------ 摘要1
引言1
1.绪论2
1.1 最短路径算法的研究现状2
1.2 最短路径算法的研究意义2
1.3 已有Dijkstra算法存在的问题2
2.经典的Dijkstra算法3
1.2 最短路径算法的研究意义
最短路径算法是计算机科学与地理信息科学等领域研究的热点,在人们的日常生活中得到很多的应用。
如:对于旅客来说,如果他要从甲地到乙地,他希望
3 / 9
选择一条途中中转次数最少的路线,怎样节省交通费用,应该选择哪条路才能使自己的费用最低、时间最少。
最短路径算法中传统的Dijkstra算法一般用于计算一个源节点到所有其他节点的最小代价路径,并且能够适应网络拓扑的变化,性能稳定,在运输路线规划等领域都应用广泛。
因此,对最短路径问题的研究是很有必要的。
1.3 已有Dijkstra算法存在的问题
原始Dijkstra算法,在存储图形数据、运算时,需要根据其节点与距离之间的关系,形成关联矩阵、距离矩阵与邻接矩阵,需要定义的数组来存储数据,是网络的节点数,网络中的节点数较大时,会占用较大的计算机内存。
2.经典的Dijkstra算法
2.1 Dijkstra算法的思想
设集合存放已经求得最短路径的终点,则为尚未求得最短路径的终点集合。
初始状态时,集合中只有
---------------------------------------------------------------范文最新推荐------------------------------------------------------
一个源点,设为结点。
迪杰斯特拉算法的具体做法是:首先将源点加入中;在算法的每一步中,按照最短路径值的非减次序,产生下一条最短路径( ~> ),并将该路径的终点加入中;直到,算法结束。
为实现迪杰斯特拉算法,设计下列数据结构。
(1)一维数组中存放从源点到结点的当前最短路径的长度。
(2)一维整型数组存放从源点到结点的当前最短路径上,结点的前一个结点。
(3)一维布尔数组,若为true,表示结点在中;否则,表示在中。
下面简述迪杰斯特拉算法计算过程。
(1)求第一条最短路径
在初始状态下,集合中只有一个源点,,所以
5 / 9
,
void MGraph<T>::Dijkstra(int s,T*& d, int *& path)
{
int k,i,j;
if(s<0||s>n-1)throw OutOfBounds;
bool *inS=new bool[n];d=new T[n];path=new int[n];
for(i=0; i<n; i++){//初始化
inS[i]=false; d[i]=a[s][i];//a是有向图G的邻接矩阵
if(i! =s && d[i]<INFTY) path[i]=s;
---------------------------------------------------------------范文最新推荐------------------------------------------------------ Else pash[i]= -1;
}
inS[i]=true; d[s]=0;//将源点加入S中
for(i=1; i<n-1; i++){//求n-1条最短路径
k=Choose( d, inS);//选出下一条最短路径的的结点k inS[k]=true;//将k加入S中
for (j=0; j<n; j++)//更新d和path的值
if (! inS[i]&& d[k]+a[k][j]<d[j]){
d[j]=d[k]+a[k][j]; path[j]=k;
}
}
7 / 9
}
3.优化的Dijkstra算法
3.1 两种Dijkstra优化算法
第一类优化算法——减小算法中成功搜索范围
减小算法中成功搜索的搜索范围以尽快到达目标节点。
在对现实问题中的交通图初始化为网络拓扑图时,虽然终点已知,而源点尚未确定,但依据常识离案发地段最近的派出所应为案发地段所在辖区派出所,或其周边派出所,也就是源点的选取范围可以确定利用MapObjects2组件提供的MapLayer.SearchExpression (expression)记录集筛选方法,根据案发地段(终点)的不同,动态选取案发地段所在辖区及相邻辖区的道路图层及派出所图层数据进行最短路径查询,从而有效地减少了拓扑图中节点总数的值。
第二类优化算法——改进算法的存储结
---------------------------------------------------------------范文最新推荐------------------------------------------------------ 构
在实际工作中,还要建立起空间数据结构。
网络数据结构使用的是“边和节点”的数据结构,该数据结构是建立在图论的基础上,节点可用来定义边的连接关系。
对于网络数据的存储,传统的是采用图论中的邻接矩阵方法,其存储量为( 为网络中节点数)。
通常的地理网络,尽管节点很多,但与节点相关联的节点数目并不多,一般都为稀疏图,将会浪费大量的空间。
若采用邻接表的链式存储结构,其存储量为( 为节点列表中,同节点关联的所有边的数目),可节省大量的存储空间,尤其是在表示与节点和边相关信息较多的地理网络时,更为有效。
但邻接表却难以判断两节点之间的关系,因此本文提出利用。
.NET 框架提供的特殊类Hashtable。
.NET框架包含特殊类,比如通常所说的集合类用于存储对象。
与数组类似,集合类可以把对象放入容器中,然后再取出。
但集合的使用方法与数组不同,拥有用于插入和删除项的专用方法。
使用Hashtable最大的优点就是大大降低数据存储和查找的时间花费,几乎可看成是常数时间。
9 / 9。