Lección
La teoría — Cambio de monedas: método voraz frente a solución óptima
El problema del cambio de monedas busca el menor número de monedas que suma un importe, a partir de un conjunto de denominaciones y con una cantidad ilimitada de cada una. El algoritmo voraz toma la moneda más grande que cabe y repite el proceso. La programación dinámica resuelve el problema exactamente calculando antes todos los importes menores: M(0) = 0 y M(a) = 1 + min M(a − c) para las monedas c ≤ a. Un sistema en el que el método voraz es óptimo para cualquier importe se llama canónico.
Qué significa cada símbolo
M(a)- el menor número de monedas que suma el importe a; es el número de la celda a de la tabla
G(a)- el número de monedas que usa el método voraz para a
cₘ, cₘ₋₁- las monedas mayor y segunda mayor; si existe un primer importe donde falla el método voraz, es menor que su suma
- Supone
- Se supone que hay una cantidad ilimitada de cada moneda, que todas las denominaciones son números enteros y que el único coste es el número de monedas. Una caja que se ha quedado sin florines plantea otro problema. La cota exige una moneda de 1; sin ella, algunos importes no pueden pagarse y el método voraz puede quedarse corto incluso cuando la tabla sí encuentra una combinación.
Problema resuelto al detalle
-
¿Qué tercera moneda puede acompañar a 1 y 5? 3 pasos
Un país tiene monedas de 1 y 5 y quiere añadir una tercera, d, comprendida entre 6 y 30. ¿Para qué valores de d será siempre óptimo el método voraz? La página prueba los sistemas de uno en uno, pero la regla de Kozen y Zaks para tres monedas permite decidir los 25 a la vez. Pulsa 1, 3, 4 para aplicar primero la regla a un sistema que la página ya ha comprobado.
Abre este problema en la herramienta
-
La regla para monedas 1 < c < d es esta: escribe d = qc + r, con 0 ≤ r < c. El sistema falla en algún importe si y solo si 0 < r < c − q. Para 1, 3, 4, tenemos d = 4 = 1 × 3 + 1; por tanto, q = 1 y r = 1, y se cumple 0 < 1 < 2. El sistema falla, y la página encuentra el primer fallo en 6:
-
Ahora c = 5, así que d = 5q + r y la condición es 0 < r < 5 − q. Cuanto mayor es q, menos valores posibles quedan para r:
-
Si q = 1 (d de 6 a 9), r puede ser 1, 2 o 3, de modo que fallan d = 6, 7 y 8. Si q = 2 (de 10 a 14), r = 1 o 2: fallan 11 y 12. Si q = 3 (de 15 a 19), solo sirve r = 1: falla 16. A partir de q = 4, 5 − q vale 1 o menos y ningún r satisface la condición:
Respuesta
Fallan seis valores: 6, 7, 8, 11, 12 y 16. Los otros diecinueve funcionan, incluidos todos los valores de d entre 17 y 30. Introduce
1, 5, 12para observar uno de los seis casos: el método voraz paga 15 como 12 + 1 + 1 + 1, con cuatro monedas, mientras que bastan tres monedas de 5. -
Ruta de aprendizaje
Por qué un algoritmo es correcto
Referencias (3)
- The bound the page draws as a dashed line and settles every system with: if greedy is ever beaten, the smallest amount where it is beaten lies strictly between c₃ + 1 and cₘ + cₘ₋₁; the three-coin rule the worked problem uses; the {1, 3, 4} example and the US system 1, 5, 10, 25, 50, 100 as canonical: D. Kozen and S. Zaks, "Optimal bounds for the change-making problem." Theoretical Computer Science 123(2), 1994, pp. 377-388. DOI 10.1016/0304-3975(94)90134-1
- The pre-decimal coins and their values in pence (threepence, sixpence, shilling of 12d, florin of two shillings, half-crown of two shillings and sixpence, crown of five shillings), and the halfpenny's end as legal tender on 31 July 1969: Wikipedia contributors, "£sd", Wikipedia, The Free Encyclopedia, accessed 3 October 2026.
- Which coins made up the circulating set at the end, as the Royal Mint itself issued them in 1970: half-crown, florin, shilling, sixpence, threepence, penny and halfpenny: The Royal Mint, "1970 Pre-Decimal UK Proof Set", product description, accessed 3 October 2026.