Quando un avido algoritmo può risolvere il problema del cambio moneta?


24

Dato un insieme di monete con diverse denominazioni e un valore v si desidera trovare il numero minimo di monete necessarie per rappresentare il valore v.c1,...,cn

Ad esempio per il set di monete 1,5,10,20 questo dà 2 monete per la somma 6 e 6 monete per la somma 19.

La mia domanda principale è: quando può essere utilizzata una strategia avida per risolvere questo problema?


Punti bonus: questa affermazione è chiaramente errata? (Da: come capire se l'algoritmo goloso è sufficiente per il problema del cambio minimo di monete? )

Tuttavia, questo documento ha una prova che se l'algoritmo avido funziona per il primo valore più grande denom + secondo valore più grande, allora funziona per tutti loro, e suggerisce di usare semplicemente l'algoritmo greedy vs l'algoritmo DP ottimale per verificarlo. http://www.cs.cornell.edu/~kozen/papers/change.pdf

Ps. nota che le risposte in quel thread sono incredibilmente scadenti, ecco perché ho fatto di nuovo la domanda.


Per il problema dello zaino binario esiste un criterio facilmente formulato: un algoritmo avido risolve il problema se per tutte le denominazioni . Non è così facile per il cambio di monete (zaino con variabili integrali arbitrarie). Hai bisogno di un'esposizione di Magazine, Nemhauser e Trotter? cio>Σj=1io-1cj
Dmitri Chubarov,

2
La dichiarazione nel documento di Dexter Kozen afferma che se l'algoritmo avido concorda con l'ottimale per tutti , allora fornirà una soluzione ottimale per v arbitraria . Non vedo nulla di sbagliato in questa affermazione. v<cn-1+cnv
Dmitri Chubarov,

@Dmitri Chubarov Grazie, ora capisco come funziona il bonus q. È simile alla forte induzione? Per quanto riguarda l'altra tua domanda, vorrei una risposta che dia una soluzione e preferibilmente una prova.
The Unfun Cat

Valuterò la domanda e se nessuno salta dentro, riassumo MNT con alcuni esempi nel fine settimana.
Dmitri Chubarov

Vedi anche questa domanda correlata ; in particolare, l' articolo correlato di Shallit potrebbe essere interessante.
Raffaello

Risposte:


13

Un sistema di monete è canonico se il numero di monete fornite in cambio dall'algoritmo goloso è ottimale per tutti gli importi.

L'articolo D. Pearson. Un algoritmo al tempo polinomiale per il problema del cambiamento. Operations Reseach Letters, 33 (3): 231-234, 2005 offre un algoritmo per decidere se un sistema di monete è canonico, dove n è il numero di diversi tipi di monete. Dall'abstract:O(n3)n

Deriviamo quindi un insieme di valori possibili di che deve contenere il più piccolo controesempio. Ognuno può essere testato con operazioni aritmetiche O ( n ) , dandoci un algoritmo O ( n 3 ) .O(n2)O(n)O(n3)

Il documento è piuttosto corto.

cc

O(n2)n

C'è anche qualche discussione in questa domanda se.math .


Grazie. Vedo che la domanda è molto più complessa di quanto pensassi - immagino sia per questo che non hai pubblicato i criteri attuali? La mia idea che "se tutte le monete sono multiple l'una dell'altra l'algoritmo avido dà un risultato ottimale" era ovviamente troppo semplice.
The Unfun Cat,

Non ho pubblicato i criteri attuali perché non mi ricordavo di persona e non avevo tempo di rileggere il giornale. Ovviamente dovresti sentirti libero di modificare la mia risposta.
Mark Dominus,

Ho letto la risposta e l'articolo un paio di volte, ma non sono riuscito a trovare criteri leggibili dall'uomocanonical coin system . Sarebbe bello se potessi aggiungere un esempio, ad esempio come testare il sistema suggerito1,5,10,20
Il Padrino,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.