ALG$0

ALG$0



240 Rozdział 9. Zaawansowane techniki programowania

„programu wanie dynamiczne "

•    mając dane rozwiązanie problemu elementarnego, wylicz na jego podstawie

•    problem wyższego rzędu i kontynuuj obliczenia, aż do otrzymania rozwiązania rzędu N.

Nowa technika ma pewien posmak optymalności: raz znalezione rozwiązanie pewnego pod-problemu zostaje zarejestrowane w tablicy i w miarę potrzeb jest później wykorzystywane. Nie był to bynajmniej przypadek metody „dziel-i-rządź”, która pozwalała na wielokrotne wyliczanie tych samych wartości.

Nowo poznaną metodę zilustrujemy dwoma przykładami o różnym stopniu skomplikowania, zaczynając od... doskonale nam zimnego problemu obliczania elementów ciągu Fibonacciego (patrz §2.4.1). Przypomnimy (po raz kolejny) definicję tego ciągu:

M 0) = l

fih( n) = f(n1) + fib(n) gdzie n>2

Rozwiązanie rekurencyjne testowaliśmy już kilkakrotnie, spróbujmy teraz zaadoptować rekurencyjną procedurę obliczania tego ciągu do podanych powyżej zasad konstrukcji programu wykorzystujących programowanie dynamiczne:

koncepcja - wzór rekurencyjny już mamy, pozostaje tylko zadeklarować tablicę fibfn] do składowania obliczanych wartości;

inicjacja - początkowymi wartościami w tablicy fib będą oczywiście warunki początkowe:Jih/0J=l ifih[J]=l\

progresja algorytmu - ten punkt zależy ściśle od wzoru rekurencyjnego, który implementujemy przy pomocy tablicy. W naszym przypadku wartość\\fib[ij w tablicy (dla i < 2) jest suma dwóch poprzednio obliczonych wartości: fibfi-lj i fib[i-2], Obie te wartości zostały zapamiętane w tablicy, zupełnie jak w programie rekurencyjnym, który zapamiętuje je... na stosie wywołań rekurencyjnych.

Zauważmy jednak, że tej analogii nie można posunąć zbyt daleko, bowiem nasze postępowanie ma charakter sekwencji instrukcji elementarnych bez dodatkowych wywołań proceduralnych, tak jak to czyni każdy program re-kurencyjny.

Powyższe uwagi są zilustrowane na rysunku 9-2.


Wyszukiwarka

Podobne podstrony:
ALG 6 226 Rozdział 9. Zaawansowane techniki programowaniaĆwicz. 9-1 Proszę wyprowadzić wzory tłumacz
ALG 8 228 Rozdział 9. Zaawansowane techniki programowania • funkcja KOMB polega na najzwyklejszym po
ALG#0 230 Rozdział 9. Zaawansowane techniki programowania Koszt wyliczenia jednego elementu macierzy
ALG#2 232 Rozdział 9. Zaawansowane techniki programowania I 9 pozornie całą żądaną pamięć, faktyczni
ALG#4 234 Rozdział 9. Zaawansowane techniki programowania problemu. Mimo iź wersje iteracyjne i reku
ALG#6 236 Rozdział 9. Zaawansowane techniki programowania części plecaka przeznaczonej na sery y ’ w
ALG$2 242 Rozdział 9, Zaawansowane techniki programowania miejscach), chociaż w zoptymalizowanej wer
ALG 3 Rozdział 9Zaawansowane techniki programowania Rozdziały poprzednie (szczególnie 2 i 5) dostarc
ALG 4 224Rozdział 9. Zaawansowane techniki programowania Należy zdawać sobie bowiem sprawę z lego, i
ALG#8 238Rozdział 9. Zaawansowane techniki programowania if(i <n) X[i]=Z/W[i]; I void main() I do
Księgarnia PWN: Joe Celko - SQL. Zaawansowane techniki programowaniaSpis treści O
12 SQL. Zaawansowane techniki programowania 28.    Drzewa i hierarchie w języku
14 SQL. Zaawansowane techniki programowania 33. Optymalizowanie języka
4 SQL. Zaawansowane techniki programowania 2.
6 SQL. Zaawansowane techniki programowania 7.4.    Numery
SQL. Zaawansowane techniki programowania 17.2.6.    Złączenia zewnętrzne i funkcje
10 SQL. Zaawansowane techniki programowania 22. Tabele
ALG6 36 Rozdział 2. Rekurencja każemy. W rozdziale 9 zostanie omówiona ciekawa technika programowan

więcej podobnych podstron