两类经典算法求最短路问题剖析.docVIP

  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文档。上传文档
查看更多
两类经典算法求最短路问题剖析

两类经典算法求最短路问题剖析   摘 要:举例说明Dijkstra算法和Floyd算法求最短路问题,通过规定起点、终点、各点之间权值的大小,找出了最短路径,求出最短路长,并增加负权值、方向和闭合回路来分别研究两种算法在运算中的利弊以及适用性。 中国论文网 /3/view-7161941.htm   关键词:Dijkstra算法;Floyd算法;最短路   1.引言   众所周知,最短路算法有两种基本算法,一是指定的顶点之间的最短路径算法,二是所有顶点之间的最短路算法,其中所有顶点间最短路算法更具有代表性。目前,求最短路问题的方法很多,各有优劣性,而实际应用中以两类经典算法居多,分别是1959年E.W.Dijkstra提出的Dijkstra算法和1962年Floyd提出的Floyd算法。   1.1 Dijkstra算法   Dijkstra算法的基本思想是:若起点vs到终点vt的最短路经过点v1,v2,v3,则v1到vt的最短路是p1t={v1,v2,v3,vt},v2到vt的最短路是p2t={v2,v3,vt},v3到vt的最短路是p3t={v3,vt},Dijkstra算法是在图上进行一种标号迭代的过程。不妨设弧(i,j)的长度为cij≥0,vi到vj的最短路记为pij,最短路长记为Lij。Dijkstra算法的基本步骤如下[1-2]:   (1)找出所有起点vi已标号,终点vj未标号的弧,集合为B={(i,j)??vi已标号;vj未标号},如果这样的弧不存在或已标号则计算结束。   (2)计算集合B中弧的标号:k(i,j)=b(i)+cij。   (3)b(l)=minj{k(i,j)|(i,j)∈B},在弧的终点vl标号b(l),返回步骤(1)。   完成步骤(1)~(3)为一轮计算,每一轮计算至少得到一个点的标号,最多通过n轮计算得到最短路。   1.2 Floyd算法   Floyd算法是一种矩阵迭代方法,也是一种表格迭代方法,对于求任意点间最短路、混合图的最短路、有负权图的最短路等一般网络问题来说是比较有效的,Floyd算法的基本步骤如下[1-2]:   (1)写出vi一步到达vj的距离矩阵L1=(L(1)ij),L1也是一步到达的最短距离矩阵。如果vi 与vj之间没有关联,则令cij=+∞。   (2)计算两步最短矩阵。设vi到vj经过一个中心点vr,要两步到达vj,则vi到vj的最短距离为L(2)ij=minr{cir+crj},最短距离矩阵为L2=(L(2)ij)。   (3)计算k步最短距离矩阵。设vi经过中间点vr到达vj,vi经过k-1步到达点vr的最短距离为L(k-1)ir,vr经过k-1步到达点vj的最短距离为L(k-1)rj,则vi经k步到达vj的最短距离为L(k)ij=minr{L(k-1)ir+L(k-1)rj},最短距离矩阵为Lk=(L(k)ij)。   (4)比较矩阵Lk与Lk-1,当LK=Lk-1时得到任意两点间的最短距离矩阵Lk。   2.具体应用   本节中通过具体例子,如图1,图2所示,利用Dijkstra算法和Floyd算法分别求出顶点v1到顶点v8的最短路以及最短路长。   即得出v1到v8的最短距离为18,其所对应的最小生成树和最短路线图分别如图2-8和2-9所示:   3.算法分析   综上,通过具体例子介绍和分析了Dijkstra算法和Floyd算法这两种非常经典的最短路算法。可得Dijkstra算法是主要用于解决无负权值的有向图和无向图的最短路算法,Floyd算法是通过矩阵运算来求解网络中的最短路问题的方法。这两种算法都可计算一个结点到其它结点的最短路径。Dijkstra算法是运用表上做图的方式一个一个点的添加,根据最小的权值的选择依次对各点进行标号,直到将所有的点都标上号,从而找出最短路径。而Floyd算法是首先将所有的点都标出,将各点间的权值反应在矩阵上,再用矩阵计算出最优矩阵。Dijkstra算法的优点是算法比较简单明了,不易出错,但是也有缺点,主要是步骤却非常繁琐。Floyd算法的算法虽然说有点复杂,但是效率比较高,在计算时能够节约时间。综上所述,两种算法的差别很大,但是效果却是相同的。我们在实际的运用中可以按各自的需求选择合适的方法。(作者单位:河池学院数学与统计学院)   基金项目:广西高校科学研究项目(201010LX481),广西高等教育教学改革工程项目(2015JGA552)   参考文献:   [1] 严蔚敏.吴伟民.数据结构(C语言)[M].北京:清华大学大学出版社,2007.   [2] 王桂平.王衍.任嘉辰.图论算法理论、实现及应用[M].北京:北京大学出版,2011.   [3] 王朝瑞.图

文档评论(0)

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

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

1亿VIP精品文档

相关文档