You are on page 1of 30

Podstawy analizy algorytmw

Mwic bardzo nieformalnie, algorytm to pewien opis sposobu postpowania, ktre prowadzi do osignicia zamierzonego celu. Samo sowo "algorytm" pochodzi od nazwiska matematyka arabskiego Abu Ja'far Mohammed ibn Musa al Khowarizmi, ktry y na przeomie VIII i IX wieku na terenie obecnego Iraku. To nazwisko pisane po acinie przyjo posta Algorismus.

Podstawy analizy algorytmw

Kady algorytm skada si ze skoczonej sekwencji krokw, z ktrych kady wykonuje jedn lub wicej operacji. Oczywicie, kada taka operacja musi by jednoznacznie okrelona . Inn wan cech kadej operacji jest jej skoczono rozumiana w tym sensie, e kady krok winien by wykonywalny przez czowieka lub maszyn w skoczonym czasie.

Podstawy analizy algorytmw

Badania algorytmw mona rozpatrywa z co najmniej czterech rnych punktw widzenia widzenia: :
1. W jaki sposb tworzy algorytmy? Pytanie to dotyczy inwentyki algorytmw. Jest to sztuka, ktra zapewne nigdy nie zostanie w peni zautomatyzowana. Tym niemniej jednym z celw dodatkowych tego wykadu jest dokonanie przegldu rnych technik programowania, ktre okazay si skuteczne w dotychczasowych implementacjach.

Podstawy analizy algorytmw

2. W jaki sposb przedstawia algorytmy? Jak wiadomo, istnieje wiele metod, poczynajc od opisu sownego do programw komputerowych, ktre s sformalizowanymi opisami algorytmw w konkretnych jzykach programowania. Na pewno mona odrzuci zapis w postaci sieci dziaa jako zbyt rozwleky. Obecnie wikszo algorytmw publikuje si w jzyku, ktry nazwalimy Pseudo Pascalem.

Podstawy analizy algorytmw

3. W jaki sposb analizowa algorytmy? Wykonywanie algorytmu na komputerze powoduje angaowanie jego zasobw, takich jak: czas, pami, procesory. Analiza algorytmw dotyczy problemu okrelenia, ile czasu, ile pamici, wreszcie ile procesorw wymaga bdzie dany program oraz odpowiedzi na pytanie: czy wykonuje si on poprawnie i daje precyzyjne wyniki. Typowym zagadnieniem jest kwestia zachowania si algorytmu w najlepszym, rednim i najgorszym przypadku danych.

Podstawy analizy algorytmw

4. W jaki sposb testowa programy realizujce algorytmy? Przez testowanie rozumiemy tutaj zarwno uruchamianie, jak i profilowanie. Uruchamianie to prba wykonania programu na przykadowych danych dla stwierdzenia, czy daje on poprawne wyniki i jeli nie poprawienie go. Uruchamianie moe ewentualnie wykaza obecno bdw, a nie ich brak. Profilowanie jest procesem wykonywania poprawnego programu na pewnych interesujcych nas zestawach danych oraz mierzenie czasu i pamici zajmowanej przez ten program. Oczywicie, pojawia si tu pytanie, na jakich danych naley testowa programy.

Podstawy analizy algorytmw

Czynniki, ktre naley bra pod uwag przy numerycznym rozwizywaniu kadego problemu problemu: :
a) Struktury danych danych. . Jakie wielkoci s danymi rozwizywanego zadania? Jakie przestrzenie danych i wynikw najlepiej odpowiadaj sensowi fizycznemu rozwaanego problemu? Jaka jest zoono pamiciowa struktur danych? b) Efektywno. Co wiemy o zoonoci obliczeniowej naszego problemu? Jaka jest efektywno metod rozwizujcych dany problem? Czy rozpatrywany algorytm jest optymalny, tzn. czy miara kosztu jego wykonania jest rwna zoonoci problemu? Jeli nie, to czy jest to najtasza bd najprostsza ze znanych metod?

Podstawy analizy algorytmw

c) Jako numeryczna numeryczna. . Czy zadanie nie jest zbyt wraliwe na zaburzenia danych? Czy algorytm uyty do rozwizania jest odporny na bdy zaokrgle? Jeli nie, to czy istnieje metoda bardziej stabilna numerycznie? Jaka moe by utrata dokadnoci oblicze? d) Dokadno. Czy dany algorytm gwarantuje uzyskanie rozwizania optymalnego? Jeli nie, jaka jest dokadno danej heurystyki dla najgorszego przypadku danych? Dla jakich klas danych algorytm daje rozwizania optymalne? Jaki jest najmniejszy trudny algorytmicznie zestaw danych?

