¿Cuándo puede un algoritmo codicioso resolver el problema del cambio de monedas?

24

Dado un conjunto de monedas con diferentes denominaciones un valor v desea encontrar la menor cantidad de monedas necesarias para representar el valor v.do1,...,donorte

Por ejemplo, para el conjunto de monedas 1,5,10,20, esto da 2 monedas por la suma 6 y 6 monedas por la suma 19.

Mi pregunta principal es: ¿cuándo se puede utilizar una estrategia codiciosa para resolver este problema?


Puntos de bonificación: ¿Esta afirmación es simplemente incorrecta? (De: ¿Cómo saber si el codicioso algoritmo es suficiente para el problema de cambio mínimo de monedas? )

Sin embargo, este documento tiene una prueba de que si el algoritmo codicioso funciona para el primer valor más grande y el segundo valor más grande, entonces funciona para todos ellos, y sugiere simplemente usar el algoritmo codicioso frente al algoritmo DP óptimo para verificarlo. http://www.cs.cornell.edu/~kozen/papers/change.pdf

PD. tenga en cuenta que las respuestas en ese hilo son increíblemente malas, es por eso que hice la pregunta nuevamente.

El gato no divertido
fuente
Para el problema de la mochila binaria hay un criterio fácil de formular: el algoritmo codicioso resuelve el problema si para todas las denominaciones . No es tan fácil para el cambio de monedas (mochila con variables integrales arbitrarias). ¿Necesita una exposición de Magazine, Nemhauser y Trotter? doyo>Σj=1yo-1doj
Dmitri Chubarov
2
La declaración en el artículo de Dexter Kozen dice que si el algoritmo codicioso está de acuerdo con el óptimo para todos , entonces dará una solución óptima para v arbitraria . No veo nada malo con esta declaración. v<cn1+cnv
Dmitri Chubarov
@Dmitri Chubarov Gracias, ahora entiendo cómo funciona la bonificación q. ¿Es similar a una fuerte inducción? En cuanto a su otra pregunta, me gustaría una respuesta que ofrezca una solución y preferiblemente una prueba.
The Unfun Cat
Votaré la pregunta y, si nadie interviene, resuma MNT con algunos ejemplos durante el fin de semana.
Dmitri Chubarov
Ver también esta pregunta relacionada ; en particular, el artículo vinculado de Shallit puede ser de interés.
Rafael

Respuestas:

13

Un sistema de monedas es canónico si la cantidad de monedas otorgadas en cambio por el algoritmo codicioso es óptima para todas las cantidades.

O(norte3)norte

O(norte2)O(norte)O(norte3)

El papel es bastante corto.

dodo

O(norte2)norte

También hay una discusión en esta pregunta matemática .

Mark Dominus
fuente
Gracias. Veo que la pregunta es mucho más complicada de lo que pensaba. Supongo que es por eso que no publicaste los criterios reales. Mi idea de que "si todas las monedas son múltiplos entre sí, el codicioso algoritmo da un resultado óptimo" era obviamente demasiado simple.
The Unfun Cat
No publiqué los criterios reales porque no recordaba de improviso y no tuve tiempo de releer el documento. Por supuesto, deberías editar mi respuesta.
Mark Dominus el
Leí la respuesta y el artículo un par de veces, pero no pude encontrar criterios de lectura humanacanonical coin system . Sería genial si pudieras agregar un ejemplo, es decir, cómo probar el sistema sugerido1,5,10,20
The Godfather