几种经典的最短路径算法比较分析

阅读: 评论:0

几种经典的最短路径算法比较分析
0 前言
最短路径是络分析中的一个经典问题,在工程规划、地理信息系统、通信和军事运筹学等领域有着十分广泛的应用.最短路径问题的目的是寻图中两结点之间的最短路径,也就是沿此路径上各边的权值总和(路径长度)达到最小.近年来,最短路径问题在交通网络、通信网络、厂区布局、旅游路线推荐等实际生活中具有广泛的应用,引起了交通、物流、运筹学、管理学、计算机科学等多领域广大学者的关注,涌现出多种经典的最短路径算法以及相应改进算法.这些算法在空間复杂度、时间复杂度、易实现性及应用范围等方面各具特[4-6].文献给出了一种改进的Dijkstra标号算法,有效解决了连通无向带权图和有向带权图的最短路径问题,文献对Dijkstra算法进行了改进,有效解决多邻接点问题与多条最短路径问题,文献提出的基于Floyd算法的改进算法可以有效解决多重等价最短路问题,文献通过对固定序Bellman-Ford算法进行修正,获得了一种求解边数不大于k的最短路问题的新算法,文献给出了改进的SPFA算法,降低了算法的时间复杂度,使得对于任意的有向图,该算法都能够在O(“V||E|)内执行完毕.这些最短路径算法各有其优势,适应于不同网络结
铜官窑古镇一日游攻略1/ 8
构.本文全面地分析了最短路径问题,对Dijkstra算法、Floyd算法、Bellman-Ford算法、SPFA算法几种
经典的最短路径算法给出全面的阐述,并采用Java语言设计了一个实验系统,对这几种经典算法进行验证实验,并比较这几种经典的算法在不同网络中的运行时间和运行结果,此外,还对每种算法的适用性进行了分析.
1 相关定义
1.1 图
在一个由n个节点和m条边组成的图G(V,E)中,V代表G中所有顶点集合,E代表G中所有边集合,对稠密图的定义是有较多条边或弧的图(如e
天文馆门票需要预约吗1.2 最短路径
最短路径问题是求由源点vs到达图中任一顶点的最短路径,即寻一条路径,使得这条路径上的边的权值总和∑Wij为最小值.最短路径问题分为静态和动态等多种形式:静态路径是指在外界环境不变的基础上,计算最短路径;而动态路径是指外界环境不断发生变化,在不能预测的情况下计算最短路径.
1.3 松弛
松弛操作即如果图中两点之间存在其他路径,并且该路径的距离小于这两点之间的当前距离,那么这两点之间的最短路径长
枣庄市人力资源和社会保障局
2/ 8
度更新为这个更小的距离.若图中存在顶点无法再进行松弛操作,则称该顶点已收敛.在图1中,a点到b点的距离原本为5,但由于从a点出发经由c点也能到达b点,并且eac+ecb=1+2=35,即新路径的距离小于原始路径距离,因此将A点到B点之间的距离更新为3,此时图中各点均已收敛.
2 最短路径算法
2.1 Dijkstra算法
Dijkstra算法基于贪心策略.首先,每次到离源点最近的一个顶点,确定源点到该点之间的最短路径,然后,检查是否能通过该顶点进行松弛操作,最后,得到源点到其他各个顶点之间的最短路径.
Dijkstra算法的具体步骤如下:
(1)将图中所有顶点分为P和Q两个集合:P是已知源点到其他顶点的最短路径的顶点集合,Q是未知最短路径的顶点集合,设置源点到自身之间的距离为0,源点与能直接到达的顶点之间的距离为该边权值w,同时把源点不能直接到达的顶点的之间的距离设置为无穷大;
(2)把源点置于P中,表示已求得源点到自身的最短路径;
(3)遍历Q,出距离源点最近的顶点vi,将顶点vi置于P中,表示以求得源点到顶点vi之间的最短路径.并考察源点到
3/ 8
Q中保留的顶点之间是否能通过源点到vi之间的最短路径松弛,如果有未收敛的顶点则进行松弛操作;
(4)重复第(3)步,直至Q为空,算法结束,求得源点到图中所有顶点之间的最短路径.
2.2 Floyd算法
襄阳不收费的景点
Floyd算法是一种动态规划算法.对于G中包含的边eij,从任意节点vi到任意节点vj的最短路径d[i,j]只存在两种可能:(1)直接从vi到vj,此时dij=eij;(2)从vi经过若干个节点到vj.对于每个节点vk,检查dijdik+dkj是否成立,若成立,则令dij=dik+dkj.由此得到状态转移方程:dij=min{dij,dik+dkj}.
Floyd算法的具体步骤如下:
(1)从图G任意一个节点vk开始,遍历图中所有边eij,检查是否满足dik+dkjdij,如果成立,说明从节点i到节点k再到节点j的路径要短于直接从节点i到节点j的路径,故进行松弛操作,更新dij=dik+dkj;
(2)重复步骤(1),直至遍历完图中所有节点,dij中记录的便是节点i到节点j的最短路径距离.
成都两日游最佳攻略2.3 Bellman-Ford算法
Bellman-Ford算法通过递推迭代方式反复对边集E中每条边进行松弛操作,使得源点到其他每个顶点u∈V的最短路径估
4/ 8
计值逐渐逼近其最短距离.Bellman-Ford算法最多有n-1个阶段,在每一个阶段,都需要循环遍历图中的每一条边进行松弛操作.在前k个阶段结束后,求得从源点最多经过k条边到达其他所有顶点的最短路.n-1个阶段结束后,就求得了源点最多经过n-1条边到达其他顶点的最短路径.由于最短路径问题是不包含回路的,所以经过n-1条边得到的最短路径就是源点到其他顶点的最短路径的确定值.
Bellman-Ford算法的具体步骤如下:
(1)初始化所有点到源点之间的最短距离.将源点到自身的距离设置为0,源点到其他点的距离设置为无穷大(表示不可达);最准天气预报软件排名第一
(2)对边集E中的每条边进行循环遍历,进行松弛操作,循环最多需进行n-1次;
(3)检测边集E中的每一条边的两个断点是否收敛.如果存在未收敛的顶点,则说明图中存在负权回路.
2.4 SPFA算法
SPFA算法采用动态逼近法,通过控制顶点的松弛顺序来优化Bellman-Ford算法.在Bellman-Ford算法中,松弛过的顶点顺序会影响之后顶点的松弛顺序,只有那些在上一次松弛中改变了最短路径估计值的顶点,才可能引起与该顶点相邻的顶点最短路径估计值发生改变.因此,用一个先进先出的队列来保存被松弛
5/ 8

本文发布于:2023-05-16 01:31:33,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/1/406201.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:路径   算法   顶点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图