几种最短路径算法的比较

来源 :祖国·教育版 | 被引量 : 0次 | 上传用户:Rachellanye
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】最短路径算法种类繁多,比较有名的算法包括:Dijkstra 算法、Warshall –Floyd算法、动态规划算法、A*算法以及改进的Dijkstra 算法,而即使同一种算法也有多种不同的实现方式。本文主要这几种经典的算法进行分析比较。
  【关键词】最短路径;算法;邻接矩阵
  1. 引言
  所谓最短路径问题就是指在带权值的地图中, 寻找从指定起点到终点的一条具有最小权值总和的路径问题。如果把权值看成是道路的长度属性, 那么目标路径就是从起点到终点的最短路径。所谓最短路径就是网络中两点之间距离最短的路径,这里讲的距离可以是实际的距离,最短路径不仅仅指一般地理意义上的距离最短,也可以引申为其它的度量,如时间、运费、流量等。
  2. Dijkstra算法
  设源点为 ,目标点为 。Dijkstra算法的基本思想是:按距离 由近到远为顺序,依次求得 到G的各顶点的最短路和距离,直至 ,算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。
  算法步驟如下:
  步骤1:令 =0,对于 ,令 , , 。
  步骤2:对每个 ,用 代替 ,
  当 不相邻时, 。计算 ,把达到这个最小值的一个顶点记为 ,令 。
  步骤3:若 ,则停止;若 ,则 代替 ,转步骤2。
  3. Warshall -Floyd算法
  每次以一个顶点为源点,重复执行Dijkstra算法N次。但这里要提的Warshall -Floyd算法形式上相对简单一些。
  Warshall -Floyd算法的基本思想:
  对于任何一个顶点 ,顶点 到顶点 的最短路径经过顶点 或者不经过顶点 。比较 与 的值。若 ,则令 ,保持 是当前搜索的顶点 到顶点 的最短路径。重复这一过程,最后当搜索完所有顶点 时, 就是顶点 到顶点 的最短距离。
  Warshall -Floyd算法的基本步骤:
  令 是顶点 到顶点 的最短距离, 是顶点 到顶点 的权。Warshall -Floyd算法的步骤:
  步骤1 输入图G的权矩阵W。对所有 ,有 = , 。
  步骤2 更新 。对所有 ,若 ,则令 。
  步骤3 若 ,则存在一条含有顶点 的负回路,停止;或者
  停止,否则转步骤2。
  4. 动态规划算法
  动态规划算法的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。动态规划算法使用于解最优化问题。通常可以按以下步骤设计动态规划算法:
  (1)找出最优解的性质,并刻画其结构特征;
  (2)递归地定义最优解;
  (3)以自底向上的方式计算出最优解;
  (4)根据计算最优值时得到的信息,构造最优解。
  5.A* 算法
  A*算法是在宽度优先搜索算法的基础上, 每次都是利用一个自己确定的估价函数对所有没展开的结点进行估价,从而找出最应该被展开的结点(也就是说要找的答案最有可能是从该结点展开,把该结点展开,直到找到目标结点为止)。
  A* 算法是人工智能领域的一种图搜索策略, 采用了启发式函数对搜索过程中产生的分支进行评估, 以选择最佳的分支进行搜索。其更一般的引入了一个估价函数f(n),其定义为f(n)=g(n)+h(n)。 其中g(n)为到达当前节点的耗费, 而h(n)表示对从当前节点到达目标节点的耗费的估计, 其必须满足两个条件:
  (1) h(n)必须小于等于实际的从当前节点到达目标节点的最小耗费h*。
  (2) f(n)必须保持单调递增。
  A* 算法生成的总节点数为N ,解的深度为d ,尝试为d 的一致搜索树为了包括N + 1 个节点所必须的分支因子为b* 。因此, ,可以看出空间复杂度高。如果 是可采纳的,即启发函数设计得好, 可以大大降低扩展的节点,从而在较小的时间内即可完成最佳路径搜索。其时间复杂度为 。
  6.改进的Dijkstra 算法
  传统的利用Dijkstra 算法来实现图中任意结点之间的最短路径查找,其基本思想就是依次以图中各个结点为起点利用Dijkstra 算法计算出最短路径,这样循环n 次即可得到图中任意结点之间的最短路径,而每一步都是一个简单的重复过程。这样虽然能够实现任意两点之间的最短路径查找,但是从效率上分析并不是最优的。实际是可以进行改进,具体方法如下:
  (1) 根据Dijkstra 算法思想,可以由图中结点的出入度信息来提高各点之间最短路径的查找速度。
  (2) 在带权图中利用Dijkstra 算法找出部分结点之间的最短路径后,若其他还没有找出最短路径的结点可以利用前面已找出的最短路径信息为自己提供快速的最短路径查找。
  7.最短路径算法的分析比较
  求解同一计算问题可能有许多不同的算法,究竟如何来评价这些算法的好坏,主要考虑两点:
  (1)执行算法所耗费的时间;
  (2)执行算法所耗费的存储空间。
  7.1 Dijkstra 算法的成功率是最高的,因为它每次必能搜索到最优路径。但另一方面, Dijkstra 算法的搜索速度是最慢的。Dijkstra 算法求一个点到其他所有点的最短路径时间复杂度为 ,求一个点到其他所有点最短路径等效于求一个点到另一个点的最短路径n 个点之间互相的最短路径空间复杂度为 。
  7.2 Warshall -Floyd算法基于图论的矩阵理论,是非常有特点的一个传统算法。该算法可以方便的计算每对顶点之间的最短路径和长度。时间复杂度为 。   优点:容易理解,可以算出任意两个节点之间的最短距离,代码编写简单;
  缺点:时间复杂度比较高,不适合计算大量数据。
  7.3 动态规划算法主要是求解最优决策序列, 当最优决策序列中包含最优决策子序列时, 可建立动态规划递归方程, 它可以帮助高效地解决问题。用动态规划方法不仅能得到全局最优结果,还能得到一族最优结果。有了这一族最优结果,便于分析、比较不同的结果,且如果由于某种原因偏离了原始最优轨迹,也可以很方便地找出余下阶段的新的最优子策略。
  7.4A* 算法 空间复杂性:A* 算法生成的总节点数为N,解的深度为d,那么b* 就是尝试为d 的一致搜索树为了包括N+1 个节点所必需的分支因子。因此,N+1=1+b*+(b*)2+…+(b*)d,從中可看出空间复杂度高。
  时间复杂性:充分利用问题内在信息,启发函数设计的好,可以极大降低扩展的结点,从而在较小的时间内即可完成最佳路径搜索。如果 是可采纳的,那A* 算法是完备的也是最优的。
  7.5 改进的Dijkstra算法
  在改进算法中, 初始时, 待排序的节点以无序形式连续序存放在一个一维数组中, 对其进行堆排序, 调整成小顶堆后, 各节点即是以完全二叉树的顺序存储结构形式存储, 0 号单元存放的即是调整后的堆顶元素, 后面依次以左子树、右子树。在调整堆的过程中时间复杂度为 , ( N 为待排序节点个数) 。与从无序结构下的数组或链表中选择下一个最短路径节点相比较, 明显地节约了时间, 提高算法执行效率。Dijkstra 优化算法在搜索的路径节点总数及算法运行时间方面均明显减少也就是说, 使用优化的算法从源点经过较少的节点就可到达终点,且能够更加快速的趋于目标节点。
  参考文献:
  [1] 严蔚敏.数据结构(C语言版)[M].北京:清华大学出版社,1997
  [2] 王海英,黄强,李传涛.图论算法及其MATLAB实现[M].北京:北京航空航天大学出版社,2010
  [3] 周先曙.最短路径问题及其解法研究[J].电脑知识与技术,2010,(06)
  [4] 方美红,刘少华. 基于vc++最短路径算法设计与实现[J] .城市勘测,2008,(01)
