Académique Documents
Professionnel Documents
Culture Documents
Dado un conjunto de n tipos de monedas, cada una con valor di , y dada una cantidad p,
encontrar el nmero mnimo de monedas que tenemos que usar para obtener esa cantidad.
Por ejemplo, si se tienen monedas de 1, 2, 5 y 10 pesos y se deben devolver 28 pesos,
entonces la cantidad mnima de monedas a devolver es cinco (dos de 10 pesos, una de 5
pesos, una de 2 pesos y una de 1 peso). Es fcil notar que si no se tienen monedas de 1
peso, este problema no siempre se puede resolver (por ejemplo, no se puede dar cambio de
3 pesos usando slo monedas de 2, 5 y 10 pesos).
Podemos hacer uso de un algoritmo vido para minimizar, dado un sistema monetario, el
nmero de monedas necesarias para reunir una cantidad. Sin embargo, dicho algoritmo no
funciona cuando los tipos de monedas eran, por ejemplo, de 1, 5, 10, 25 y 12 unidades, ya
que no obtendramos necesariamente la descomposicin ptima. Dado que el algoritmo
vido para este problema falla en algunas ocasiones, nos planteamos si puede resolverse
utilizando Programacin Dinmica de forma que la solucin sea satisfactoria en todos los
casos.
Para el problema de las monedas con programacin dinmica se necesita crear
un algoritmo que permita a una mquina expendedora devolver el cambio mediante el
menor nmero de monedas posible.
Pero para poder implementar una solucin con programacin dinmica, el problema debe
cumplir con los 2 hallmarks que se requiere.
Algoritmo
Para cada casilla de la tabla hacer:
1. Si el valor de la moneda actual es mayor que la cantidad, se paga con el resto de
monedas, es decir, se toma el resultado de la casilla superior.
2. Si el valor de la moneda actual es menor o igual que la cantidad, se toma el mnimo
entre:
2.1. Pagar con el resto de monedas, tomando el resultado de la casilla superior.
2.2. Pagar con una moneda del tipo actual y el resto con el resultado que se hubiera
obtenido al pagar la cantidad actual a la que se le ha restado el valor de la moneda actual.
3. Tomar como resultado el valor de la ltima celda.
Pseudocdigo
Cmo calcular cuntas monedas de cada tipo deben usarse, es decir la solucin (x1 ,
x2 , ..., xn )?
Se usa otra tabla de decisiones tomadas:
Para estudiar el coste del algoritmo calculamos el tamao de la tabla que hay que construir:
N x (L + 1). Como las operaciones aritmticas involucradas son de coste constante, el
tiempo de ejecucin est en O(NL).