Podstawy analizy algorytmw

Kryteria dotyczce algorytmw:

poprawno wymagania czasowe wymagania pamiciowe optymalno czasowa stabilno numeryczna prostota, zwizo wraliwo

Podstawy analizy algorytmw

Poprawno algorytmw
Nie mona udowodni matematycznie poprawnoci programu wykonujcego si na maszynie fizycznej, ale mona udowodni poprawno jego modelu matematycznego. Trzeba ustali, co oznacza poprawno, tzn. na jakich danych algorytm bdzie dziaa i jaki jest prawidowy wynik dla kadej danej. Dopiero wwczas mona przystpi do dowodu poprawnoci przyjtej metody. Po uoeniu algorytmu musimy udowodni, e algorytm ten dla dobrych danych robi to, co trzeba. Jest to szczeglnie istotne, gdy komputery decyduj o zdrowiu i yciu ludzi.

Podstawy analizy algorytmw

Rozpatrzmy dla przykadu zamian wartoci zmiennych liczbowych. Najprostsze rozwizanie to uycie zmiennej pomocniczej. Gdy przeniesiemy warto zmiennej x do zmiennej pomocniczej, potem warto zmiennej y do x i w kocu warto zmiennej pomocniczej do y, to oczywicie problem rozwizalimy. Ponadto algorytm jest tak prosty, e nie ma co dowodzi. Zamian wartoci zmiennych moemy zrealizowa rwnie, stosujc inny algorytm: dodajmy warto zmiennej y do wartoci zmiennej x i sum t przechowajmy jako now warto zmiennej x. Teraz za zmienn y podstawmy rnic nowej wartoci zmiennej x i wartoci zmiennej y i w kocu za zmienn x znw rnic wartoci zmiennych x i y.

Podstawy analizy algorytmw

Symbolicznie: x := x + y; y := x y; x := x y; Przy tym algorytmie dowd jest potrzebny: ( x + y) y = x i (x + y) ((x + y) y) = y

Podstawy analizy algorytmw

W analizie algorytmw dany algorytm uwaa si za poprawny, gdy umiemy o nim udowodni dwa fakty. Pierwszy to tzw. wasno stopu, a wic to, i dla kadych danych dopuszczalnych algorytm ten zatrzymuje si i daje wynik. Drugi fakt, to taki, e wynik ten jest tym, czego szukalimy. Jeli potrafimy udowodni, e wynik dziaania algorytmu bdzie prawidowy, to mwimy o czciowej poprawnoci algorytmu lub te, e mamy do czynienia z palgorytmem. Zatem algorytm jest cakowicie poprawny, gdy jest czciowo poprawny i ma wasno stopu.

Podstawy analizy algorytmw

Jedn z metod dowodzenia poprawnoci jest metoda niezmiennikw ptli. Niezmienniki to warunki i relacje speniane przez zmienne i struktury danych na pocztku lub kocu kadej iteracji ptli. Niezmienniki ptli formuuje si tak, aby precyzyjnie stwierdzi, e po ostatniej iteracji algorytm zrobi to, co mia wykona. Metod niezmiennikw ptli zilustrujemy na przykadzie, w ktrym szukamy w tablicy (lub na licie) elementu o wartoci x. Algorytm porwnuje x kolejno z kadym elementem wektora i jeeli nastpi zgodno, to zwraca indeks danego elementu. Jeli x nie znajduje si na licie, to algorytm zwraca 0.

Podstawy analizy algorytmw

Algorytm 1
Dane: L, n, x, gdzie L jest tablic n-elementow L[l..n], za x jest wartoci poszukiwan. Wyniki: index, tj. pozycja x w L (lub 0, gdy nie wystpuje). begin 1. 2. 3. 4. 5. end;

index := 1; while index n and L[index] x do begin index := index + 1 end; if index > n then index := 0

Podstawy analizy algorytmw

Twierdzenie. Majc dan n-elementow tablic L (n 0) oraz Twierdzenie. x, algorytm 1 koczy si z wartoci index rwn pozycji pierwszego wystpienia x w L, jeli x wystpuje, i rwn 0 w przypadku przeciwnym. Lemat emat. . Dla kadego k = 1, 2, ..., n + 1, jeli sterowanie dociera do linii 2 po raz k-ty, to spenione s nastpujce niezmienniki ptli: index = k i L[i] x dla i = 1, 2, ..., k1.

Podstawy analizy algorytmw

