图论4最短路问题ppt课件

上传人:痛*** 文档编号:181911770 上传时间:2023-01-18 格式:PPT 页数:36 大小:2.76MB
收藏 版权申诉 举报 下载
图论4最短路问题ppt课件_第1页
第1页 / 共36页
图论4最短路问题ppt课件_第2页
第2页 / 共36页
图论4最短路问题ppt课件_第3页
第3页 / 共36页
资源描述:

《图论4最短路问题ppt课件》由会员分享,可在线阅读,更多相关《图论4最短路问题ppt课件(36页珍藏版)》请在装配图网上搜索。

1、1返回 结束第七章 图论引言引言7.1 图的基本概念图的基本概念7.2 路与连通路与连通7.3 图的矩阵表示图的矩阵表示7.4 最短路径问题最短路径问题7.5 图的匹配图的匹配8.1 Euler图和图和Hamilton图图8.2 树树8.3 生成树生成树 8.4 平面图平面图2返回 结束7.4 最短路问题v一、问题的提出一、问题的提出v )(G赋权图网络):赋权图网络):G=(V,E)中,给每条边中,给每条边 a=赋予一个非负实数权赋予一个非负实数权 wij,得到一个有向网络,得到一个有向网络3返回 结束7.4 最短路问题v途径v路径长度 v非带权图的路径长度是指此路径上边的条数。v带权图的路

2、径长度是指路径上各边的权之和距离矩阵距离矩阵 对上述网络,定义对上述网络,定义 D=(dij)nn,n=|V|wij 当当 E dij=其它其它带权路径长度带权路径长度 对上述网络,途径对上述网络,途径 v1,v2,vk 的带权路径长度定义为的带权路径长度定义为1,11ki iidw4返回 结束7.4 最短路问题最短路问题在实际工作中应用最短路问题在实际工作中应用1、通讯网络中最可靠问题、通讯网络中最可靠问题2、最大容量问题、最大容量问题3、统筹方法中求关键路线、统筹方法中求关键路线4、背包问题、背包问题5、选址问题、选址问题6、工件加工顺序问题、工件加工顺序问题7、中国邮递员问题、中国邮递员

3、问题背包问题背包问题(Knapsack problem)是一种组合优化的是一种组合优化的NP完全问题。完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。中。5返回 结束7.4 最短路问题v例一位旅客要从一位旅客要从A城到城到B城城他希望选择一条途中中转次数最少的路线;他希望选择一条途中中转次数最少的

4、路线;他希望选择一条途中所花时间最短的路线;他希望选择一条途中所花时间最短的路线;他希望选择一条途中费用最小的路线;他希望选择一条途中费用最小的路线;v5v4v3v2v1v0 100 6030101020 5 50这些问题均是带权图上的最短路径问题。这些问题均是带权图上的最短路径问题。边上的权表示一站边上的权表示一站边上的权代表距离边上的权代表距离边的权代表费用边的权代表费用 6返回 结束7.4 最短路问题vDijkstra算法vFloyd算法vFloyd-Warshall算法7返回 结束7.4 最短路问题vDijkstra算法算法 Dijkstra算法是由荷兰计算机科学家狄克斯特拉算法是由荷

5、兰计算机科学家狄克斯特拉Dijkstra于于1959 年提出的,因此又叫狄克斯特拉算法。年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。图中最短路径问题。荷兰计算机科学教授荷兰计算机科学教授Edsger W.Dijkstra(1930-)在在1972年年获得美国计算机协会授予的图灵奖,这是计算机科学中最具获得美国计算机协会授予的图灵奖,这是计算机科学中最具声望的奖项之一。声望的奖项之一。Dijkstra算法是求出一个连通加权简单图中从结点算法是求出一个连通加权简单图中从结点a到结到结点点

6、z的最短路。边的最短路。边(i,j)的权的权(i,j)0,且结点,且结点x的标号为的标号为L(x)。结束时,结束时,L(z)是从是从a到到z的最短长度。的最短长度。举例来说,如果图中的顶点表示城市,而边上的权重表举例来说,如果图中的顶点表示城市,而边上的权重表示城市间开车行经的距离。示城市间开车行经的距离。Dijkstra算法可以用来找到两个算法可以用来找到两个城市之间的最短路径。城市之间的最短路径。8返回 结束7.4.1 Dijkstra算法Dijkstra算法基本思想:把图中所有结点分为两组,每一个结点对应一个距离值。第一组:包括已确定最短路径的结点,结点对应的距离值是由v0到此结点的最短

