Plecakdynam, Plecakdynam




Rozwiązanie metodą tzw. programowania dynamicznego, problemu plecakowego

Programowanie dynamiczne - rozwiązywanie kolejnych pod-problemów i zapamiętywanie tych rozwiązań.

Problem plecakowy

Dane: n - liczba przedmiotów
P - pojemność plecaka
o1, o2, . . . , on - pojemności kolejnych przedmiotów
c1, c2, . . . , cn - ceny kolejnych przedmiotów
Zadanie: zapakować plecak (nie przekraczając jego pojemności) dostępnymi przedmiotami
tak, by łączna cena zapakowanych przedmiotów była jak największa.


Rozwiązanie
Tablica częściowych rozwiązań:
0x08 graphic
0x01 graphic
aij = optymalna cena zapakowania pojemności j przedmiotami ze zbioru {1, . . . ,i}
- podproblem -

Pierwszy wiersz tej tablicy możemy łatwo wypełnić:
dla j=1,2, . . ., P jeżeli o1 ≤ j to a1j = c1 w przec. przyp. a1j = 0





0x08 graphic
0x01 graphic
Załóżmy, że wytłuszczony rejon tablicy a jest już policzony. Chcemy teraz policzyć aij.
Mamy dwie opcje na możliwą wartość aij:

• wersja z przedmiotem nr. i
jeżeli j>oi to opcja1 = ai-1j-oi + ci w przec przyp.
jeżeli j=oi to opcja1 = ci w przec. przyp.
jeżeli j<oi to opcja1 = 0

• wersja bez przedmiotu nr. i
opcja2 = ai-1j

Wybieramy lepszą z tych dwóch opcji:

aij = max( opcja1, opcja2 )








Algorytm:
// wypełniamy pierwszy wiersz tablicy a
dla j = 1, 2, . . . , P
jeżeli o1≤j to a1j = c1 w przec. przyp. a1j = 0
dla i = 2, 3, . . . , n // dla każdego wiersza
dla j = 1, 2, . . . , P // przebiegamy wszystkie pozycje w tym wierszu
{ jeżeli j > oi to opcja1 = ai-1j-oi + ci w przec. przyp.
jeżeli j == oi to opcja1 = ci w przec.przyp. opcja1 = 0;
opcja2 = ai-1j;
aij = max( opcja1, opcja2 );
};
wypisz wartość optymalnego zapakowania plecaka: anP .



koniec

12...i...n

1 2 . . . j . . . . P

a11 . . . . . . a1j . . . a1P
a21 . . . . . . a2j . . . a2P
. .
. .
. .
. .
ai1 . . . . . . . aij. . . . .aiP
. .
. .
. .
an1 . . . . . . anj . . . anP

Jednostki pojemności

Numery przedmiotów

12...i.
.n

1 2 . . . j . . . . P

a11 . . . . . . a1j . . . a1P
a
21 . . . . . . a2j . . . a2P
. . .
. . .
. . .
. a
i-1j .
a
i1 . . . . . aij-1 aij. . . . .aiP
. .
. .
. .
an1 . . . . . . anj . . . anP

Jednostki pojemności

Numery przedmiotów



Wyszukiwarka