Dowd - przez indukcj wzgldem k. Zgodnie ze schematem indukcji najpierw sprawdzamy, czy niezmiennik jest speniony przed rozpoczciem dziaania ptli. Niech k = 1. Wwczas index = k = 1 i nie istnieje i < k, dla ktrego L[i] = x. Jeeli, warunki te s spenione dla pewnego k < n + 1, to zachodz rwnie dla k + 1. Na podstawie zaoenia indukcyjnego L[i] x dla 1 i < k i index = k, gdy linia 2 wykonywana jest po raz k-ty z rzdu. Jeli warunki w linii 2 sprawdzane s ponownie, czyli po raz (k + 1)-szy, to byy one spenione poprzednio. Zatem L[index] x i L[k] x. Poza tym index jest zwikszany w ptli, wic (k + 1)-sze sprawdzenie warunkw oznacza, e index = k + 1.

Podstawy analizy algorytmw

Dowd twierdzenia twierdzenia. . Przypumy, e testy w linii 2 byy wykonane dokadnie k razy, gdzie 1 k n + 1. Rozwamy dwie moliwe sytuacje, w ktrych wykonuje si instrukcja warunkowa z linii 5. Wynik index = 0 jest wtedy i tylko wtedy, gdy k = n + 1. Na podstawie prawdziwoci niezmiennika ptli dla kadego i = 1,2, ..., n, L[i] x, wic wynik 0 jest prawidowy. Sytuacja ta zawiera przypadek, gdy n = 0 i lista jest pusta. Z drugiej strony wynik index = k n otrzymujemy wtedy i tylko wtedy, gdy ptla zakoczya si, poniewa na mocy lematu L[k] = x. Poniewa L[i] x dla i = 1, 2, ..., k 1, wic k jest pozycj pierwszego wystpienia wartoci x w tej tablicy. Zatem algorytm jest poprawny.

Podstawy analizy algorytmw

Zoono czasowa algorytmw


Problem Operacja

Znalezienie x na licie nazwisk Porwnanie x z pozycj na licie Mnoenie dwch macierzy liczb rzeczywistych Porzdkowanie liczb Mnoenie dwch liczb typu real (lub mnoenie i dodawanie) Porwnanie dwch liczb (lub porwnanie i zamiana)

Trawersowanie grafu w Operacja na wskaniku listy postaci listy ssiadw Tabela 4.1 Operacje podstawowe

Podstawy analizy algorytmw

Rozmiar danych
Rozmiar danych Liczba nazwisk na licie Liczba wierszy i kolumn Liczba kluczy do sortowania Trawersowanie grafu Liczba wierzchokw i liczba krawdzi Rozwizywanie ukadu Liczba rwna i liczba rwna liniowych niewiadomych Tabela 4.2 Problem Znalezienie x na licie nazwisk Mnoenie dwch macierzy Porzdkowanie liczb

Podstawy analizy algorytmw

Pesymistyczna zoono obliczeniowa


W jaki sposb przedstawiamy wyniki naszej analizy? Najczciej obliczamy liczb operacji podstawowych wykonywanych w najgorszym przypadku danych jako funkcj rozmiaru danych. Funkcj t nazywamy zoonoci obliczeniow najgorszego przypadku danych lub pesymistyczn zoonoci obliczeniow. Bardziej formalnie, niech Dn bdzie zbiorem danych rozmiaru n dla rozwaanego problemu i niech I bdzie elementem zbioru Dn. Niech t(I) bdzie liczb operacji podstawowych wykonywanych przez algorytm na danych I. Funkcj t nazywa bdziemy liczb krokw algorytmu A. Wwczas definiujemy funkcj W jako:

W (n) = max{t ( I ) : I Dn }

Podstawy analizy algorytmw

Oczekiwana zoono obliczeniowa


Wany praktycznie jest nie tyle najgorszy przypadek, co redni przypadek danych dla danego algorytmu. Jednake analiza redniego przypadku danych jest o wiele trudniejsza, gdy wymaga okrelenia rozkadu danych wejciowych, a najczciej bywa tak, e rozkady odpowiadajce rzeczywistym problemom s matematycznie niezbadane. Niech p(I) bdzie prawdopodobiestwem wystpowania danych I. Wwczas zoono obliczeniow redniego przypadku lub oczekiwan zoono obliczeniow, lub po prostu redni zoono definiujemy jako:

A(n) =

p( I )t ( I )
I Dn

Podstawy analizy algorytmw

Problem: Niech L bdzie tablic n-elementow. Znale pozycj x, jeli L zawiera x, i zwrci 0 w przypadku przeciwnym. Algorytm: begin 1. 2. 3. 4. 5. end;

