- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
武汉工商学院信息工程学院报告名称:贪心算法学生姓名:朱捷学 号:1203090120班 级:12计科本1 2015年5月19日目 录1 概述11.1 目的与任务11.2 开发环境12 使用贪心算法解决背包问题的实验及结果分析12.1问题描述12.2解决思路12.3算法设计12.3.1核心算法流程图12.3.2核心代码及解释22.3.3时间复杂度分析42.4 算法结果42.4.1实验结果42.4.2实验结果分析43 使用贪心算法算法解决哈弗曼问题的实验及结果分析43.1问题描述43.2解决思路43.3算法设计53.3.1核心算法流程图53.3.2核心代码及解释53.3.3时间复杂度分析63.4 算法结果63.4.2实验结果分析74 总结74.1 贪心算法总结74.2 收获与不足74.3 总结贪心算法与动态规划算法区别8参考文献91 概述贪心算法是一种高效的、不稳定的算法;但是它在解决问题时有很多独特的优良性质,掌握贪心算法有时可以非常迅速的获得最优解或近似最优解。一般认为,凡是经过数学归纳法证明可以采用贪心算法的情况,都应该采用它。因为它的效率是很高的。贪心算法的弱点在于它的不稳定性,即有时它不总能返回最优解。下面我们来详细讲解一下使用贪心算法的条件:1、它具有和动态规划问题相似的性质,即分治法中的“最优子结构”性质,即每个子问题的最优解的集合就是整体最优解。这是必须的性质,因为贪心算法解决的问题流程就需要依序研究每个子问题,然后综合之得出最后结果。不能采用分治法解决的问题,是理论上是不能使用贪心算法的。而且,必须拥有最优子结构性质,才能保证贪心算法返回最优解。 2、它必须具有一种特殊的“贪心选择性”。这种性质类同于“最优子结构”性质,但又有一些小的差别。我们知道,在动态规划中,每一个父问题结果的得出需要它的子问题作为条件;但是“贪心选择性”则不需要;贪心选择性所做的是一个非线性的子问题处理过程,即一个子问题并不依赖于另一个子问题,但是子问题间有严格的顺序性。要证明一个问题具有“贪心选择性”,就必须证明每一步所做的贪心选择最终导致一个问题的整体最优解。这也是必须的性质。 如果一个问题具有上述两个性质,理论上就应该采用贪心算法。目的与任务利用贪心算法的性质,通过选择适当的贪心策略的贪心算法解决活动安排问题,且能求得活动安排的最优解。具体任务:写出背包问题代码,并找出实际问题的最优解。同时运用贪心算法解决一个哈弗曼编码问题。开发环境平台:Windows 7/Windows XP;编程语言:C语言;运行环境:Visual C++ 6.0。2 使用贪心算法解决背包问题的实验及结果分析2.1问题描述当前有一个背包和若干个物品,每个物品有自己的质量和效益,将物品尽可能多的放入背包,使得背包里的物品总效益最高,每个物品可分散放置在背包中。2.2解决思路背包问题不同于0/1背包问题,即背包问题中,可以把部分物品放到背包中,而0/1背包问题只有放或者不放两种选择。现在我们来分析:因为每一个物品都可以分割成单位块,单位块的利益越大显然总收益越大,所以它局部最优满足全局最优,可以用贪心法解答。方因为每一个物品都可以分割成单位块,单位块的利益越大显然总收益越大,所以它局部最优满足全局最优,可以用贪心法解答。方法如下:(1)先将单位块收益按从大到小进行排序;(2)初始化背包的剩余体积和当前价值;(3)从前到后考虑所有物品:a.如果可以完全放入,当前价值加上物品总价值,剩余体积减去物品总体积;b.如果可以部分放进,当前价值加上物品价值*剩余体积,使剩余容量为0。2.3算法设计2.3.1核心算法流程图图2-1背包问题流程图2.3.2核心代码及解释void Insertionsort(goodinfo goods[],int n) {//插入排序,按pi/wi价值收益进行排序 int j,i; for(j=2;j=n;j++) //如果是一个物品,就不用排序了 { goods[0]=goods[j]; i=j-1; while (goods[0].pgoods[i].p) { goods[i+1]=goods[i]; i--; } goods[i+1]=goods[0]; }//比值做升序排列以上代码是在计算出了
文档评论(0)