使贪心算法在欧元硬币的子集上失败
Make Greedy Algorithm Fail on Subset of Euro Coins
贪心找零算法是一种通过选择可用硬币的最高面额来找零的算法,直到它达到它试图找零的数量。令人惊讶的是,该算法实际上适用于以最有效的方式对美国和欧元硬币面额进行找零!
然而,贪心算法有时会因找零而失败。假设我们有面额 [25,15,1] 并且试图赚取 31 美分。贪婪算法会选择 25,1,1,1,1,1,1(7 个硬币),而 31 美分实际上可以变成 15,15,1(3 个硬币)。
我想知道是否有办法让包含面额的欧元硬币子集(欧元硬币列表为 1,2,5,10,20,50,100,200)的贪婪算法失败1. 虽然我可以使贪心算法在具有其他值的子集上失败,但我似乎无法让它在欧元硬币的子集上失败。
一些资源说贪心算法会在最高元素加上最低元素小于第二高元素的两倍时失败(所以在上面的例子中,25 + 1 < 15 + 15),但是有无法通过一部分欧元硬币实现这一目标。
试着用 1, 20, 50 凑成 60。
贪心找零算法是一种通过选择可用硬币的最高面额来找零的算法,直到它达到它试图找零的数量。令人惊讶的是,该算法实际上适用于以最有效的方式对美国和欧元硬币面额进行找零!
然而,贪心算法有时会因找零而失败。假设我们有面额 [25,15,1] 并且试图赚取 31 美分。贪婪算法会选择 25,1,1,1,1,1,1(7 个硬币),而 31 美分实际上可以变成 15,15,1(3 个硬币)。
我想知道是否有办法让包含面额的欧元硬币子集(欧元硬币列表为 1,2,5,10,20,50,100,200)的贪婪算法失败1. 虽然我可以使贪心算法在具有其他值的子集上失败,但我似乎无法让它在欧元硬币的子集上失败。
一些资源说贪心算法会在最高元素加上最低元素小于第二高元素的两倍时失败(所以在上面的例子中,25 + 1 < 15 + 15),但是有无法通过一部分欧元硬币实现这一目标。
试着用 1, 20, 50 凑成 60。