Algorithm 使贪婪算法在欧元硬币子集上失败
贪婪的找零算法是一种通过选择可用硬币的最高面额来进行找零的算法,直到它达到试图进行的找零量为止。令人惊讶的是,这种算法实际上可以以最有效的方式为美国和欧元硬币面额进行更改 然而,贪婪算法有时无法进行更改。假设我们有面值[25,15,1],并试图赚31美分。贪婪算法将选择25,1,1,1,1,1(7个硬币),而31美分实际上可以作为15,15,1(3个硬币) 我想知道的是,对于包含面额1的欧元硬币子集(欧元硬币列表为1,2,5,10,20,50100200),是否有办法使贪婪算法失败。虽然我可以让贪婪算法在其他值的子集上失败,但我似乎不能让它在欧元硬币的子集上失败Algorithm 使贪婪算法在欧元硬币子集上失败,algorithm,greedy,computer-science-theory,Algorithm,Greedy,Computer Science Theory,贪婪的找零算法是一种通过选择可用硬币的最高面额来进行找零的算法,直到它达到试图进行的找零量为止。令人惊讶的是,这种算法实际上可以以最有效的方式为美国和欧元硬币面额进行更改 然而,贪婪算法有时无法进行更改。假设我们有面值[25,15,1],并试图赚31美分。贪婪算法将选择25,1,1,1,1,1(7个硬币),而31美分实际上可以作为15,15,1(3个硬币) 我想知道的是,对于包含面额1的欧元硬币子集(欧元硬币列表为1,2,5,10,20,50100200),是否有办法使贪婪算法失败。虽然我可以让
一些参考资料说,当最高元素加上最低元素小于第二高元素的两倍时,贪婪算法就会失败(因此在上面的示例中,25+1<15+15),但对于欧元硬币的子集,这是不可能的。尝试用1、20、50来生成60。Oof,那个感觉太明显了!真不敢相信我没抓到它!对于任何想知道这个问题的人来说,贪婪算法会选择50个,然后选择10个1,总共11个硬币,而最有效的方法就是选择3个20。非常感谢@David Eisenstat!我感谢你的帮助!