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

相关推荐
小汉堡编程7 天前
LeekCode第3767题选择K个任务的最大总分:详细思考过程幽默解析 专门为小白准备
算法·leetcode·贪心算法·编程·小白专用教程
载数而行5208 天前
算法系列2之最短路径
c语言·数据结构·c++·算法·贪心算法
十八岁讨厌编程8 天前
【算法训练营 · 二刷总结篇】贪心算法、图论部分
算法·贪心算法·图论
ValhallaCoder9 天前
hot100-贪心
数据结构·python·算法·贪心算法
散峰而望10 天前
【算法竞赛】堆和 priority_queue
开发语言·数据结构·c++·算法·贪心算法·动态规划·推荐算法
小龙报10 天前
【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.二叉树深度 2.求先序排列
c语言·开发语言·数据结构·c++·算法·贪心算法·动态规划
Renhao-Wan11 天前
Java 算法实践(八):贪心算法思路
java·算法·贪心算法
2501_9469614711 天前
2026年官方放假通知+复工开工时间表
贪心算法·宽度优先
载数而行52011 天前
算法系列1之最小生成树
c语言·数据结构·c++·算法·贪心算法
小范自学编程12 天前
算法训练营 Day31 - 贪心算法 Part05
算法·贪心算法