我一直在研究 Project Euler 的一些问题/练习,希望能够使用 python 练习/学习一些最佳算法和编程习语。
我遇到了一个问题,它要求使用至少两个值总和为 100 来查找所有唯一组合。在研究这个问题时,我遇到了一些人提到硬币问题和贪心算法,这就是这个问题的意义所在。
我之前听说过贪心算法,但从未理解或使用过它。我想我会试一试。我仍然不确定这是否是正确的做法。
def greedy(amount):
combos = {}
ways = {}
denominations = [1,5,10,25]
## work backwards? ##
denominations.reverse()
for i in denominations:
## check to see current denominations maximum use ##
v = amount / i
k = amount % i
## grab the remainder in a variable and use this in a while loop ##
ways.update({i:v})
## update dictionarys ##
combos.update({i:ways})
while k != 0:
for j in denominations:
if j <= k:
n = k/j
k = k % j
ways.update({j:n})
combos.update({i:ways})
ways = {}
return combos
我知道这不是解决欧拉问题的方法,但我想了解和学习使用该算法的最佳方法。我的问题是,这会被认为是一个适当的贪心算法吗?如果不是我做错了什么。如果正确,我可以改进优化吗?