Algorithm 最小硬币更换问题-最低公倍数

Algorithm 最小硬币更换问题-最低公倍数,algorithm,Algorithm,本视频介绍了min coins的一个实现,以进行更改 我不清楚的地方是面试官从这里开始讨论优化的细节 他建议,要使用面额[25,10,1]制作最小数量的硬币,我们只需要使用算法对50美分以上的数字进行更改,之后我们可以安全地使用25美分。因此,如果这个数字是100.10美元,我们可以使用25美分,直到达到50美分,这时我们需要使用算法来计算精确的值 这对于面额列表[25,10,1]来说是有意义的。为了得到断点数字,他建议使用面值的LCM,在本例中为50 For example 32 - 2

本视频介绍了min coins的一个实现,以进行更改

我不清楚的地方是面试官从这里开始讨论优化的细节

他建议,要使用面额[25,10,1]制作最小数量的硬币,我们只需要使用算法对50美分以上的数字进行更改,之后我们可以安全地使用25美分。因此,如果这个数字是100.10美元,我们可以使用25美分,直到达到50美分,这时我们需要使用算法来计算精确的值

这对于面额列表[25,10,1]来说是有意义的。为了得到断点数字,他建议使用面值的LCM,在本例中为50

For example 
32 - 25 * 1 + 1 * 7 = 8 coins. But with 10 cents we can do 
32 - 10 * 3 + 1 * 2 = 5 coins.
因此,我们不能仅仅假设25美分将被包括在最低数量的硬币计算中

这是我的问题--

假设我们有面值[25,10,5,1],lcm仍然是50。但是对于任何超过25美分的数字,没有最小值的解决方案,因为它不包括25美分

例如

那么,在这种情况下,断点不应该是25美分吗?而不是lcm


谢谢你的回答

他们没有说当输入低于断点时不能使用25。他们建议,一个好的优化方法是使用最高面值,直到我们将数量减少到临界点为止(因为这保证了该部分所需的硬币数量最少)然后切换到资源更密集的算法来计算剩余的所需硬币。

值的LCM在“断点”上提供了一个最小上限,在该点上,我们不能轻率地假设最高面值的硬币是解决方案的一部分。一点数论将证明LCM是一个边界

50是{25,10}的LCM。对于任何大于等于50的金额,任何组合(包括至少5*10)都可以将该元素替换为2*25,从而减少硬币数量。这一论点适用于所有其他硬币及其组合。这种简单的演示在LCM下并不普遍适用;将有数量作为反例


为了使整个算法易于理解和维护,我们只使用了两个阶段:断点上方的最大硬币,以及断点下方的完整DP解决方案——对于大多数应用程序来说,即使是蛮力解决方案对于实际目的来说通常也足够有效。

这一部分很清楚,我的问题是,为什么断点不是25,因为在.25到.50之间没有集合,其中25不在最小硬币集合中。@SushantRao,因为在断点下,硬币分布是特殊的,取决于给定的目标和面额。采访者将“断点”定义为我们从简单算法(除以最大面额)切换到更复杂、动态的程序的点。但这并不是特别的,因为在最小的0.25到0.50之间总是使用0.25的硬币。你能给我举个例子说明这不是真的吗?@SushantRao你自己举了个例子,25在25和50之间不使用25:32:10*3+1*2=5,当面额为[25,10,1]时。这就是为什么他们建议在断点下使用动态程序(因为简单的LCM在断点下不可靠)。您建议的规则可能(至少)适用于特定面额[25,10,5,1]。但是,为一套面额制定规则对我们总体上有什么帮助呢?
32 - 25 * 1 + 5 * 1 + 1 * 2 = 4 coins. 
32 - 10 * 3 + 1 * 2 = 5 coins