图论是离散数学-网络与通信工程研究所-浙江工商大学.PPT

图论是离散数学-网络与通信工程研究所-浙江工商大学.PPT

图论是离散数学-网络与通信工程研究所-浙江工商大学

9. 图的应用 ——最短路径(1) 7.9 图的应用——最短路径(1) 7.9.1 背景 最短路径的典型应用是旅游路线的选择问题。 迪科斯彻 (E.W.Dijkstra,1930-2002),荷兰人, 著名计算机科学家。1972年获得图灵奖。Dijkstra的贡献有:提出“goto有害论”,提出信号量和PV原语,解决了有趣的“哲学家聚餐”问题,创造最短路径算法和银行家算法等 7.9.2 分类和评价 最短路径问题分为两种 求从某一点出发到其余各点的最短路径——用迪科斯彻(Dijkstra)算法 求图中每一对顶点之间的最短路径——用佛罗依德(Floyd)算法(又称为Floyd-Warshall算法) 虽然可以通过以图中每个顶点为源点重复调用n次Dijkstra算法来求出每一对顶点之间的最短路径,但是用Floyd算法可以更高效。这两种做法的时间复杂度都是O(n3)。 7.9 图的应用——最短路径(1) 7.9.2 分类和评价 Dijkstra算法局限于边的权值非负的情况。负权边情况可以用Bellman-Ford等算法。 Floyd算法可以在任何图中使用,包括带负权边的图。 什么时候边权重为负值? 比如:A上班离家里很远,他要选择一条从家里到公司的最佳路径,使得费用最小。而公司的话,对于做公交车的那段路有补贴,且补贴的钱大于坐公交车的费用,此时,在计算最小费用的时候,这条边的权值就应该定义为负值 7.9 图的应用——最短路径(1) 7.9.3 Dijkstra算法思路 对于图G=(V,E),将图中的顶点分成两组: 第一组S:已求出的最短路径的顶点集合。 第二组V-S:尚未求出的最短路径的顶点集合。 算法将按最短路径长度的递增顺序逐个将第二组的顶点加入到第一组中,直到所有顶点都被加入到第一组顶点集S为止。 7.9 图的应用——最短路径(1) 7.9.3 Dijkstra算法思路 Dijkstra算法的动画 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 问题:求解下图中从v1到其他顶点的最短距离。 7.9 图的应用——最短路径(1) 第一步,开始S={v1}。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ? ? ? ? dist[i] 0 50 10 ∞ 45 ∞ path[i]中存放顶点i的当前最短路径(为区分中间结果和最后结果,这里只显示最后结果)。 dist[i]中存放顶点i的当前最短路径长度。 第二步,v3的dist[i]最小,因此把v3加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ?v1v3 ? ? ? dist[i] 0 50 10 25 45 ∞ 第三步,v4的dist[i]最小,因此把v4加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ?v1v3 ?v1v3v4 ? ? dist[i] 0 45 10 25 45 ∞ 第四步,v2和v5的dist[i]最小,因此把v2和v5加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ?v1v3v4v2 ?v1v3 ?v1v3v4 ?v1v5 ? dist[i] 0 45 10 25 45 ∞ 第五步,v6没改进,还是∞。算法结束。 10. 图的应用 ——最短路径(2) 7.10.1 Floyd算法思路 算法分成n个步骤(n是顶点数量)。 在第k(k=1,...,n)步,判断所有的i和j(i=1,...,n,j=1,...,n)两个顶点之间距离能否通过第k个顶点而缩短。即若有i和j之间的当前距离dist(ij) dist(ik)+ dist(kj),则更新dist(ij)。 当查完所有的k时,dist(ij)里面存放的就是i到j之间的最短距离了。 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 问题:求解下图中每一对顶点之间的最短距离。 7.10 图的应用——最短路径(2) 初始状态 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第一步 对不在三条线上的元素进行判断。举例说明,因为dist(3,2)=∞dist(3,1)+dist(1,2)=20+50=70 所以dist(3,2)更新为70 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第二步 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第三步 7.1

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档