- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Pascal经典算法_背包问题析
经典算法问题解析---背包问题 前言 背包问题是程序设计中一个很经典的问题,很多题目都是在该问题上延伸开来的,对与背包问题我们有多种解题方法(算法),其中最常用的是贪心,搜索,递归,动态规划等,它们各有千秋,我们还将从算法的角度来分析这些算法的原理和它的正确性质和执行效率。 0-1背包问题 所谓的背包问题,可以描述如下: 一个小偷打劫一个保险箱,发现柜子里有N个不同大小与价值的物品,但小偷只有一个容积为M的背包来装东西,背包问题就是要找出一个小偷选择所偷物品的组合,以使偷走的物品总价值最大。我们标识每个物品的价为VI,大小是ZI 算法描述 对于0/1背包相关的问题我们有多种方法可以解决 ⑴贪心法 ⑵搜索法(回溯) (3)递归 ⑷动态规划 ⑴ 贪心法 贪心算法描述: 总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。 应用: 1:该问题可以通过“局部寻优”逐步过渡到“整体最优”。但是这种思路是否可以解决问题 2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。 该题设计的贪心算法 利用贪心算法的定义,我们定义一个数组变量A[I]:=V[I]/Z[I]来表示每件物品的单位体积的价值,然后按照单位体积的价值进行从大到小的排序,小偷取东西的时候的策略先取单位体积价值最高的物品,一直到背包不能再放物品为止; 该算法的分析: 该算法简单,而且执行效率比较高但是也有一个致命的缺陷.我们利用贪心法可以解决部分问题,但是我们不能解决所有问题.我想大家在”采药”这一题中应该有清醒的认识! 参考程序段 For i:=1 to n do A[I]:=V[I]/Z[I]//求单位价值 For i:=1 to n-1 do for j:=i+1 to n do If a[i]a[j] then begin v[i]-v[j];z[i]-z[j];A[I]-A[J];end; //按照单位价值的从大到小排列; i:=1;v:=0; While ma[i] do Begin V:=v+v[i]; M:=m-z[i]; i:=i+1;end; //按照单位价值从大到小取物品 Writeln(‘the total value is’,v); //上面的题目存在什么问题,该怎么去解决它 ⑵搜索法 搜索算法介绍: 经过对题目的分析我们可以的出下列结论,对于每个物品来说我们只有两中状态取或者不取,也就是一个背包的解就是一个长小于N的决策序列,这个序列是有(0,1)组成,所以我们可以利用回溯的原理将所有的背包的所有可能列举出来,然后在所有的可能性中找到最优的解; 一:回溯的概念 从问题的某种可能情况出发,搜索所有能到达的可能情况,然后以其中一种可能的情况为新的出发点,继续向下探索,当所有可能情况都探索过且都无法到达目标的时候,再回退到上一个出发点,继续探索另一个可能情况,这种不断回头寻找目标的方法称为“回溯法”。 回溯算法是一种有条不紊的搜索问题答案的方法,是一种能避免不必要搜索的穷举式的搜索算法,其基本思想就是穷举搜索。常用于查找问题的解集或符合某些限制条件的最佳解集。 0/1背包问题的分析 该背包问题的目的在于求最优解,所以我们要用回溯的方法将所有的解求出来,逐一比较求最优秀的解; 对于每个节点的扩展只有两种类可能要不取,要不不取,所以该搜索树为一个N层的二叉树。 解空间的长度是=n。 解空间的组织形式是一棵2叉树,一个可行的解就是从根节点到叶子节点的一条路径。每个解为一个长度不超过N的0/1代码序列 控制策略则是前面的选择没有超过背包的容量。 程序基本部分 Procedure Try(I:integer);{搜索第到I个物品} var j:integer; Begin If iN then t:=max(total(n),t);//产生一个解,和当前的最优解比较 for j:=0 to1 do//对每个物品有取和不取两种情况 Begin //使用a:array[1..n]of 0..1表示每个物品的状态 If mz[i]*j then//如果包中还有空间 begin a[i]:=j;//标识该物品的状态 m:=m-a[i]*j;//剩余空间变化 try[i+1];//下一个物体选择 m:=m-a[i]*j;//剩余空间变化 a[i]:=0; end; End. 递归概念 我们可以用choose(I,z)来表示后i个物品在只剩下v个体积的空间中取的最大价值
您可能关注的文档
最近下载
- 南开大学(2020-2021 )《领导学》在线作业-答案.doc VIP
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读PPT课件.pptx VIP
- 成都名校小升初数学试题汇总4套含答案.pdf VIP
- 2024年全国统一高考英语试卷听力+原文+答案(全国卷Ⅰ、Ⅱ).docx
- 家蚕有色茧丝胶蛋白的提取工艺及其理化特性分析.docx VIP
- 夏季四防安全培训课件.pptx VIP
- 赤泥堆场技术标准.pdf VIP
- 奥鹏南开大学 20秋学期(1709、1803、1809、1903、1909、2003、2009 )《领导学》在线作业_2.doc VIP
- 南开19春学期(1503、1509、1603、1609、1703)《领导学》在线作业-02答案.doc VIP
- 2025+CSCO非小细胞肺癌诊疗指南解读 (2)PPT课件.pptx VIP
文档评论(0)