第3章节 动态规划(part2).ppt

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

算法描述 流水作业调度问题的Johnson算法 (1)令 (2)将N1中作业依ai的升序排序;将N2中作业依bi的降序排序; (3)N1中作业接N2中作业构成满足Johnson法则的最优调度。 算法举例 N1={1,3,4}, N2={2,5,6} J1 J2 J3 J4 J5 J6 印刷 3 12 5 2 9 12 装订 8 10 9 6 3 1 N1按ai升序:J4, J1, J3, N2按bi降序:J2, J5, J6 合并: J4, J1, J3,J2, J5, J6 算法复杂度分析 算法的主要计算时间花在对作业集的排序。因此,在最坏情况下算法所需的计算时间为O(nlogn)。所需的空间为O(n)。 3.10 0-1背包问题 0-1背包问题 假设给定n个物体和一个背包,物体i的重量为wi,价值为vi(i=1,2,……,n),背包能容纳的物体重量为c,要从这n个物体中选出若干件放入背包,使得放入物体的总重量小于等于c,而总价值达到最大 如果用xi=1表示将第i件物体放入背包,用xi=0表示未放入,则问题变为选择一组xi(i=0,1)使得 wx= wixi≤c, vx= vixi ,并且达到最大 n i=1 ? n i=1 ? 0-1背包问题的数学表示 0-1背包问题是一个特殊的整数规划问题 0-1背包问题的最优子结构性质 设(y1,y2,…,yn)是所给0-1背包问题的一个最优解,满足: vixi max n i=2 ? wixi ? c- w1y1 n i=2 ? xi?{0,1},2?i?n 则(y2,…,yn)是下面相应子问题的一个最优解: 为什么? 递归关系 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。 由0-1背包问题的最优子结构性质,有计算m(i,j)的递归式: 举例:求0-1背包问题 答案:z=6, x1=1,x2=0,x3=1 {2x1 + 3x2 +2x3 } Z=max x1 + 2x2 +5x3 ? 6 xi?{0,1},1?i?3 0-1背包问题的动态规划法 #define jmax 100 #define nmax 100 float m[nmax][jmax]; void Knapsack(float p[],int w[],int c,int n){ int j=0,i=0; for(j=0;jjmax;j++) m[n][j]=0; for(j=w[n];j=c;j++) m[n][j]=v[n]; for(i=n-1;i1;i--){ for(j=0;jjmax;j++) m[i][j]=m[i+1][j]; for(j=w[i];j=c;j++) m[i][j]=(m[i+1][j](m[i+1][j-w[i]]+v[i]))? m[i+1][j]:(m[i+1][j-w[i]]+v[i]); } m[1][c]=m[2][c]; if(c=w[1]) m[1][c]=(m[1][c](m[2][c-w[1]]+v[1]))?m[1][c]:(m[2][c-w[1]]+v[1]); } 看书 得到解向量 void traceback(int w[],int c,int n,int x[])/*得到解向量x*/ { int i=0; for(i=1;in;i++) if(m[i][c]==m[i+1][c]) x[i]=0; else{ x[i]=1; c-=w[i]; } x[n]=m[n][c]?1:0; } 算法复杂度分析 从m(i,j)的递归式容易看出,程序有两次循环,一次关于i (=n),一次关于j (=c)。算法需要O(nc)计算时间。 当背包容量c很大时,算法需要的计算时间较多。例如,当c2n时,算法需要Ω(n2n)计算时间 实现:0-1背包问题(1732) 旅行推销员问题--补充 即旅行商问题 问题描述:设有n个城市,已知任意两城市间之距离。现有一推销员想从某一城市出发巡回经过每一城市(且每城市只经过一次),最后又回到出发点,问如何找一条最短路径。 记号 设城市vi与vj城市的代价为dij。用dij=max(或?)表示vi与到vj无通路。 用D记代价矩阵, V0={v0, v1,v2, …, vn}, V?V0 例:D= 0 8 5 6 6 0 8 5 7 9 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档