最小生成树分析.pptVIP

  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文档。上传文档
查看更多
* 按最短路径长度的递增次序依次把U组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。 此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。 * (1)初始时,S只包含源点即S={v},v的距离为0。U包含除v外的其他顶点,U中顶点u距离为边上的权(若v与u有边v,u)或∞(若u不是v的出边邻接点)。 (2)从U中选取一个距离v最小的顶点k,把k加入S中(该选定的距离就是v到k的最短路径长度)。 (3)以k为新考虑的中间点,修改U中各顶点的距离:若从源点v到顶点u(u∈U)的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边k,u上的权。 (4)重复步骤(2)和(3)直到所有顶点都包含在S中。 狄克斯特拉算法的过程 * 顶点v到j的最小距离=MIN(cvk+wkj,cvj) k v j ... cvk …… cvj 边wkj * {0} {0,1} {0,1,2} {0,1,2,3} {0,1,2,3,5} {0,1,2,3,5,4} {0,1,2,3,5,4,6} 0 1 3 2 4 5 6 4 7 6 1 6 8 5 6 6 2 4 1 {0, 0, 0, 0, -1, -1, -1} {0, 0, 1, 0, 1, -1, -1} {0, 0, 1, 0, 1, 2, -1} {0, 0, 1, 0, 1, 2, -1} {0, 0, 1, 0, 5, 2, 5} {0, 0, 1, 0, 5, 2, 4} {0, 0, 1, 0, 5, 2, 4} S U dist[ ] path[ ] {1,2,3,4,5,6} {2,3,4,5,6} {3,4,5,6} {4,5,6} {4,6} {6} {} {0, 4, 6, 6, ∞, ∞,∞} {0, 4, 5, 6, 11, ∞,∞} {0, 4, 5, 6, 11, 9, ∞} {0, 4, 5, 6, 11, 9, ∞} {0, 4, 5, 6, 10, 9, 17} {0, 4, 5, 6, 10, 9, 16} {0, 4, 5, 6, 10, 9, 16} 0 1 2 3 4 5 6 0 1 2 3 4 5 6 *   从顶点v到其他顶点的最短路径有n-1条,这里采用一维数组path来保存:   假设从顶点v到顶点u的最短路径序列为:   v,……,w,u 则v,……,w一定是从顶点v到顶点w的最短路径(为什么?) 所以用path[u]=w来表示,即path[u]表示从顶点v到顶点u的最短路径(实际上保存最短路径序列的前一个顶点w,再由w向前推到v,从而找出最短路径)。 * 8.5.3 每对顶点之间的最短路径 问题:对于一个各边权值均大于零的有向图,对每一对顶点i≠j,求出顶点i与顶点j之间的最短路径和最短路径长度。 可以通过以每个顶点作为源点循环求出每对顶点之间的最短路径。除此之外,弗洛伊德(Floyd)算法也可用于求两顶点之间最短路径。 * 假设有向图G=(V,E)采用邻接矩阵存储,另外设置一个二维数组A用于存放当前顶点之间的最短路径长度,分量A[i][j]表示当前顶点i到顶点j的最短路径长度。 弗洛伊德算法的基本思想是递推产生一个矩阵序列A0,A1,…,Ak,…,An-1,其中Ak[i][j]表示从顶点i到顶点j的路径上所经过的顶点编号不大于k的最短路径长度。 * 初始时,有A-1[i][j]=g.edges[i][j]。当求从顶点i到顶点j的路径上所经过的顶点编号不大于k+1的最短路径长度时,要分两种情况考虑: 一种情况是该路径不经过顶点编号为k+1的顶点,此时该路径长度与从顶点i到顶点j的路径上所经过的顶点编号不大于k的最短路径长度相同; 另一种情况是从顶点i到顶点j的最短路径上经过编号为k+1的顶点。 * Ak+1[i,j]=MIN{ Ak[i,j],Ak[i,k+1]+Ak[k+1,j] } k+1 i j … Ak[i,k+1] … Ak[k+1,j] …… Ak[i,j] * 那么,该路径可分为两段: (1)从顶点

文档评论(0)

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

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

1亿VIP精品文档

相关文档