ALG#8

ALG#8



238


Rozdział 9. Zaawansowane techniki programowania

if(i <n)

X[i]=Z/W[i];

I

void main()

I

double Wtn]-{10,12,16), C(n)=(60,70,80), X[n] = {0,0,0 } ; greedy(20, W, C, X) ; double p-0;

for (int i=0; l<n;p+=»X [i ] *CIi), i++)

cout « i « "\t" « W[i) <<"\t" << C(i] « "\l"

<< X|i] << endl;

COUt << "Total:" << p « endl;

I

Okazuje się. ze rozwiązaniem optymalnym jest wektor    w takiej kolej

ności danych, w jakiej są zamieszczone na listingu, gdzie nastąpiła już wstępna „obróbka” wg zacytowanego wcześniej wzoru.

Wniosek z analizy problemu plecakowego powinien być dla Czytelnika następujący: przed przystąpieniem do kodowania programu w naszym ulubionym języku programowania (niekoniecznie w C++), warto poświęcić kilka minut na refleksję, co może znakomicie zwiększyć jakość otrzymanego rozwiązania końcowego.

9.3. Programowanie dynamiczne

Zalety programowania rekurencyjnego uwidaczniają się w prostocie i naturalności formułowania rozwiązań. Niestety rekurencja ma swoje drugie oblicze, o którym łatwo zapomnieć rozważając ją w kategoriach czysto matematycznych. Chodzi oczywiście o to. jak naprawdę formuła rekurencyjna zostanie wykonana przez komputer, ile będzie „kosztowało” zrealizowanie wywołań rekurencyj-nych, powrotów z nich, kombinowanie rezultatów cząstkowych ctc.

Może się zatem okazać, że formalnie szybki algorytm rekurencyjny (rozumując w kategoriach klasy O) będzie znacznie wolniejszy niż to wynika z obliczeń teoretycznych.

Sposobów na zaradzenie temu zjawisku jest kilka (patrz np. rozdział 6). między innymi jest wśród nich... pisanie tylko procedur iteracyjnych!

Wprowadzanie rewolucji w programowaniu w postaci powszechnego zakazu stosowania rekurencji nie jest bynajmniej celem tej książki. Postawmy zatem problem inaczej: czy jest możliwe wykorzystanie korzyści, płynących z rekurencyjnego formułowania rozwiązań, bez używaniu rekurencji?


Wyszukiwarka

Podobne podstrony:
ALG 4 224Rozdział 9. Zaawansowane techniki programowania Należy zdawać sobie bowiem sprawę z lego, i
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$0 240 Rozdział 9. Zaawansowane techniki programowania „programu wanie dynamiczne " •
ALG$2 242 Rozdział 9, Zaawansowane techniki programowania miejscach), chociaż w zoptymalizowanej wer
namespace ConsoleApplicationl{ class Program{ static void Main(string[] args){ // tworzenie punktu P
67
ALG 3 Rozdział 9Zaawansowane techniki programowania Rozdziały poprzednie (szczególnie 2 i 5) dostarc
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

więcej podobnych podstron