其他文献
教学有没有效益,主要看学生有没有学到什么,或学生学得好不好,有没有得到应有的发展。那么,小數课堂教学中如何使学习更有效,笔者从以下几方面进行了尝试:  一、创设有效情境,促进主动学习  现代教学论观点认为:数学教师的主要任务就是为学生设计学习情境,为学生提供全面清晰的有关信息,引导学生在教师所创设的教学情境中,自己开动脑筋进行学习,掌握数学知识。因此,在课堂教学中,教师要根据学生的心理特点和学习的
期刊
【摘 要】根据学习内容,结合学生的知识水平,创设有利于学生进行探究学习的问题情境,把教材中阐述的内容创造性地组织成生动有趣的、有利于学生探究发现的研究材料,让学生从中自主地掌握有关的知识与技能,体验科学探究的乐趣,学习科学探究的方法,对于培养学生学会学习是至关重要的。  【关键词】探究性教学;问题情境;教学模式  探究性数学模式其实就是我们在教与学的过程中从某个数学问题出发,通过对所探讨问题的自我
期刊
【摘 要】众所周知,词汇学习,阅读理解,作文是学生英语学习的薄弱点,也是学生最头疼的地方。尤其是在英语基础相对薄弱的内蒙古地区。那么有无捷径?有。“死背硬记”是活学活用的基础,加之一些小方法小捷径可以让英语学习变得轻松简单,这也适合边远地区的英语教学。总之,多背诵,多朗读,多练习,多张嘴,一切贵在坚持!  【关键词】“死记硬背”;单词;阅读;击破方法  一、突破词汇  众所周知,如果没有单词,那么
期刊
兴趣是学习的原动力。我国著名的教育家孔子曾说:“知之者不如好之者,学之者不如乐之者。”这句富有哲理的名言说明了学习兴趣的重要性。因为兴趣是点燃智慧的火花,是认识和探索事物的基础,是推动人去认识事物探求真理的一种重要动力。美国著名心理学家布鲁纳也说:“学习的刺激力量乃是所学教材的兴趣。”数学是一门思考性很强的学科,在数学教学中,教师必须想方设法利用数学知识的魅力激发学生学习知识的兴趣,诱发学生求知欲
期刊
【摘 要】在当下中国的教育事业中,优化教学策略、改进教学的方式方法依旧是高中教师面对的重要任务,因为只有这样才能够达到全面提高高中数学教学质量的目标,才能够培养适应现今社会需要的全方位人才。在高中数学的教学中,老师不仅要调动学生的主体作用,还要注重培养学生的思维能力、激发学生的创新能力,从而为学生提高学习效率提供机会。  【关键词】高中数学;教学策略;教学质量  数学作为基础教育阶段的重要学科,和
期刊
【摘 要】本文从营造“有趣”教学气氛,搜集充分的“兴趣”素材,建构“有趣”的教学方式等多方面论述了在思想品德教学中激发学生思考,探索学趣的有效途径,具有较强的实践性、可操作性。  【关键词】激发;思考;探索;兴趣;教学氛围;素材;教学方式  思想品德课,是培养学生良好的思想品德,形成正确的人生观、价值观、道德观的主要渠道。然而,由于其思想性、理论性、时代性强,在教学实践中,长期以来,教师在上思想品
期刊
【摘 要】社会在不断的发展,我国选拔人才的侧重点也在不断的变化,高中英语语法的教学也应该做到与时俱进。和传统的英语教学方法相比,英语语法课堂教学已经有了很大的变化,语法教学已经由刚开始的翻译教学法、归纳法与演绎法转向交际教学法、任务教学法、探究式教学法等等。但是因为英语教学的高考压力,高中学生的英语成绩仍然难以提高。本文从新形势下高中英语语法教学策略以及教学方式方面进行探讨。  【关键词】高中英语
期刊
【摘 要】按照中小学英语教学大纲的要求,“听、说、读、写”是中学英语教学的目的所在,而其中“写”是学生学习中的一个难点,非一日之功可就。然而,初中英语教学的书面表达就相对滞后,学生写作水平的提高也显得更加困难,于是就形成了“听到写作学生心烦,见到习作教师不愿”的一个普遍现象,自从我从事英语教学以来,在教学中认真反思,以及与同事积极探讨之后,发现原因是多方面的。首先是学生方面:(1)汉语影响、生词造
期刊
【摘 要】学校是培养人才的重要场所,对小学生进行科技启蒙教育是责无旁贷的。如何进行这项教育呢?我认为要从教科书中挖掘科技教育的素材、从信息课中启发学生掌握计算机技术、在活动课中培养小学生的实践能力。  【关键词】浅谈;小学生;进行;科技启蒙教育  正文:学校是培养人才的重要场所,学校对小学生进行科技启蒙教育是责无旁贷的。如何进行这项教育呢?本人浅谈一下自己的点滴体会。  一、要从教科书中挖掘科技教
期刊
【摘 要】随着素质教育的不断推进,考试制度改革的逐步深化,新课改教学创新的日益紧迫,改革课堂教学无疑是摆在我们面前的一个现实而重大的研究课题。但在推行有效教学改革的过程中,出现了诸多问题,如曲解课程改革的本旨、乱用小组合作讨论、信息技术充斥课堂等。针对这些问题,我在教学实践中总结出以下几点对策:1.把学生当做课堂学习的主体。2.让合作交流有效起来。3.教会学生进行自主探究。  【关键词】有效教学;
期刊