人工智能背包问题.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
背包问题 1. 实验目的 给定一个载重量为 m,n 个物品,其重量为 w ,价值为 v ,1<=i<=n, i i 要求 : 把物品装入背包,并使包内物品价值最大。 2 . 问题分析 在 0/1 背包问题中,物体或者被装入背包,或者不被装入背包, 只有两种选择。 循环变量 i ,j 意义:前 i 个物品能够装入载重量为 j 的背包中。 (n+1)*(m+1) 数组 value 意义:value[i][j] 表示前 i 个物品能装 入载重量为 j 的背包中物品的最大价值 , 若 w[i]>j ,第 i 个物品不装 入背包, 否则,若 w[i]<=j 且第 i 个物品装入背包后的价 值>value[i-1][j] ,则记录当前最大价值 (替换为第 i 个物品装入背 包后的价值)。 计算最大价值的动态规划算法如下: // 计算 for (i=1;i<row;i++) { for (j=1;j<col;j++) { //w[i]>j, 第 i 个物品不装入背包 value[i][j]=value[i-1][j]; //w[i]<=j, 且第 i 个物品装入背包后的价值 >value[i-1][j], 则记录当前最大价值 int temp=value[i-1][j-w[i]]+v[i]; if (w[i]<=j && temp>value[i][j]) value[i][j]=temp; } } 即该段程序完成以下 n 个阶段: 1:只装入 1 个物品,确定在各种不同载重量的背包下,能够得到的 最大价值。 2:装入 2 个物品,确定在各种不同载重量的背包下,能够得到的最 大价值。 。。。 n:以此类推,装入 n 个物品,确定在各种不同载重量的背包下,能 够得到的最大价值。 3. 算法步骤 确定装入背包的具体物品,从 value[n][m] 向前逆推: 若 value[n][m]>value[n-1][m] ,则第 n 个物品被装入背包,且 前 n-1 个物品被装入载重量为 m-w[n] 的背包中。 否则,第 n 个物品没有装入背包, 且前 n-1 个物品被装入载重量 为 m的背包中。 以此类推, 直到确定第一个物品是否被装入背包为止。 逆推代码 如下: //逆推求装入的物品 j=m; for (i=row-1;i>0;i--) { if(value[i][j]>value[i-1][j]) { c[i]=1; j-=w[i]; } } 4. 结果分析 给定一个载重量为 m ,n 个物品,其重量为 w i i ,价值为 v ,1<=i<=n ,要求 : 把物品装入背包,并使包内物品价值最大。 输入数据及输出数据均在文件中。 输入数据格式: n m w 1 w2 ... wn v1 v2 ... vn 输出

文档评论(0)

150****3552 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档