index := 1; while index n and L[index] x do begin index := index + 1 end; if index > n then index := 0

Operacja podstawowa: porwnanie x z pozycj na licie. Analiza najgorszego przypadku: w najgorszym przypadku x zajmuje ostatni pozycj lub w ogle nie wystpuje w L. W obu przypadkach x jest porwnywane ze wszystkimi pozycjami, zatem W(n) = n.

Podstawy analizy algorytmw

Analiza redniego przypadku: wszystkie elementy w L s rne, e x na pewno naley do L i, e x moe by na kadej pozycji z jednakowym prawdopodobiestwem. Zbir moliwych danych rozmiaru n dzielimy na klasy rwnowanoci wedug tego, na jakiej pozycji wystpuje x. Wystarczy rozway n typw danych wejciowych. Dla i = 1, 2, ..., n niech Ii reprezentuje przypadek, gdy x znajduje si na i-tej pozycji. Wwczas niech t(I) oznacza liczb porwna wykonywanych przez algorytm 1. t(Ii) = i dla kadego i = 1, 2, ..., n. Zatem:

1 1 n 1 n(n + 1) n + 1 = A(n) = p( I i )t ( I i ) = i = i = n i =1 n 2 2 i =1 i =1 n
n n

Podstawy analizy algorytmw

Obecnie rozwamy sytuacj, w ktrej x by moe nie znajduje si na licie, przy czym, jak poprzednio, wszystkie elementy s rne. Rozwaymy n + 1 przypadkw. Dla i = 1, 2, ..., n symbol Ii reprezentuje przypadek, gdy x jest na i-tej pozycji, In+l reprezentuje przypadek, gdy x nie ma na licie, za q oznacza prawdopodobiestwo, e x jest na licie, przy czym adna pozycja nie jest uprzywilejowana w sensie prawdopodobiestwa. Wwczas dla 1 i n mamy p(Ii) = q/n, p(In+1) = 1 q. Jak poprzednio t(Ii) = i oraz t(In+1) = n. Zatem: q q n A(n) = p( I i )t ( I i ) = i + (1 q)n = i + (1 q)n n i =1 i =1 i =1 n q n(n + 1) n +1 + (1 q )n + (1 q)n = q A(n) = n 2 2
n +1 n

Podstawy analizy algorytmw

Rozwaymy nastpujcy algorytm dla problemu polegajcego na rozstrzygniciu, czy dany graf G jest 3-barwny.
Algorytm 3-coloring(G); begin if w G istnieje K4 then return (nie) else begin wygeneruj wszystkie (3) 3-kolorowania grafu G for kade pokolorowanie do if legalne then return (tak) return (nie) end end;

Podstawy analizy algorytmw

Pokazano, e jeeli wszystkie grafy o n wierzchokach s jednakowo prawdopodobne, to prawdopodobiestwo, e algorytm wykona instrukcj else begin wynosi:

cn 2

Dla pewnego c > 0.

Zoono algorytmu: pesymistyczna


2 n = W ( n) O ( n 3 )

oczekiwana

A(n) = ( ) (1 2
n 4

cn 2

) + (n 3 ) (2
2 n

cn2

) = O (n 4 )

Podstawy analizy algorytmw

Problem: Niech A = [aij] i B = [bij] bd dwiema macierzami kwadratowymi rozmiaru n n. Obliczy macierz C = A B. Algorytm: Zastosowa algorytm wynikajcy z definicji macierzy C:
cij = aik bkj
k =1 n

dla 1 i, j n.

Algorytm 2
begin for i := 1 to n do for j := 1 to n do begin cij := 0; for k := 1 to n do cij := cij + aik bkj end end;

Podstawy analizy algorytmw

Operacja podstawowa: mnoenie liczb zmiennoprzecinkowych. Analiza: aby obliczy jeden element macierzy, naley wykona n mnoe. Macierz C ma n2 elementw, wic:

A(n) = W (n) = n3
Dla niektrych algorytmw A(n) = W(n). Jednake obie funkcje mog si rni rzdem wielkoci. Przykadem takiego problemu jest zagadnienie sortowania. Naiwny algorytm sortowania dziaajcy na zasadzie porwnywania i ewentualnej zamiany par ssiednich wykonuje w najgorszym i rednim przypadku O(n2) porwna. Lepsze algorytmy sortowania wykonuj w obu przypadkach O(nlogn) porwna. Najlepsze algorytmy sortowania, oparte na idei podziau dystrybucyjnego, potrafi zrobi to samo w oczekiwanym czasie O(n), nie przekraczajc nigdy O(nlog n) dziaa.

KONIEC

You might also like