2017-05-15 1 views
0

Dans une conférence précédente, on nous a dit que l'utilisation d'une approche gourmande pour résoudre un problème de changement ne fonctionnerait pas toujours.Changement: Programmation dynamique

Un exemple a été donné comme suit:

Nous voulons atteindre n = 14, et nous avons trois pièces de différentes valeurs: d1 = 1, d2 = 7, d3 = 10. En utilisant l'approche gloutonne cela nous conduirait à 10 + 1 + 1 + 1 + 1 (5 pièces).

On a dit que l'approche d'un problème dynamique permettrait de résoudre ce problème avec précision. J'ai essayé de travailler dehors, mais il est revenu à 5.

On suppose F détient le nombre de pièces nécessaires pour faire un montant

F[14] = min {F[14 – 1] , F[14 – 7], F[14 – 10]} + 1 

     = F[14 – 10] + 1 = 4 + 1 = 5 

Cela montre encore une fois que nous avons besoin de 5 pièces, lorsque cela peut être clairement fait en utilisant 2 pièces (7 + 7).

Ce qui donne? Merci.

+1

F [14] = min {F [14 - 1], F [14-7], F [14-10]} + 1 = F [14 - 10] + 1 = 4 + 1 = 5 cela ne devrait-il pas être F [14] = min {F [14 - 1], F [14 - 7], F [14 - 10]} + 1 = F [14 - 7] + 1 = 1 + 1 = 2 –

Répondre

1

Vous avez supposé que min {F[14 – 1] , F[14 – 7], F[14 – 10]}=F[14-10] lorsque ce n'est pas le cas. Le minimum est en fait F[14-7]=1 et donc l'optimum est 2

+0

Pourquoi est-ce? Je pensais que le min était une fonction qui a pris le plus petit résultat. Dans ce cas, 14 - 10 est le plus petit nombre, plus petit que 14 - 7. Qu'est-ce que je ne comprends pas? Merci – Pete

+1

@Pete La fonction minimum obtient la plus petite valeur de F, PAS l'argument à l'intérieur de F. F [13] signifie le plus petit nombre de pièces à changer pour 13. Cela serait d'en obtenir un de d3, 3 de d1, pour un total de 4 pièces. F [14-7] = F [7] est le nombre minimum de pièces pour faire le changement pour 7. dans ce cas, c'est une seule pièce, d2. Pour F [14-10] = F [4]. Vous avez besoin de 4 à partir de d1 pour faire le changement à 4. Donc le minimum de tous ces éléments est F [7], PAS F [14-10] – AspiringMat