L'algoritmo di programmazione dinamica per riempire in modo ottimale uno zaino funziona bene nel caso di uno zaino. Ma esiste un algoritmo efficiente ed efficace che riempirà in modo ottimale 2 zaini (le capacità possono essere disuguali)?Modo ottimale di riempire 2 zaini?
Ho provato i seguenti due approcci e nessuno di essi è corretto.
- Prima riempire il primo zaino utilizzando l'algoritmo DP originale per riempire uno zaino e quindi riempire l'altro zaino.
- Prima riempire uno zaino della misura W1 + W2 e quindi dividere la soluzione in due soluzioni (dove W1 e W2 sono le capacità dei due zaini).
dichiarazione del problema (vedi anche Knapsack Problem su Wikipedia):
Dobbiamo riempire lo zaino con una serie di articoli (ogni elemento ha un peso e un valore) in modo da massimizzare il valore che possiamo ottenere dagli articoli pur avendo un peso totale inferiore o uguale alla dimensione dello zaino.
Non è possibile utilizzare un elemento più volte.
- Non è possibile utilizzare una parte di un articolo. Non possiamo prendere una frazione di un oggetto. (Ogni oggetto deve essere completamente incluso o meno).
Ho pensato alla stessa ricorrenza, ma penso che abbiamo un problema qui in un caso speciale. Supponiamo che 'dp [w1 - a [i] .weight, w2] + a [i] .gain' e 'dp [w1, w2 - a [i] .weight] + a [i] .gain' siano uguali. Allora come spezzerai i legami? Questo ha conseguenze sulla soluzione come se avessimo articoli di pesi 2,5,4 e valori 2,5,4 rispettivamente e due zaini di pesi 5 e 6. Quindi applicando questo algoritmo, dovremo scegliere se mettere l'oggetto con il peso 2 nel primo zaino o nel secondo. Questa decisione avrà naturalmente conseguenze sulla nostra soluzione ottimale corretta. –
@NikunjBanka - Non penso che sia un problema. Metterai l'oggetto con peso due nel primo zaino su 'dp [2, 0]' e nel secondo zaino su 'dp [0, 2]' - così manterrai entrambe le possibilità. Ti suggerisco di provare a implementare l'algoritmo e vedere come si comporta. Se non puoi per qualche motivo, fammelo sapere e ti fornirò una implementazione. – IVlad
@IVlad, non ho capito come funziona la tua equazione. se dp [w1, w2] chiama a dp [w1, w2] .what era lo slot dp [w1, w2] inizializzato su? anche io voglio chiedere se l'elenco degli elementi (matrice a nella tua risposta) è ordinato –