C’est une solution de programmation dynamique pour le problème de changement minimum en python à partir de Bryce Boe. Je ne comprends pas ce qui se passe dans le bloc elif en général. Plus précisément, que fait le [:] dans cette ligne
table[i] = table[i - coin][:]
Cela pourrait-il être écrit avec un dictionnaire au lieu de la liste de mémorisation de table?
def solve_coin_change(coins, value):
"""A dynamic solution to the coin change problem"""
table = [None for x in range(value + 1)]
table[0] = []
for i in range(1, value + 1):
for coin in coins:
if coin > i:
continue
elif not table[i] or len(table[i - coin]) + 1 < len(table[i]):
if table[i - coin] != None:
table[i] = table[i - coin][:]
table[i].append(coin)
if table[-1] != None:
print("%d coins: %s" % (len(table[-1]), table[-1]))
else:
print("No solution possible")
coins = [1, 2, 4]
value = 11
solve_coin_change(coins, value)
Réponses:
3 pour la réponse № 1Cette ligne est une copie de la liste table[i - coin]
, pas un alias. Il utilise slice
notation.
table[i] = table[i - coin][:]
Chaque élément est copié au lieu d’attribuer une nouvelle étiquette à table[i - coin]
faire table[i]
un objet indépendant; i / e si vous pouvez modifier soit table[i - coin]
, ou table[i]
indépendamment de l'autre.
2 pour la réponse № 2
C'est la notation de découpage en liste. Dans ce cas, il est utilisé pour créer une copie du tableau [i-coin] au lieu d'utiliser une référence.