贪婪算法-硬币系统规范的准则

问题描述

给定一个硬币系统,可以用来确定该硬币系统是否规范的条件是什么?我确实读了几篇论文,但没有任何可靠的证据。

我知道贪婪算法仅适用于规范硬币系统。我试图弄清楚硬币= {1、2、3、6}是否是规范的硬币系统。我能知道用来决定这一点的标准是什么吗?

解决方法

有关O(n^3)算法的信息,请参见https://graal.ens-lyon.fr/~abenoit/algo09/coins2.pdf,以回答给定的一组硬币是否规范。

,

对于您的系统,任何数量的最佳更改:

  • 必须使用少于2个1s,否则您可以改用2个。
  • 必须使用少于3 2s,否则您可以使用6s。
  • 必须使用少于2个3s,否则您可以使用6个3s。

此外,在任何数量的最佳变化中,贪婪算法将找到所有6s。因此,如果有一个贪婪算法有误的金额,那么在删除6s之后,仅由其他硬币形成的金额一定是错误的。

任何其他最好的硬币只有2 * 3 * 2 = 12个其他组合,所以只需全部尝试:[],[1],[2],[1,2],[2,2 ],[1,2,2],[3],[1,3],[2,3],[1,3 ]。

在所有这些情况下,贪婪算法都将获胜,因此您的系统是规范的。

您可以对任何硬币系统进行类似的计算。对于完全不同于真实硬币系统的输入来说,它并不总是那么快。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...