贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 [1] 。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解。详情参见贪心算法
硬币问题
根据贪心选择性质:一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。这就是贪心选择性质。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解 。
算法步骤:
(1) 输入货币面值和个数字典V和需要支付的价钱A;
(2) def func(V, A):
(3) V = sorted(V.items(), key=lambda x: x[0], reverse=True) # 将货币面值排序,大的在前面,表示优先使用
(4) total = 0 # 整体用的货币的个数
(5) for i in range(len(V)):
(6) t = min(A // V[i][0], V[i][1]) # 货币需要的个数和拥有个数进行比较
(7) A = A - t * V[i]
(8) total += t