标准硬币系统Canonical coins system

贪心和动态规划都可以解决这个问题,只不过在时间复杂度和所得结果上需要权衡贪心:贪心算法的基本思想是优先选择面值最大的硬币,直到组合成所需金额。贪心表示的优点是算法简单,计算速度快,但不一定能够得到最少的硬币数。动态规划:优点是准确性高,但算法复杂度较高。因为它要求对所有可能的状态进行计算和记录,需要消耗大量的计算和空间资源。详细说一下给定一个货币系统的面值集合,是一个向量C=(c1c2c3cnc1​c2​c3​...cn​给定一个系数集合,也是一个向量V=(
摘要由CSDN通过智能技术生成

今天上算法课的tutorial,主要是讲贪婪算法。老师在课上提到了canonical coins system,但并没有深入讲解。回来看了一篇论文,整个问题很有意思,写下来记录一下。

引入

以中国为例,我们的货币系统中,有1角,5角,1元,5元,10元,20元,50元,100元这几种面值。我们的目的是,当给定一个需要找零的值,我们要用最少的货币数量来组合成这个值。用什么策略能达到这个目的?贪婪算法是否对每一种货币系统都有最优解?这是要讨论的问题。

这是一个NP-hard问题,但是在大多数国家所使用的货币系统中,贪婪算法是会起作用的。即先拿最大的面值去匹配,然后拿第二大的…但是得到的基本上都不是最优解。举个例子,一个货币系统中的基础面值有{1, 3, 4},如果想要拿出6块。使用贪婪算法会拿出一张4和两张1,这是三张钞票,但实际上最优解是两张3。

什么是Canonical coins system

贪心和动态规划都可以解决这个问题,只不过在时间复杂度和所得结果上需要权衡

  • 贪心:贪心算法的基本思想是优先选择面值最大的硬币,直到组合成所需金额。贪心表示的优点是算法简单,计算速度快,但不一定能够得到最少的硬币数。
  • 动态规划:优点是准确性高,但算法复杂度较高。因为它要求对所有可能的状态进行计算和记录,需要消耗大量的计算和空间资源。

详细说一下

  • 给定一个货币系统的面值集合,是一个向量C=( c 1 , c 2 , c 3 , . . . , c n c_1, c_2, c_3, ..., c_n c1,c2,c3,...,cn)
  • 给定一个系数集合,也是一个向量V=( v 1 , v 2 , v 3 , . . . , v n v_1, v_2, v_3, ..., v_n v
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高纯度Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值