第4章贪心算法解说.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 练习1:装箱问题 设有编号为0,1,…,n-1的n种物品,体积分别为V0,V1,…,Vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超过V,要求使装进这n种物品的箱子数要少。 对适当大的n,找出所有可能的划分要花费的时间是无法承受的。为此,对装箱问题采用非常简单的近似算法,即贪心法。该算法一次将物品放到它第一个能放进去的箱子中,该算法虽不能保证找到最优解,但还是能找到非常好的解。 设有6种物品,它们的体积分别为:60,45,35,20,20,20单位体积,箱子的容量为100单位体积。 按上述算法计算,需三只箱子,各箱子所装物品分别为:1,3、2,4,5、6,而最优解为两只箱子。 * 算法:{输入箱子的容积; 输入物品种数n; 按体积从大到小顺序,输入各品种的体积; 预置已用箱子链为空; for(i=0;in;i++) {从已用的第一只箱子开始顺序寻找能放入物品的箱子j; if(已用箱子都不能再放物品i) {另用一只箱子,并将物品i放入该箱子; boxcount++; } else 将物品i放入箱子j; }} * 练习2:删数问题 键盘输入一个正整数N,去掉其中任意S个数字后剩下的数字按左右次序组成一个新的正整数。对给定的N和S,寻找一种删数规则使得剩下的数字组成的新数最小。 * #include string.h main() { char n[10]; /*键盘输入的正整数*/ int s; /*要删除的数字个数*/ int i,j,k; printf(input the number:); scanf(%s,n); printf(\ninput the delete number); scanf(%d,s); for(i=1;i=s;i++) { for(j=0;jstrlen(n);j++) { if(?) { for(k=j;kstrlen(n);k++) n[k]=n[k+1]; ?; break; } } } printf(the result is %s,n); } ? n[j]n[j+1] ? n[k]=\0 * 欢迎辞 4.2 贪心算法的基本要素 void Knapsack(int n,float M,float v[],float w[],float x[]) { Sort(n,v,w); int i; for (i=1;i=n;i++) x[i]=0; float c=M; for (i=1;i=n;i++) { if (w[i]c) break; x[i]=1; c-=w[i]; } if (i=n) x[i]=c/w[i]; } * 算法knapsack的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。因此,算法的计算时间上界为 O(nlogn)。 为了证明算法的正确性,还必须证明背包问题具有贪心选择性质。 4.2 贪心算法的基本要素 对于0-1背包问题,贪心选择之所以不能得到最优解是因为在这种情况下,它无法保证最终能将背包装满,部分闲置的背包空间使每公斤背包空间的价值降低了。事实上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所导致的最终方案,然后再作出最好选择。由此就导出许多互相重叠的子问题。这正是该问题可用动态规划算法求解的另一重要特征。 实际上也是如此,动态规划算法的确可以有效地解0-1背包问题。 * 4.3 最优装载 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 * 对最优装载问题进行形式化描述 * 用一个向量(x1,x2,x3,…,xn),表示装的个数多少? 约束条件:xi ∈{ 0,1 } 目标函数: * 1、算法描述 最优装载问题可用贪心算法求解。 采用重量最轻者先装的贪心选择策略 可产生最优装载问题的最优解。

文档评论(0)

bbnnmm885599 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档