7、路径长度;第二组:包括尚未确定最短路径的结点,结点对应的距离值是v0经由第一组结点中间结点至此结点的最短路径长度。按最短路径长度递增的顺序把第二组的结点加到第一组中去,直至v0可达的所有结点都包含于第一组。在这个过程中,总保持从v0到第一组各结点的最短路径长度都不大于从v0至第二组任何结点的路径长度。9返回 结束 7.4.1 Dijkstra算法设源点为v0初始时v0进入第一组,v0的距离值为0;第二组包含其它所有结点,这些结点对应的距离值这样确定设vi为第二组中的结点)然后每次从第二组的结点中选一个其距离值为最小的结点vm加到第一组中。每往第一组加入一个结点vm,就要对第二组的各结点的距离值

8、作一次修正设vi为第二组的结点):若加进vm做中间结点使得v0至vi的路径长度更短即vi的距离值vm的距离值+Wmi),则要修改vi的距离vi的距离值vm的距离值+Wmi)。修改后再选距离值最小的一个结点加入到第一组中,。如此进行下去,直至第一组囊括图的所有结点或再无可加入第一组的结点存在。显然,这种从第二组的结点中选距离值最小的结点扩展是一种贪心策略。EvvEvvwdistiiii),(),(00010返回 结束7.4.1 Dijkstra算法procedure Dijkstra(G:所有权都为正数的加权连通简单图所有权都为正数的加权连通简单图)G带有顶点带有顶点av0,v1,vnz和权和权

9、(vi,vj),假设,假设(vi,vj)不是不是G的边,则的边,则(vi,vj)for i:1 to nL(vi)L(a):0S:(初始化标记,(初始化标记,a的标记为的标记为0,其余结点标记为,其余结点标记为,S是空集是空集while z S beginu:不属于不属于S的的L(u)最小的一个顶点最小的一个顶点S:Su for 所有不属于所有不属于S的顶点的顶点v if L(u)(u,v)L(v)then L(v):L(u)(u,v)这样就给这样就给S中添加带最小标记的顶点并且更新不在中添加带最小标记的顶点并且更新不在S中的顶点的标记中的顶点的标记 endL(z)从从a到到z的最短长度的最短

10、长度 dij11返回 结束7.4.1 Dijkstra算法v下面给出该算法的框图:下面给出该算法的框图:2(,)()f p qp通过框图,容易计算该算法计算量通过框图,容易计算该算法计算量 。12返回 结束7.4.1 Dijkstra算法下面通过一个实例来说明Dijkstra算法是如何工作的。13返回 结束7.4.1 Dijkstra算法14返回 结束7.4.1 Dijkstra算法v 0次迭代 L(a)0L(b)L(c)L(d)L(e)L(z)S1次迭代ua,SaL(a)(a,b)044L(b)L(a)(a,c)022L(c)L(a)(a,d)0L(a)(a,e)0L(a)(a,z)0L(b

11、)4,L(c)2,L(d)L(e)L(z)2次迭代uc,Sa,cL(c)(c,b)213L(b)L(c)(c,d)2810L(d)L(c)(c,e)21012L(e)L(c)(c,z)2L(b)3,L(d)10,L(e)12,L(z)3次迭代ub,Sa,c,bL(b)(b,d)358L(d)L(b)(b,e)3145623108abcdez用Dijkstra算法求a和z之间最短路所用的步骤。L(b)(b,z)3L(d)8,L(e)12,L(z)4次迭代ud,Sa,c,b,dL(d)(d,e)8210L(e)L(d)(d,z)8614L(z)L(e)10,L(z)145次迭代ue,Sa,c,b,

12、d,eL(e)(e,z)10313L(z)L(z)13结 束uz,Sa,c,b,d,e,z从a到z的最短路的长度为13。15返回 结束7.4.1 Dijkstra算法vDijkstra算法算法(另外一种说明另外一种说明)求有向网络求有向网络 G=(V,A)中结点中结点v1 到其它结点的最短距离。到其它结点的最短距离。设设D为为G的距离矩阵,的距离矩阵,n=|V|,向量,向量U=(u1,u2,un)的的ui 标记结点标记结点v1到到vi 的距离。的距离。S为已取得最短路的结点集合,其中每个结点在为已取得最短路的结点集合,其中每个结点在U中有中有固定标号标记取得的最短路的长度;固定标号标记取得的最

13、短路的长度;S为未取得最短路的为未取得最短路的结点集合,其中每个结点在结点集合,其中每个结点在U中有临时标号。中有临时标号。16返回 结束7.4.1 Dijkstra算法0.初始化:初始化:u1(1)0,uj(1)d1j (j=2,3,n)S(1)v1,S(1)v2,v3,vn,m=1;1.选固定标号:在选固定标号:在S(m)中求中求vk,使得,使得 uk(m)=minuj(m)|vjS(m)。假设假设 uk(m)=,则,则S(m)中的结点中的结点无最短路径;否则转无最短路径;否则转2。2.判结束:令判结束:令 S(m+1)S(m)vk,S(m+1)S(m)vk 假设假设 m=n1,终了。,终

14、了。3.修改临时标号:对所有修改临时标号:对所有vjS(m+1),令,令 uj(m+1)=minuj(m),uk(m)+dkj,m m+1;转;转1。17返回 结束7.4.1 Dijkstra算法vDijkstra算法只求出图中一个特定的顶点到其他各定点的最短路。但在许多实际问题中,需求出任意两点之间的最短路,如全国各城市之间最短的航线,选址问题等。当然,要求出一个图的任意两点间的最短距路,只需将图中每一个顶点依次视为始点,然后用Dijkstra算法就可以了。vDijkstra算法在物流配送中的应用 vOSPFopen shortest path first,开放最短路径优先算法是Dijkst

15、ra算法在网络路由中的一个具体实现。18返回 结束7.4.1 Dijkstra算法vDijkstra算法要求图上的权是非负数,否则结果不正确;vDijkstra算法同样适用于无向图,此时一个无向边次相当于两个有向边。v利用求最短路的方法求最长路。由于存在负权求最长路和负权等价),所以在这里Dijkstra算法不适用了,必须采用Floyd算法-动态规划算法vFloyd算法的功能是通过一个图的权值矩阵求出它的每两点间的最短路径矩阵.19返回 结束7.4.2 Floyd算法v如果有一个矩阵D=d(ij),其中d(ij)0表示i城市到j城市的距离。若i与j之间无路可通,那么d(ij)就是无穷大。又有d

16、(ii)=0。通过这个距离矩阵D,把任意两个城市之间的最短路径找出来。v【分析】对于任何一个城市而言,i 到 j 的最短距离不外乎存在经过 i 与 j 之间的k和不经过k两种可能,所以可以令k=1,2,3,.,n(n是城市的数目),检查d(ij)与d(ik)+d(kj)的值;d(ik)与d(kj)分别是目前为止所知道的 i 到 k 与 k 到 j 的最短距离,因此d(ik)+d(kj)就是 i 到 j 经过k的最短距离。所以,若有d(ij)d(ik)+d(kj),就表示从 i 出发经过 k 再到j的距离要比原来的 i 到 j 距离短,自然把i到j的d(ij)重写为d(ik)+d(kj),每当一

17、个k查完了,d(ij)就是目前的 i 到 j 的最短距离。重复这一过程,最后当查完所有的k时,d(ij)里面存放的就是 i 到 j 之间的最短距离了。20返回 结束7.4.2 Floyd算法定义定义7.4.1:已知矩阵已知矩阵A(aij)ml,B(bjk)ln,规定,规定CA*B(cij)mn,其中,其中cijmin(ai1b1j,ai2b2j,ailblj)定义定义7.4.2已知矩阵已知矩阵A(aij)mn,B(bij)mn,规定,规定DA B(dij)mn,其中,其中dijmin(aij,bij)可以利用上面定义的运算求任意两点间的最短距离。可以利用上面定义的运算求任意两点间的最短距离。已

18、知已知n阶加权简单图阶加权简单图G,设,设D(dij)mn 是图是图G的边权矩阵,的边权矩阵,即即dij(i,j)(若若G是有向图,则是有向图,则dij),若结点若结点i到到结点结点 j无边相连时,则取无边相连时,则取dij。然后依次计算出矩阵。然后依次计算出矩阵D2,D3,Dn及及S21返回 结束7.4.2 Floyd算法其中 D2D*D()nn d(2)ij=mindi1+d1j,di2+d2j,dindnjd(2)ij表示从vi出发两步可以到达vi的道路中距离最短者。D3D2*D()nn d(k)ij表示从vi出发k步可以到达vj的道路中距离最短者DnDn-1*D()nnSD D2 D3

19、 Dn(Sij)nn由定义可知dijk表示从结点i到j经k边的路在有向图中即为有向路中的长度最短者,而Sij为结点i到j的所有路若是有向图即为有向路中的长度最短者。Floyd算法的时间复杂性是O(n4)。dij2dij3dnij22返回 结束7.4.2 Floyd算法v求下图各点间的最短路径213465121733621D1 2 3 4 5 612345623返回 结束7.4.2 Floyd算法v解:D(2)*d14min+,1+3,2+1,+,+,+,24返回 结束7.4.2 Floyd算法v类似可得:D(3)D(5)D(4)25返回 结束7.4.2 Floyd算法v所以:SD D(2)D(

20、3)D(4)D(5)(sij)66S21346512173362126返回 结束7.4.3 Floyd-Warshall算法Floyd-Warshall算法是解决任意两点间的最短路径的一种算法。基本思想:通过求解矩阵序列D(0),D(1),D(n)来实现问题的求解。27返回 结束7.4.3 Floyd-Warshall算法其中:D(0)图的距离矩阵;D(n)最终解;dij边(vi,vj)的权值d(k)ij从vi到vj在所经过的顶点号k最短路径长度。即通过依次比较顶点修改路径实现求解的。对于任意两个顶点vi,vj,对于新比较的顶点vk一旦出现d(k-1)ijdikdkj,则修改对应的d(k)ij

21、。28返回 结束7.4.3 Floyd-Warshall算法v例:求下图各点间的最短路径213465121733621D1 2 3 4 5 612345629返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号1的矩阵213465121733621D(0)1 2 3 4 5 6123456D(1)1 2 3 4 5 6123456无改变30返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号2的矩阵213465121733621D(1)1 2 3 4 5 6123456D(2)1 2 3 4 5 612345648d(1)14d12d24所以修改d(

22、2)14d(1)16d12d26所以修改d(2)1631返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号3的矩阵213465121733621D(2)1 2 3 4 5 6123456D(3)1 2 3 4 5 61234564233d(2)14d13d34d(2)15d13d35d(2)24d23d34d(2)25d23d3532返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号4的矩阵213465121733621D(3)1 2 3 4 5 6123456D(4)1 2 3 4 5 6123456654d(3)16d13d34d46d(3)

23、26d23d34d46d(3)36d34d4633返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号5的矩阵213465121733621D(4)1 2 3 4 5 6123456D(5)1 2 3 4 5 6123456无改变34返回 结束7.4.3 Floyd-Warshall算法v解:比较经过顶点号6的矩阵213465121733621D(5)1 2 3 4 5 6123456D(6)1 2 3 4 5 6123456无改变35返回 结束7.4.3 Floyd-Warshall算法D(6)就是最终解,可以看到,和Floyd方法求得的结果是一样的。1 2 3 4 5 6123456SD(6)36返回 结束7.4.3 Floyd-Warshall算法Warshall算法算法求有向网络求有向网络 G=(V,E)中任两点间距离。中任两点间距离。设设D为为G的距离矩阵,的距离矩阵,n=|V|。输入输入D矩阵矩阵k 1i 1dij mindij,dik+dkj,j=1.ni i+1,假设,假设 in,转,转 4k k+1,假设,假设 kn,转,转 3Stop计算复杂度计算复杂度 O(n3)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!