(贪心算法实验报告.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(贪心算法实验报告

实验报告题目 实验四 贪心算法 开课实验室:数学实验室 指导老师: 时间:20.12 学院:理学院 专业:信息与计算科学 班级:200级班 姓名: 学号:for(i=0,s=0;in;i++) { s=s+a[i]; if(sn) { sum++; s=a[i]; } } 最少硬币个数问题 实验题目 考虑下面的用最少硬币个数找出n分钱的问题: 当使用2角5分,1角,5分和1分四种硬币面值时,设计一个找n分钱的贪心算法,并证明算法能产生最优解。 过程设计 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。比如说找最少硬币个数的问题。在算法的实现过程中,当剩余的钱数大于2角5分时,我们在记录找2角5分硬币的个数的变量里面加一,同时把剩余所找的钱的总数目也减2角5分。不断重复这个过程,直到剩余所需找的钱的数目小于2角5分时,在记录找1角硬币的个数的变量里面加一,同时把剩余所找的钱的总数目也减1角,不断重复这个过程,直到剩余所需找的钱的数目小于1角。5分和1分的硬币实现过程同上述过程一样,一直执行到所剩的钱的数目为0,此时停止计算,得到最优解。 实验结果分析 (1)最少加油次数 当加油后行驶的最大距离小于相邻站点的最小值时,此时,可行,求解结果如下: 当加油后行驶的最大距离大于相邻站点的最小值时,此时,没用可行性,为边沿情况,求解结果如下: (分析时空复杂性,设计测试用例及测试结果) 时间复杂性:该算法的时间复杂度为 空间复杂性分析:该算法的空间复杂度为 (2)最少硬币问题 当输入的找零钱数为正常的时候的运行情况如下: 当输入的找零钱数为不正常的时候(为负)的运行情况如下: (分析时空复杂性,设计测试用例及测试结果) 时间复杂性:该算法的时间复杂性为 空间复杂性分析:该算法的空间复杂性为 实验体会 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题,相容活动安排问题等。这样和采用动态规划的算法相比,算法的思想更加的简单,实现起来更加的容易。 但是也要明确贪心算法和动态规划的主要区别。及0-1背包问题可以用动态规划算法求解,但是贪心选择算法却不能用动态规划算法求解。因为贪心算法无法最终将背包装满,部分闲置的背包空间使得每公斤背包空间的价值降低了。 附录:(源代码) 最少加油次数 具体算法的实现如下: #includeiostream.h void main() { int n,m,a[100],i,s,sum=0,j; cout请输入沿途的站点数和每一次加油以后可以行使的路程数endl; cinn; cinm; cout沿途的站点数为:nendl; cout每加满一次油可以行使的路程数为mendl; cout请一次输入第零站到第N站之间的距离endl; for(i=0;i=n;i++) { cina[i]; } for( i=0;i=n;i++) { cout第i站到第i+1站之间的距离为a[i]endl; } for(j=0;jn;j++) if(a[j]m) { sum=-1; break; } if(sum!=-1) { for(i=0,s=0;in;i++) { s=s+a[i]; if(sn) { sum++; s=a[i]; } } } if(sum==-1) cout没有可行性endl; else cout沿途的最少加油次数为sumendl; } (2)最少硬币问题 具体算法的实现如下: #includeiostream.h main() { double n,m,a,b,c,d,f; a=b=c=d=0; cout请输入应找的钱!endl; cinn; if(n=0) cout 您输入的数据有错!endl; m=n; while(m=2.5) { a++; m=m-2.5; } while(m=1) { b++; m=m-1; } while(m=0.5) { c++;

文档评论(0)

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

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

1亿VIP精品文档

相关文档