背包问题详解解析.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划系列之二 解空间 设Xi表示第i件物品的取舍,1代表取,0代表舍,搜索的空间为n元一维数组(X1,X2,X3,……,Xn),取值范围为(0,0,0……,0,0),(0,0,0……,0,1),(0,0,0……,1,0),(0,0,0……,1,1),……,(1,1,1……,1,1)。 解空间图示 以3个物品为例,解(0,1,0)表示(不取物品0,取物品1,不取物品2) 0-1背包问题 问题陈述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。 ? 解题思路: 此问题可转化为:给定c0,wi0,vi0,1≤i≤n,要求找出一个n元0-1向量(x1,x2,…,xn),xi∈{0,1},1≤i≤n,使得∑wixi≤c,而且∑vixi达到最大。因此,0-1背包是一个特殊的整数规划问题: max ∑vixi s.t. ∑wixi≤c, ?????????? xi∈{0,1},1≤i≤n 可用动态规划算法求解。 其他类型背包问题 完全背包问题(0/1): 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 多重背包问题 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 1、0-1背包问题—动态规划算法 void Knapsack(int *v, int *w, int c, int n, int ** m) { int j; int jMax; if(w[n]-1c) jMax=c; else jMax=w[n]-1; for (j = 0; j = jMax ;j++) m[n][j] = 0; for (j = w[n]; j = c; j++) m[n][j] = v[n] ; for ( int i=n-1; i1; i--) { int jMax; if(w[n]-1c) jMax=c; else jMax=w[n]-1; for (j = 0; j = jMax; j++) m[i][j] = m[i+1][j]; for (j = w[i] ; j = c; j++) if(m[i+1][j] m[i+1][j-w[i]] + v[i] ) m[i][j]=m[i+1][j]; else m[i][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]); } 1、0-1背包问题—动态规划算法 void Traceback(int **m, int w[ ], int c, int n, int x[ ]) {// 计算x for (int 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; } 2、背包问题—贪心算法 本节着重讨论可以用贪心算法求解的问题的一般特征。 对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢?这个问题很难给予肯定的回答。 但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有2个重要的性质:贪心选择性质和最优子结构性质。 贪心算法的基本要素 1、贪心选择性质 贪心算法的基本要素 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 2、背包问题—贪心算法 贪心算法和动态规划算

文档评论(0)

光光文挡 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档