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

相关推荐
@––––––21 小时前
力扣hot100—系列4-贪心算法
算法·leetcode·贪心算法
Hello.Reader2 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
pp起床2 天前
贪心算法 | part02
算法·leetcode·贪心算法
pp起床5 天前
贪心算法 | part01
算法·贪心算法
散峰而望6 天前
【算法竞赛】树
java·数据结构·c++·算法·leetcode·贪心算法·推荐算法
池央6 天前
贪心算法-递增的三页子序列
算法·贪心算法
池央7 天前
贪心-最长递增子序列
算法·贪心算法
金枪不摆鳍7 天前
算法-贪心算法
算法·贪心算法
池央7 天前
贪心算法-摆动序列
算法·贪心算法
芒克芒克7 天前
LeetCode 跳跃游戏 II 最优解法:贪心算法
leetcode·游戏·贪心算法