lecture_11_4动态规划所有点对的最短距离.ppt

lecture_11_4动态规划所有点对的最短距离.ppt

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

7.5所有点对的最短路径问题 对于一个各边权值均大于0的有n个顶点的带权有向图G=(V,E),求所有顶点之间的最短路径和最短距离。 复习Dijkstra算法 其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。 初始时,S中仅含有源点。设u是G的某一个顶点,把从源点到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组distance记录当前每个顶点所对应的最短特殊路径长度。Dijkstra算法每次从V-S中取出具有最短特殊路长度的顶点u,将u添加到S中,同时对数组distance作必要的修改。一旦S包含了所有V中顶点,distance就记录了从源到所有其它顶点之间的最短路径长度。 算法中,我们不断更新以下三个数组: s数组: s[i],当顶点i加入S时,s[i]置1 Distance数组: Distance[i]记录原点到 顶点i的最短特殊路径长度。 path数组: path[i]记录顶点i在其最短特殊路径上的前驱顶点。由该数组可求得原点到各点的最短路径。如:设源点是顶点1, path数组如下 例如,对右图中的有向图,应用Dijkstra算法计算从源顶点1到其它顶点间最短路径的过程列在下页的表中。 方法一:重复调用Dijkstra算法n次 可轮流以每一个顶点为源点,重复调用狄克斯特拉算法函数Dijkstra() n次,即可求得所有顶点之间的最短路径和最短距离。 利用Dijkstra()函数求所有顶点之间的最短路径算法如下。其中,distance[i][j]中存放着从顶点i到顶点j的最短距离,path[i][j]中存放着从顶点i到顶点j的最短路径的前一顶点下标。 voidShortPath(AdjMWGraph G, int **distance, int **path) { Int n=G.NumOfVertices(); for(inti=0;in;i++) Dijkstra(G,i,distance[i],path[i]); } 该问题具有最优子结构性质 例如上图中,若路线I和J是A到C的最优路径,则根据最优化原理,路线J必是从B到C的最优路线。 子问题的构造 原问题:每个顶点到其他所有顶点的最短距离 最小的子问题D0:从顶点i (不得经过任何其他顶点)到顶点j的距离; 子问题D1:从顶点i(可以经过顶点1,不得经过其他任何其他顶点)到顶点j的距离。 子问题Dk:从顶点i(可以经过顶点1、顶点2、……顶点k,不得经过任何其他顶点)到顶点j的距离。 子问题Dn:从顶点i(可以经过顶点1、顶点2、……顶点n )到顶点j的距离。 ——即原问题 递推关系的建立 由di,jk-1推出di,jk的过程如下 若k=0, di,jk=L[i][j] (因为从i到j不允许经过任何其他顶点) 若1≤k ≤ n, di,jk=min{di,jk-1 , di,kk-1 +dk,jk-1} 计算过程 例:考虑下图所示的带权有向图,求所有顶点之间的最短距离。 算法设计 FLOYD算法 FLOYD(int *L,int n) {int *D=(int *)malloc((n+1)*(n+1)*sizeof(int)); D L {将数组L复制到D}; for(k=0;kn;k++) for(i=0;in;i++) for(j=0;jn;j++) D[i*n+j]=min(D[i*n+j], D[i*n+k]+D[k*n+j]); } 7.6 0-1背包问题 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 目标:使装入背包中物品的总价值最大 约束条件:装入的物品总重不得超过C 海盗盗宝问题 海盗有一背包,最大容积为9,现有5件宝物: 体积si分别是2、3、4、5和4公斤 价值vi分别是3、7、5、9和 8 请给出装载方案,使背包价值达到最大。 子问题的构造 当n=1时:只有一个物品, s1=2,v1=3 若背包容量c=0、1,则无法装入物品1,得到背包价值为0 若背包容量c=2、3、4、5、6,7,8,9则可装入物品1,得到背包价值为3。 考虑两个物品的情况 当n=2时,有两个物品, s1=2,v1=3,s2=3,v2=7 若背包容量c=0、1,得到背包价值为0 若背包容量c=2,可装入物品1,得总价值m[2][2]=3 若背包容量c

文档评论(0)

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

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

1亿VIP精品文档

相关文档