Ich habe einige dynamische Programmierprobleme überprüft, und ich hatte harte Zeit, meinen Kopf um einige Code in Bezug auf die Suche nach der kleinsten Anzahl von Münzen zu ändern.Dynamische Programmierung Optimaler Münzwechsel
Angenommen, wir haben Münzen im Wert von 25, 10 und 1, und wir machen eine Änderung für 30. Greedy würde 25 und 5 (1) zurückgeben, während die optimale Lösung 3 (10) zurückgeben würde. Hier ist der Code aus dem Buch zu diesem Problem:
def dpMakeChange(coinValueList,change,minCoins):
for cents in range(change+1):
coinCount = cents
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
minCoins[cents] = coinCount
return minCoins[change]
Wenn mir jemand meinen Kopf wickeln um diesen Code helfen könnte (Linie 4 ist, wo ich beginnen verwirrt zu bekommen), das wäre toll. Vielen Dank!
Was ist 'minCoins'? Wie dem auch sei, der Versuch, dies im Allgemeinen zu lösen, ist gleichbedeutend mit dem Rucksackproblem (oder vielleicht noch schlimmer), so dass die Suche nach der optimalen Lösung auf jeden Fall sehr schnell mühsam wird. Die Lösung hängt wahrscheinlich von den Münzen ab, die Sie verwenden können. – Bakuriu
Schreiben 'für Variable in [l für l in list_comprehension]' ist subjektiv schlecht, nur weil ich es nicht viel gesehen habe ... – Droogans
Es ist peinlich, aber nicht wirklich so schrecklich. Es verengt nur die Liste. Das gleiche hätte mit einem "if" und einem "continue" in der nächsten Zeile erreicht werden können, aber whatevs. – acjay