贪心算法算法导论 找零问题
来源:互联网 发布:数据挖掘软件排名 编辑:程序博客网 时间:2024/06/11 13:17
考虑用最少的硬币找n美分零钱的问题。假设每种硬币的面额都是整数。
A.设计贪心算法求解找零问题,假定有25美分、10美分、5美分和1美分4种面额的硬币。证明你的算法能找到最优解。
B.假定硬币的面额是c的幂,即面额c0,c1,...,ck,c和k为整数,c>1,k>=1.证明:贪心算法总能得到最优解。
C.设计一组硬币面额,使得贪心算法不能保证得到最优解。这组硬币面额中应该包含1美分,使得对每个零钱值都存在找零方案。
D.设计一个O(nk)时间的找零算法,适用于任何k种不同面额的硬币,假定问题包含1美分硬币。
A:
分析——
引理1(离散数学其及应用3.1.4):若n是正整数,则用25美分、10美分、5美分和1美分等尽可能少的硬币找出的n美分零钱中,至多有2个10美分、至多有1个5美分、至多有4个1美分硬币,而不能有2个10美分和1个5美分硬币。用10美分、5美分和1美分硬币找出的零钱不能超过24美分。
证用反证法。证明如果有超过规定数目的各种类型的硬币,就可以用等值的数目更少的硬币来替换。注意,如果有3个10美分硬币,就可以换成1个25美分和1个5美分硬币;如果有2个5美分硬币,就可以换成1个10美分硬币;如果有5个1美分硬币,就可以换成1个5美分硬币;如果有2个10美分和1个5美分硬币,就可以换成1个25美分硬币。由于至多可以有2个10美分、1个5美分和4个1美分硬币,而不能有2个10美分和1个5美分硬币,所以当用尽可能少的硬币找n美分零钱时,24美分就是用10美分、5美分和1美分硬币能找出的最大值。
假设存在正整数n,使得有办法将25美分、10美分、5美分和1美分硬币用少于贪心算法所求出的硬币去找n美分零钱。首先注意,在这种找n美分零钱的最优方式中使用25美分硬币的个数q′,一定等于贪心算法所用25美分硬币的个数。为说明这一点,注意贪心算法使用尽可能多的25美分硬币,所以q′≤q。但是q′也不能小于q。假如q′小于q,需要在这种最优方式中用10美分、5美分和1美分硬币至少找出25美分零钱。而根据引理1,这是不可能的。由于在找零钱的这两种方式中一定有同样多的25美分硬币,所以在这两种方式中10美分、5美分和1美分硬币的总值一定相等,并且这些硬币的总值不超过24美分。10美分硬币的个数一定相等,因为贪心算法使用尽可能多的10美分硬币。而根据引理1,当使用尽可能少的硬币找零钱时,至多使用1个5分硬币和4个1分硬币,所以在找零钱的最优方式中也使用尽可能多的10美分硬币。类似地,5美分硬币的个数相等;最终,1美分的个数相等。
B:
分析——同A题,由于1+c1+c2+c3+...ck-1=ck - 1<ck,故当n大于ck时,可以分解为ck与n-ck的值,其中ck只用一个硬币值为ck的硬币就能得到最少硬币数,而子问题变成n-ck的最少硬币数,依次类推,贪心算法总能得到最好的结果。
C:分析——要分析什么情况下贪心算法无效,如果出现一组硬币25,6,5,1.由于1+5=6,当遇到10元时,按照贪心算法将分解为6+4*1,而其实为2*5.
D:
动态规划算法很适合。
- 贪心算法算法导论 找零问题
- 贪心算法的找零问题
- 算法导论第十六章贪心算法-思考题16-1找零问题
- 使用贪心算法实现硬币找零问题
- 贪心算法实现找零问题求解
- 贪心算法解硬币找零问题
- 贪心算法之钱币找零问题
- 算法第四节:贪心算法解决“超市找零方案”问题
- 算法导论 思考题 16-1 d小题 找零问题
- 硬币找零(贪心算法)
- 贪心算法_钱币找零
- 【算法导论】贪心算法之背包问题
- 贪心算法实例(二):钱币找零问题
- 算法导论-贪心策略
- 算法导论—贪心算法
- 活动选择问题(算法导论第十六章贪心算法)
- 《算法导论》之 贪心算法—活动选择问题
- 【算法导论】贪心算法之活动安排问题
- 12.lua学习笔记:环境
- mssql 中 with(nolock)浅析
- HTML入门笔记五之HTML整体知识点
- SDUT OJ 走迷宫
- 【android】android获取各种目录的方法
- 贪心算法算法导论 找零问题
- day15
- FFmpeg+SDL视频播放(2)
- OC语法<2.3>内存管理:ARC机制下的内存管理
- 屌丝程序员和技术大拿的区别是什么?
- 人生中第一篇博客
- Adaboost
- Teamviewer无法连接,日志报错error 10049
- 滚动视图控件ScrollView