Prim(普里姆)算法与Dijkstra(迪杰斯特拉)算法分析比较.docVIP

Prim(普里姆)算法与Dijkstra(迪杰斯特拉)算法分析比较.doc

  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文档。上传文档
查看更多
Prim(普里姆)算法与Dijkstra(迪杰斯特拉)算法分析比较.doc

Prim(普里姆)算法与Dijkstra(迪杰斯特拉)算法分析比较 摘 要:数据结构中,普里姆算法与迪杰斯特拉算法分析考虑的均是带权图的造价最小问题,而这两种方法在生活的诸多领域应用相当广泛,但是学生往往把这两种算法混为一谈,似乎认为这两种算法求得的结果是一样的,而不明白为什么一个称为最小生成树,另一个则是最短路径。本文从算法的思想入手,通过示意图进行对比分析,突出不同点,使学生在今后的学习中加深对知识点的理解与认识。 关键词:普里姆;迪杰斯特拉;示意图 中图分类号:TP301.6 1 Prim算法与Dijstra算法思想分析比较 Prim算法是在由n 个顶点组成的无向连通图中,取图中任意一个顶点V作为生成树的根,之后往生成树上添加新的顶点W。在添加的顶点W和已经在生成树上的顶点V之间必定存在一条边,并且该边的权值在所有连通顶点V和W之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有n个顶点为止。一般情况下所添加的顶点应满足下列条件:在生成树的构造过程中,图中n个顶点分属两个集合:已落在生成树上的顶点集U和尚未落在生成树上的顶点集V-U,则应在所有连通U中顶点和V-U中顶点的边中选取权值最小的边。直到U中包含n个顶点,而V-U中为空集。 迪杰斯特拉(Dijkstra)算法是在由n个顶点组成的有向图中,从指定一个顶点出发,提出按路径长度的递增次序,逐步产生最短路径的算法,是单源点多目标点最短路径。最短路径的求解过程中,图中的顶点也是分属两个集合:指定出发点的顶点为一个集合V,其余顶点为一个集合W。从W中选择一个离V中顶点最近的一个顶点加入到V中,求出了长度最短的一条最短路径,并把刚选择加入最短路径的顶点作为中间点,对其它顶点到源点的路径长度进行修改,求出长度次短的一条最短路径,依次类推,直到从顶点v到其它各顶点的最短路径全部求出为止。 2 Prim算法与Dijstra算法处理步骤比较 Prim算法构造最小生成树的步骤是每次都从生成树外顶点与生成树内顶点相连的边中选择代价最小的加入到生成树,也就是每次按权值局部最小的方法,直到加入所有顶点和n-1条边为止。对应的步骤如下: G (V,E)是连通网,TE是G上最小生成树中边的集合。 初态:U u0|u0∈V ,TE 开始,重复执行下述操作: (1)在所有u∈U,v∈V-U的边(u,v)∈E中找一条带权最小的边(u0,v0)并入集合TE,v0并入U。 (2)重复(1)直至U V为止。此时TE中必有n-1条边,则T (V,TE)为N的最小生成树。 迪杰斯特拉提出了一个按路径长度递增的次序产生最短路径的算法。 首先,引进一个辅助向量D,它的每个分量D[i]表示当前找到的从始点v到每个终点vi的最短路径的长度。它的初态为:若从v到vi有弧,则D[i]为弧上的权值;否则置D[i]为∞,显然,长度为 D[j] Min D[i]|vi∈V 的路径就是从v出发的长度最短的一条最短路径。此路径为(v,vj)。那么,下一条长度次短的最短路径的终点是vk,则可想而知,这条路径或者是(v,vk),或者是(v,vj,vk)。它的长度或者是从v到vk的弧上的权值,或者是D[j]和从vj到vk的弧上的权值之和。具体步骤如下: (1)S和T V-S,S中存放已找到最短路径的顶点,T存放当前还未找到最短路径的顶点。初态,S中只包含源点v0 (2)不断从T中选取到顶点v0路径长度最短的顶点u加入到S中,S每加入一个新的顶点u,都要修改顶点v0到T中剩余顶点的最短路径的长度,T中各顶点新的最短路径长度值为原来的最短路径长度值与顶点u的最短路径长度值加上u到该顶点的路径长度值中的较小值。 (3)重复(2),直到T的顶点全部加入到S中为止。 3 示意图比较 由上图图1所示,用普里姆算法构造最小生成树,其过程如下表3.1.1~3.1.6: 4 Prim(普里姆)算法和Dijkstra(迪杰斯特拉)的区别 通过以上的分析我把这两种算法的主要区别规纳总结如下: (1)分析对象不同,前者为无向图,后者为有向图。 (2)连通的顶点不同,前者连通所有顶点,且总的代价最低,后者为单源点多目标点最短路径,所求得的是两顶点之间代价最小。 (3)普里姆算法生成最小生成树需重复n-1次,迪杰斯特拉算法则需重复n-2次。 5 总结 知识并不是孤立的,即存在着联系又有区别,只有把相近的内容加以对比分析,找出不同点,才能真正的理解和掌握所学的内容,从而提高我们的学习效率。 参考文献: [1]杨剑.数据结构[M].北京:清华大学出版社,2011. [2]严蔚敏.数据结构(C语言版)[M].北京:清华大学出版社,2006.

文档评论(0)

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

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

1亿VIP精品文档

相关文档