典范硬币系统(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} 不满足典范硬币系统,故其不能通过利用贪心法求得最优解,只能采用动态规划求最优解。

相关推荐
Java版蜡笔小新12 小时前
算法-贪心算法
算法·贪心算法
无影无踪的青蛙16 小时前
[Python] 贪心算法简单版
开发语言·python·贪心算法
藍海琴泉21 小时前
贪心算法经典应用:最优答疑调度策略详解与Python实现
算法·贪心算法
奋进的小暄1 天前
贪心算法(12))(java)坏了的计算器
java·算法·贪心算法
longlong int3 天前
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
算法·贪心算法
旧物有情4 天前
蓝桥杯历届真题 填充#贪心算法
贪心算法·蓝桥杯
tpoog5 天前
[贪心算法] 加油站 && 单调递增的数字 && 坏了的计算器 && 合并区间 && 无重叠区间
算法·贪心算法
HEUZrx5 天前
算法训练营第二十三天 | 贪心算法(一)
数据结构·python·算法·贪心算法
尘土哥5 天前
贪心算法 力扣hot100热门面试算法题 面试基础 核心思路 背题
算法·leetcode·贪心算法