私は、Project Euler でいくつかの問題/演習に取り組んでおり、Python を使用していくつかの最適なアルゴリズムとプログラミングのイディオムを練習/学習することを望んでいます。
合計が 100 になるように、少なくとも 2 つの値を使用してすべての一意の組み合わせを見つけるように要求する問題に遭遇しました。
貪欲なアルゴリズムについては聞いたことがありましたが、理解も使用もしていませんでした。やってみようと思いました。これが適切な方法であるかどうかはまだわかりません。
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
これがオイラーの問題を解決する方法ではないことはわかっていますが、このアルゴリズムを使用する最適な方法を理解し、学びたいと思っていました。私の質問は、これは適切な貪欲なアルゴリズムと見なされるでしょうか? そうでない場合、私は何を間違っていますか。正しい場合、最適化を改善できますか?