典范硬币系统(Canonical Coin System)→ 贪心算法

【典范硬币系统】
● 典范硬币系统(Canonical Coin System)是指使用贪心算法总能得到最少硬币数量解‌的货币面值组合‌。

● 给定一个硬币系统 ,若使其为典范硬币系统,则要求其各相邻面值比例 ,及各开区间 内各金额 (非面值)的余数覆盖成本 小于相邻面值比例 ,即 ,其中,。当余数覆盖成本大于相邻面值比例时,即 时,需插入相邻面值构成的开区间 之间的某个金额作为新增面值优化原硬币系统。若优化后导致相邻面值比例不达标,即小于 2 了,需整体重构层级。

● 余数覆盖成本,是指位于相邻硬币面值 之间的金额 ,通过更小面值硬币覆盖该金额所需的最小硬币数量 。余数覆盖成本是判断贪心算法有效性的关键指标,需通过层级比例约束与动态调整机制控制其阈值。满足条件的硬币系统(如人民币硬币系统)可高效使用贪心算法,否则需依赖动态规划‌

● 相邻面值比例优先级,高于余数覆盖成本。即典范硬币系统,必须先满足相邻面值比例 ≥2 的约束条件。

【实例分析】
给定一个硬币系统 {1,5,11},判断其是否为典范硬币系统。
首先,其各相邻面值比例均大于等于 2(5/1=5 ≥2,11/5=2.2 ≥2),符合要求。
其次,分析其各余数覆盖成本,列表如下。

|-----------------------------|----------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|
| 硬币系统 {1,5,11}区间 | 余数覆盖成本 | 相邻面值比例 | |
| 相邻面值 1 元和 5 元 构成的开区间(1,5) | f(2)=2(2枚1元) | 5/1=5 | 2≤5?(√) |
| 相邻面值 1 元和 5 元 构成的开区间(1,5) | f(3)=3(3枚1元) | 5/1=5 | 3≤5?(√) |
| 相邻面值 1 元和 5 元 构成的开区间(1,5) | f(4)=4(4枚1元) | 5/1=5 | 4≤5?(√) |
| 相邻面值 5 元和 11 元 构成的开区间(5,11) | f(6)=2(1枚5元,1枚1元) | 11/5=2.2 | 2≤2.2?(√) |
| 相邻面值 5 元和 11 元 构成的开区间(5,11) | f(7)=3(1枚5元,2枚1元) | 11/5=2.2 | 3≤2.2?(错误 ) |
| 相邻面值 5 元和 11 元 构成的开区间(5,11) | f(8)=4(1枚5元,3枚1元) | 11/5=2.2 | 4≤2.2?(错误 ) |
| 相邻面值 5 元和 11 元 构成的开区间(5,11) | f(9)=5(1枚5元,4枚1元) | 11/5=2.2 | 5≤2.2?(错误 ) |
| 相邻面值 5 元和 11 元 构成的开区间(5,11) | f(10)=2(2枚5元) | 11/5=2.2 | 2≤2.2?(√) |

据表可知,此硬币系统 {1,5,11} 不满足典范硬币系统,故其不能通过利用贪心法求得最优解,只能采用动态规划求最优解。

相关推荐
wabs6663 小时前
关于贪心算法章节的【有两个维度问题】的自我总结
算法·贪心算法
重生之我是Java开发战士6 小时前
【贪心算法】加油站,单调递增的数字,坏了的计算器,合并区间,用最少数量的箭引爆气球
算法·贪心算法
cheems95271 天前
[算法手记] 贪心 爬楼梯问题
算法·贪心算法
Hui Baby1 天前
K8S自定义API
容器·贪心算法·kubernetes
wabs6662 天前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
ん贤4 天前
KServe 详细笔记
笔记·算法·贪心算法
重生之我是Java开发战士6 天前
【贪心算法】最长回文串,增减字符串匹配,分发饼干,最优除法,跳跃游戏
游戏·贪心算法·哈希算法
承渊政道9 天前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
重生之我是Java开发战士10 天前
【贪心算法】柠檬水找零,将数组和减半的最少操作次数,最大数,摆动序列, 最长递增子序列,递增的三元子序列
算法·贪心算法
欢璃11 天前
笔试强训练习
java·开发语言·jvm·数据结构·算法·贪心算法·动态规划