ALG"8

ALG"8



228 Rozdział 9. Zaawansowane techniki programowania

• funkcja KOMB polega na najzwyklejszym porównywaniu wyników cząstkowych - jej rolę pełnią instrukcje oznaczone w' komentarzach przez (1) i (2).

W dalszych przykładach nic będziemy już tak dokładnie „rozbierać” procedur, ufamy bowiem, że Czytelnik w miarę potrzeby uczyni to bez trudu samodzielnie.

Obliczenie złożoności obliczeniowej procedury min max2 także nie nastręcza trudności. Dekompozycja problemu jest następująca:

7 (/z) —) 2 + 7]



2 + 271


Jest to znany nam już rozkład logarytmiczny, po rozwiązaniu otrzymamy wynik T(n) e O(n) (patrz §3.7.3).

Obliczenie złożoności praktycznej T(n) tego programu nie należy do trudnych. Jeśli odpowiednio rozpiszemy równanie:

T(n) = 2 l 27’^j = 2 + 2j 2 + 7^ jj = etc.

i założymy, że istnieje pewne k, takie że n=2k, to otrzymalibyśmy takie samo równanie, jak w przypadku procedury min mml. Nie powinno to budzić zdziwienia, biorąc pod uwagę, że w drugiej wersji wykonujemy dokładnie taką samą pracę, jak w poprzedniej - postępując jednak w odmienny sposób.

Czy powyższy wynik nie jest czasem nieco niepokojący? Wygląda bowiem na to, że nowa metoda nie gwarantuje poprawy efektywności algorytmu!

Trafiliśmy już na zapowiedziany we wstępie przypadek problemu, dla którego zastosowanie metody „dziel-i-rządź” nic zmienia w istotny sposób parametrów „czasowych” programu. Cóż, można się przynajmniej łudzić, że ich nie pogarsza! Niestety, w naszym przypadku nie jest to prawdą. Jeśli sięgniemy pamięcią do rozdziału poświęconego rekurencji i jej „ciemnym stronom” powinno być dla nas jasne, że z uwagi na wprowadzenie dodatkowego obciążenia pamięci (stos wywołań rekurencyjnych) i niepomijalnej ilości dodatkowych wywołań reku-rencyjnych zakładana równoważność „czasowa” obu procedur nic jest prawdą.

Przedstawiony powyżej przykład nie jest prawdopodobnie najlepszą reklamą omawianej metody - miał on jednak na celu ukazanie potencjalnych zagrożeń związanych z naiwną wiarą w „cudowne metody”. Są oczywiście przypadki, w których „dziel-i-rządź” czyni wręcz cuda (już zaraz kilka z nich zresztą zaprezentuję...), ale o ich zaistnieniu można się przekonać jedynie wyliczając zło-


Wyszukiwarka

Podobne podstrony:
ALG#6 236 Rozdział 9. Zaawansowane techniki programowania części plecaka przeznaczonej na sery y ’ w
ALG 6 226 Rozdział 9. Zaawansowane techniki programowaniaĆwicz. 9-1 Proszę wyprowadzić wzory tłumacz
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$0 240 Rozdział 9. Zaawansowane techniki programowania „programu wanie dynamiczne " •
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
SQL. Zaawansowane techniki programowania 17.2.6.    Złączenia zewnętrzne i funkcje
84 ROZDZIAŁ 11. FUNKCJE jest rozmiar stosu programu). Cała zalwiwa polega na tym, aby umieć dostać s
Ewolucja technik programowania ■    Funkcje programu Np. obliczanie wartości X ■
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
10 SQL. Zaawansowane techniki programowania 22. Tabele

więcej podobnych podstron