版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,7.6 最短路径 n应用背景:交通咨询、导航 n约定 有向图 设V0,1,n-1,边上的权值非负(长度) n分类 单源最短路径:1个源点到其余顶点的最短路径单目标最短路径:将各边反向,即为问题1 单点对间最短路径:可用来解,但二者渐近时间相同 所有点对间最短路径:亦可用来解,即每个顶点作为源点 调用 1,7.6.1 单源最短路径问题 n 观察,100100,1304,501060,2203,上表是按路径长度递增序产生的从源点到其余顶点的最短路径 0到4的路径:, , , ,长度: 100, 90,70,60, 规律:当按长度增序生成从源s到其它顶点的最短路径时,则当前正在生成的最短路径上除终
2、点外,其余顶点的最短路径均已生成 例子:当求0到2的最短路径时,则该路径上顶点0,3的最短路 2 径在此前已生成,7.6.1 单源最短路径问题 n约定 从源s到终点v的最短路径简称为v的最短路径,SP(v) s到v的最短路径长度简称为v的最短距离,SD(v)红点集S:最短距离已确定的顶点集合 白点集V-S:最短距离尚未确定的顶点集合 n算法思想- Dijkstra(1972图灵奖得主) 基于上述观察 v初始化:仅已知源s的最短距离SD(s)=0,故红点集S=s; v扩充红点集:算法的每一步均是在当前白点集中选一最短距离最小的白点来扩充红点集,以保证算法是按长度增序来产生各顶点的最短路径; v结
3、束:当前白点集空或仅剩下最短距离为的白点为止。注 :若s到某白点的路径不存在,可假设该白点的最短路径是 3 一条长度为的虚拟路径。,7.6.1 单源最短路径问题 n如何扩充红点集? 白点k的最短路径上除终点外,其余顶点的最短路径均已生 成,故它们均为红点 设置向量D0.n-1,对每一个白点vV-S,用Dv记录从源点s到达v,且除v外中间不经过任何白点的“最短”路径长度。初始时每个白点v的Dv值是边上的权。 Note:从s到v的中间不经过其他白点的路径可能不止1条,但 只需将其中最短的那条的长度记录在Dv中。 Dv=SDv?即Dv是v最终的最短距离吗?不一定,因为s到v可能存在包含其它白点作为中
4、间点的更短路径。 Dv只是v当前估计的最短距离(简称估计距离),即: DvSDv v如何在当前白点集中选一最短距离最小的白点k来扩充红点集? 4,7.6.1 单源最短路径问题 n如何调整白点集中白点的估计距离? 由于新红点k可能导致剩余白点的估计距离变小,使之离源点更近,故需调整。 设jV-S,若Dj由于k加入红点集而变小,则新路径P必是,sp1kp2j,且P1中只有红点,P2必是边,即:,Length(p)= Dk + w. 证明:略 v调整方法 若length(P)Dj,则用length(P)来修正Dj。,6,7.6.1 单源最短路径问题 n例子 00 00 1010010 1010010
5、 14130 30 50,100 4,100,10 1 50 2,0 30 10 20,100 4 60 3, 2 10 10 1 2 50,0 0 30 20,3 3,30 4 90 60 30,60 2 10 10 1 2 50,0 0 30 10 20,3 3,30 4 60 30,最短距离:红色 估计距离:白色 依次求出的最短距离为: 1) D0=0 2) D1=10,调整顶点2 3) D3=30,调整顶点2,4 4) D2=50,调整顶点4 5) D4=60,v最短路径树:各顶点的最短路径(实线)总是一棵以源点为根的树,称之为。,7,7.6.1 单源最短路径问题 n 如何构造最优解
6、因为D向量只记录了最优解的值,但不能得到最优解。因此,要记录最优解则须引入附加信息。 因为最优解是最短路径树,故只需增加一个向量P0.n-1,用Pi记录顶点i的双亲,由双亲的唯一性知,顶点i的最短路径可从Pi反复上溯至根(源点)即可求得最优解。 n 算法实现,if 不是边,Gij=,w() otherwise,8,7.6.1 单源最短路径问题 typedef int Distancen; typedef int Pathn void Dijkstra ( AdjMatrix G, Distance D, Path P, int s ) /0s n-1,若不是边,则Gij=Infinity Bo
7、olean Sn;/S是红点集。Si为真表示i为红点,否则为白点 for ( i=0; iE, s是i的前驱(双亲) else Pi=-1; / i无前驱,注意Ps亦无前驱 Ss=TRUE; Ds=0;/红点集仅有源点s,9,for ( i=0; iDk+Gk j ) D j = Dk+Gk j ; /修改白点j的估计距离,使之离s更近P j = k; / k是j的前驱 , /endfor10,n 算法执行过程 源点s3,循环 i红 点集Sk D0 D1 D2 D3 D4P0 P1 P2 P3 P4,初始化 3 20060-1-13-13,13,22 20030-1-13-12,23,2,44
8、 20030-1-13-12,3,同上, 白点集0,1中所有点的估计距离为,退出循环,1,10,0 30,100 4,n 时间:时间O(n2)501060,n 构造解220311, 构造解 输出路径及其长度 void PrintPath(Path P,Distance D) /路径是逆向的 int i,pre; for ( i=0; in; i+ ) /依次打印点i的最短路径及长度printf(“nD:%d, P:%d”, Di, i); /输出终点i pre=Pi; /找终点i的前驱 while ( pre != -1 ) printf( “, %d”, pre ); pre=Ppre; /
9、上溯找前驱 ,12,7.6.2 所有点对间的最短路径问题 n 解法一 以每一顶点为源点,调用DIjkstra算法,时间O(n3) n 解法二 Floyd(1978年图灵奖得主)算法更简洁,但是时间仍为 O(n3) v假设:加权邻接矩阵C(nn),0if i=j,Cij=if 不是边,w() otherwise,v思想: i,jV,若E,则从i到j有一条路径,长度为Ci j 但它不一定是最短路径,因为可能存在一条从i到j中间包含其他顶点的更短路径。因此,必须依次考虑能否在i和j之间加入顶点0,1,n-1,而得到更短的路径。13,n Floyd算法的基本步骤 定义nn的方阵序列D1, D0 , D
10、n1, v初始化: D1C D1ij边的长度,表示初始的从i到j的最短路径长度,即它是从i到j的中间不经过其他中间点的最短路径。 v迭代:设Dk1已求出,如何得到Dk(0kn1)? Dk1ij表示从i到j的中间点不大于k1的最短路径p:ij,考虑将顶点k加入路径p得到顶点序列q:ikj, 若q不是路径或q是长度大于p长度的路径,则当前的最短路径仍是上一步结果:Dkij= Dk1ij;否则用q取代p作为从i到j的最短路径。 因为q的两条子路径ik和kj皆是中间点不大于k1的最短路径 ,所以从i到j中间点不大于k的最短路径长度为: Dkijmin Dk1ij, Dk1ik +Dk1kj 14 矩阵
11、序列D1, D0 , Dn1可在同1个矩阵上迭代求得,为什么?,7.6.2 所有点对间的最短路径问题 nFloyd算法的基本步骤(续) v解矩阵: Pathnn:记录路径构造 在第k次跌代中,Pij记录从i到j的中间点序号不大于k的最 短路径上顶点i的后继顶点。 当算法结束时,可由Pathij得到从i到j的最短路径,其方法是从顶点i开始反复找其后继,直至找到顶点j或确认i到j没有路径为止。 15,n Floyd算法实现 void Floyd( AdjMatrix D, AdjMatrix C, int Pathnn ) for ( i=0; in; i+ ) for ( j=0; jn; j+ ) /初始化 D i j=C i j; if ( C i j=Infinity ) Pathij=-1; else Path i j=j; /j是i的后继 /endfor for ( k=0;kn;k+ ) /将k扩充到从i到j的最短路径上 for ( i=0;in;i+ ) for ( j=0;jn;j+ ) if ( D i k+D k jD i j ) D i j=D i k+D k j; /修改路径长度Path i j=Path i k; /修改路径,16,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年港口REITs“盘活-投资-提升-再盘活”良性循环机制
- 2026年深海采矿活动环境管理策略优化方案
- 济南历下区2025-2026学年初三下第七次模拟化学试题含解析
- 陕西省延安市名校2026届初三第一次月考-化学试题含解析
- 常州市重点中学2026年初三下学期“扬帆起航”生物试题含解析
- 2026届内蒙古鄂尔多斯康巴什新区达标名校初三下-半期考试生物试题试卷含解析
- 2026年湖南省永州市祁阳县初三考前适应性测试化学试题含解析
- 甘肃省广河县重点中学2026年初三生物试题开学统练试题含解析
- 2026届安徽省濉溪县联考初三下学期阶段性练习化学试题含解析
- 2026年江苏省南京市宁海五十中学初三4月考试题-生物试题试卷含解析
- 2026届新高考生物精准冲刺复习:基因定位
- (必看)2025年3月29日陕西省事业单位联考C类《职测》真题及答案
- 拉森钢板桩施工专项技术方案
- 新能源装备制造项目风险评估报告
- 部队普通车辆装卸载课件
- 小学规范书写汇报
- 《婚姻家庭继承法(第八版)》课件 房绍坤 第1-8章 婚姻家庭法概述-收养制度
- 相似物料管理办法
- (高清版)T∕CSRME 009-2021 《露天矿山岩质边坡工程设计规范》
- 2023.12六级真题第1套
- 森林公园管理课件
评论
0/150
提交评论