Lista zadań na zajęcia, semestr letni 2013/2014, zestaw XII

Transkrypt

Lista zadań na zajęcia, semestr letni 2013/2014, zestaw XII
Lista zadań na zajęcia, semestr letni 2013/2014, zestaw XII
Programowanie dynamiczne
Przemysław Krysztowiak, [email protected]
Zadanie 1. Zapisz algorytm programowania dynamicznego do obliczania n-tego wyrazu ciągu Padovana:
P1 = 1, P2 = 1, P3 = 1, Pn = Pn−2 + Pn−3 .
Zadanie 2. Zapisz algorytm programowania dynamicznego do obliczania
n−1
n
n
. Wzór rekurencyjny: nk = n−1
k−1 +
k , n > k > 0, 0 = n = 1.
7
3
n
k
oraz rozpisz obliczenie dla
Zadanie 3. Zapisz algorytm programowania dynamicznego do obliczania najdłuższego rosnącego podciągu w danym ciągu liczb.
(a) Zilustruj działanie tego algorytmu na ciągu 2, 10, 3, 13, 4, 11, 6, 15, 2, 9, 7, 15, 4, 12, 8, 15.
Zadanie 4. Rozpisz działanie poniższego algorytmu dla problemu najdłuższego wspólnego podciągu
dwóch ciągów, na danych: alamakota, alkomat.
LCS(X[1..m], Y[1..n])
C := [0..m, 0..n]
for i := 0 to m C[i, 0] = 0
for j := 0 to n C[0, j] = 0
for i := 1 to m
for j := 1 to n
if X[i] = Y[j] then C[i, j] := C[i − 1, j − 1] + 1
else C[i, j] := max(C[i, j − 1], C[i − 1, j])
return C[m, n]
Zadanie domowe
1. Rozważmy dyskretny problem plecakowy: dane: n przedmiotów o wagach w1 , . . . , wn i wartościach
v1 , . . . , vn , pojemność plecaka W ; cel: najbardziej wartościowa kolekcja mieszcząca się w plecaku. Niech
K(w, j) = największa wartość mieszcząca się w plecaku o pojemności w, spośród przedmiotów 1, . . . , j.
Wówczas K(W, n) można wyznaczyć następującym algorytmem programowania dynamicznego:
K(0, j) = 0, K(w, 0) = 0 dla wszystkich j, w.
for j = 1 to n:
for w = 1 to W :
if wj > w: K(w, j) = K(w, j − 1)
else: K(w, j) = max{K(w, j − 1), K(w − wj , j − 1) + vj }
return K(W, n)
(a) Rozpisz działanie tego algorytmu (tabelę rozwiązań podproblemów) dla zestawu danych:
Przedmiot Waga Wartość
1
5
5
2
3
7
3
6
9
, pojemność plecaka: 17.
4
3
4
5
4
8
6
7
11
2. Dla danych z zadania 3 (oznaczmy ten ciąg przez S) znajdź najdłuższy rosnący podciąg używając
algorytmu z zadania 4, wykonując go na ciągach S1 , S2 , gdzie S1 = S, zaś S2 jest ciągiem S po posortowaniu.
Wyrażam zgodę na drukowanie przez studentów i pracowników WMiI UMK treści zawartej w niniejszym pliku.