- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机科学与工程系
《高级语言程序设计》
课程设计报告
课程设计题目:背包问题
指导教师:张 星 仝瑞阳
姓名:周飞
班级:0614073
学号:45
同组人员:赵鹏飞 程金英
目录
设计题目..................................................3
实验环境..................................................3
实验内容..................................................3
设计解决方案..............................................3
流程图、模块图及说明......................................4
设计程序..................................................6
设计中遇到的问题及解决方法...............................11
心得体会.................................................11
课程设计报告
【设计题目】
背包问题
【实验环境】
Windows XP , Microsoft Visual C++ 6.0
【设计内容】
有不同重量的物品n件,求从这n件物品中任取一部分物品放入背包,使选中的物品的总重量不超过指定的限制重量,但选中物品的价值之合为最大。即任意给定物品个数及它们的重量和价值,在最大的限制重量一定的情况下,为了使价值最大,选出最优解。
【设计解决方案】
动态规划: 动态规划算法与分治法类似,其基本思想是将待求解问题分解成若干个子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的,若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费过多的时间。动态规划法又和贪婪算法有些一样,在动态规划中,可将一个问题的解决方案视为一系列决策的结果。不同的是,在贪婪算法中,每采用一次贪婪准则便做出一个不可撤回的决策,而在动态规划中,还要考察每个最优决策序列中是否包含一个最优子序列。
二、算法框架:1.在该背包问题中,其基本思路是:每件物品只有一件,可以选择取或者不取,同时需要根据限制质量c进行选择。从n 个物品中选取,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,物品的总重量不能超过限制的最大重量,最佳装载是指所装入的物品价值最高,即p1*x1+p2*x1+...+pi*xi(其1=i=n,x取0或1,取1表示选取物品i) 取得最大值。 利用最优序列由最优子序列构成的结论,可得到m 的递归式为: 当j=wi时: m(i,j)=max{f(i+1,j),f(i+1,j-wi)+vi} ①式当0=jwi时:m(i,j)=f(i+1,j) ②式。这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。 “选择前i件物品放入限制质量为c的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品被选中”,价值为f[i-1][c];如果选第i件物品,那么问题就转化为“前i-1件物品放入剩下的限制质量为c-w[i]的背包中”,此时能获得的最大价值就是f[i-1][c-w[i]]再加上通过选中第i件物品获得的价值w[i]。
有一个主循环i=1..N,每次算出来二维数组f[i][0..c]的所有值。那么,如果只用一个数组f[0..c],能不能保证第i次循环结束后f[v]中表示的就是我们定义的状态f[i][c]呢?f[i][c]是由f[i-1][c]和f[i-1][c-w[i]]两个子问题递推而来,能否保证在推f[i][c]时(也即在第i次主循环中推f[c]时)能够得到f[i-1][c]和f[i-1][c-w[i]]的值呢?事实上,这要求在每次主循环中我们以c=C..0的顺序推f[c],这样才能保证推f[v]时f[c-w[i]]保存的是状态f[i-1][c-w[i]]的值。伪代码如下:
for i=1..N
for c=C..0
f[c]=max{f[c],f[c-w[i]]+w[i]};
2.改进算法:
由m(i,j)的递归式容易证明,在一般情况下,对每一个确定的i(1≤i≤n),函数m(i,j)是关于变量j的阶梯状单调不减函数。跳跃点是这一类函数的描述特征。在一般情况下,函数m(i,j)由其全部跳跃点惟一确定。对每
您可能关注的文档
最近下载
- 百蕊草半寄生机制的研究.pdf VIP
- 百蕊草种子适宜萌发条件的研究.PDF VIP
- 风险识别的方法培训.ppt
- 中国燕麦草项目经营分析报告.docx
- 常用DOS命令大全电脑资料PPT.pptx VIP
- 20J333 建筑防腐蚀构造(高清带书签).pdf VIP
- 腾讯音效设计师岗面试题库参考答案和答题要点.docx VIP
- GRB2在EEF1A2促胰腺癌发生、发展中的关键作用与机制研究.docx
- 统编版道德与法治一年级上册第14课《人人爱护公物》教学设计.docx VIP
- GZ-2022062 健康与社会照护赛项正式赛卷完整版包括附件-2022年全国职业院校技能大赛赛项正式赛卷.docx VIP
原创力文档


文档评论(0)