网站大量收购独家精品文档,联系QQ:2885784924

贪心算法与(图算法) .ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心算法与(图算法)

单源最短路径 单源最短路径 最短路径类型 单源最短路径问题(Dijkstra算法、Bellman-Ford算法、SPFA算法) 单终点最短路径问题 单对顶点最短路径问题 每对顶点间最短路径问题(Floyd-Warshall算法) 单源最短路径 最短路径定义 在非网图中,最短路径是指两顶点之间经历的边数最少的路径 在网图中,最短路径是指两顶点之间经历的边上权值之和最小的路径 B A E D C AE:1 ADE:2 ADCE:3 ABCE:3 B A E D C 10 50 30 10 100 20 60 AE:100 ADE:90 ADCE:60 ABCE:70 单源最短路径 单源最短路径 问题描述:给定带权有向图G=(V, E)和源点v∈V,求从v到G中其余各顶点的最短路径。 迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径的算法——Dijkstra算法。 1 2 3 5 4 100 60 10 30 10 20 50 获取方法: 1)直接从源点到该点(只含一条边) 2)从源点经过已求得最短路径的顶点,再到达该顶点。 单源最短路径 Dijkstra算法 基本思想:每次新扩展一个距离最短的点,更新与其相邻的点的距离。当所有边权都为正时,由于不会存在一个距离更短的没扩展过的点,所以这个点的距离永远不会再被改变,因而保证了算法的正确性。 最优性原理:如果u到v的最短路径经过w,则这条路径: u到w是最短路径,且w到v是最短路径。 集 合 V-S 集 合 S vk v vi u w v 单源最短路径 Dijkstra算法 有向图和无向图都可以使用本算法,无向图中的每条边可以看成相反的两条边 用来求最短路径的图中不能存在负权边 引入了松弛(Relaxation)操作:先让源点s到顶点i的距离d[i]取一个很大的值,然后不断减小d[i],当所有的d[i]不能再减小时,就求出了s到所有点的最短路径。松弛操作的目的是减小d[i]的值,如果从s到达i有更优的路径则更新d[i] Relaxation: if d[k] + g[k][i] d[i] then d[i] = d[k] + g[k][i] 单源最短路径 Dijkstra算法 s为源,w[u,v]为点u和v之间的边的长度,结果保存在dist[]中 (1) 初始化:源的距离dist[s]设为0,其他的点距离设为无穷大,同时把所有的点的状态都设置为没有扩展过。 (2) 循环n-1次: (2.1) 在没有扩展过的点中取一距离最小的点u,并将其状态设为已扩展。 (2.2) 对于每个与u相邻的点v,执行relax(u,v),也就是说,如果dist[u]+w[u,v]dist[v],那么把dist[v]更新成更短的距离dist[u]+w[u,v]。此时到点v的最短路径上,前一个节点即为u。 (3) 结束:此时对于任意的u,dist[u]就是s到u的距离。 单源最短路径 Dijkstra算法 单源最短路径 Dijkstra算法 算法演示 A B A E D C 10 50 30 10 100 20 60 S={A} A→B:(A, B)10 A→C:(A, C)∞ A→D: (A, D)30 A→E: (A, E)100 单源最短路径 Dijkstra算法 算法演示 A B A E D C 10 50 30 10 100 20 60 S={A, B} A→B:(A, B)10 A→C:(A, B, C)60 A→D: (A, D)30 A→E: (A, E)100 B 单源最短路径 Dijkstra算法 算法演示 A B A E D C 10 50 30 10 100 20 60 S={A, B, D} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, E)90 B D 单源最短路径 Dijkstra算法 算法演示 A B A E D C 10 50 30 10 100 20 60 S={A, B, D, C} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, C, E)60 B D C 单源最短路径 Dijkstra算法 算法演示 S={A, B, D, C, E} A→B:(A, B)10 A→C:(A, D, C)50 A→D: (A, D)30 A→E: (A, D, C, E)60 A B A E D C 10 50 30 10 100 20 60 B D C E 单源最短路径 Dijkstra算法 核心代

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档