Wyklad 6 Budowa i analiza algorytmów


Złożoność algorytmów
Złożoność pamięciowa
- liczba i rozmiar struktur danych wykorzystywanych w
algorytmie
Złożoność czasowa
- liczba operacji elementarnych wykonywanych w trakcie
przebiegu algorytmu
M.Rawski Wstęp do Informatyki
Złożoność algorytmów - Dokładniej
Z' ZAOŻONOŚĆ CZASOWA ALGORYTMU - zależność pomiędzy liczbą
operacji elementarnych wykonywanych w trakcie przebiegu algorytmu
a rozmiarem danych wejściowych (podawana jako funkcja rozmiaru
tych danych)
Z' np.
X' sortowanie bąbelkowe: F(N) = ?, gdzie N jest długością listy
X' algorytm rozwiązywania problemu wież Hanoi: F(N) = ?, gdzie
N jest liczbą krążków
X' wyznaczanie minimalnego drzewa rozpinającego: F(N,M) = ?,
gdzie N jest liczbą wierzchołków a M - liczbą krawędzi w grafie
(sieci połączeń)
M.Rawski Wstęp do Informatyki
Co to znaczy w praktyce?
Z' W praktyce złożoność czasowa decyduje o przydatności
algorytmów
Z' Ponieważ:
Y' jest mitem stwierdzenie, że komputery są tak szybkie, że czas nie
stanowi problemu (rozkład na czynniki pierwsze dużych liczb - 300 cyfr
- wymaga milionów lat)
" potrzebne jest rozwiązywanie coraz większych problemów:
- komputerowe systemy wspomagania decyzji
- komputerowe symulacje i prognozy
" muszą funkcjonować systemy komputerowe czasu
rzeczywistego
- automatyczne sterowanie w złożonych układach
M.Rawski Wstęp do Informatyki
Zmniejszanie czasu wykonania
Z' Normalizacja wartości w tablicy jednowymiarowej (wektorze)
względem maksimum:
Z' Dane: V(1), V(2), ..., V(N)
Z' Algorytm 1
Z' 1. wyznacz w zmiennej MAX największą z wartości ;
Z' 2. dla I od 1 do N wykonaj :
Y' 2.1. V(I) ! V(I) " 100 / MAX
Z' Algorytm 2
Z' 1. wyznacz w zmiennej MAX największą z wartości ;
Z' 2. ILORAZ ! 100 / MAX ;
Z' 3. dla I od 1 do N wykonaj :
Y' 3.1. V(I) ! V(I) " ILORAZ
M.Rawski Wstęp do Informatyki
Zmniejszanie czasu wykonania
Z' Wyszukiwanie liniowe elementu z listy o długości N:
Z' Algorytm 1
Z' 1. wez pierwszy element listy ;
Z' 2. wykonuj:
Y' 2.1. sprawdz czy bieżący element jest tym szukanym ;
Y' 2.2. sprawdz czy osiągnąłeś koniec listy ;
Y' 2.3. wez następny element z listy
Z' aż znajdziesz lub przejrzysz całą listę
M.Rawski Wstęp do Informatyki
Zmniejszanie czasu wykonania
Z' Wyszukiwanie liniowe elementu z listy o długości N:
Z' Algorytm 2
Z' 1. dopisz szukany element na końcu listy ;
Z' 2. wez pierwszy element listy ;
Z' 3. wykonuj:
Y' 3.1. sprawdz czy bieżący element jest tym szukanym ;
Y' 3.2. wez następny element z listy
Z' aż znajdziesz ;
Z' 4. sprawdz czy jesteś na końcu listy
M.Rawski Wstęp do Informatyki
Poprawianie złożoności algorytmu
Z' Porównujemy dwa algorytmy wykonujące to samo zadanie za
pomocą jednej iteracji ograniczonej (liczba iteracji N wynika
jednoznacznie z rozmiaru danych wejściowych)
Z' czasy wykonania algorytmów w funkcji rozmiaru danych wynoszą:
Z' F1(N) = K1 + L1 " N
Z' F2(N) = K2 + L2 " N
Z' do ich porównania możemy wykorzystać iloraz:
F1(N )
s(N )=
F2(N )
Z' wtedy s(N) = 1 oznacza jednakową szybkość działania
Z' (ale tylko wtedy jest to możliwe, gdy K1 = K2 i L1 = L2)
Z' s(N) < 1 oznacza, że 1 algorytm jest szybszy
Z' (ale dla pewnych N może zachodzić s(N) > 1)
M.Rawski Wstęp do Informatyki
Poprawianie złożoności algorytmu
Z' Gdyby założyć, że interesują nas tylko zadania o rosnących
rozmiarach (N "), to o relacji pomiędzy algorytmami powinna
decydować wartość
L1
lim s(N )=
N "
L2
F
czas wykonania
2
K F1
1
współczynnik porównania
F2
K
F
2
1
K
L
1
1
1
L
2
K
2 L
1
rozmiar danych
L
2
rozmiar danych
N N
0
N N
0
M.Rawski Wstęp do Informatyki
Notacja O
Z' Dwa algorytmy o czasach wykonania F1(N) i F2(N) mają złożoność
tego samego rzędu, jeśli ,
F1(N )
lim = C
Z' gdzie 0 < C < "
N "
F2(N )
" jeśli C = 0, to algorytm o czasie wykonania F1(N) ma niższy rząd
złożoności (ma lepszą złożoność)
" jeśli C = ", to algorytm o czasie wykonania F1(N) ma wyższy rząd
złożoności (ma gorszą złożoność)
M.Rawski Wstęp do Informatyki
Notacja O
Z' Algorytm o czasie wykonania F(N) ma złożoność liniową, jeśli
F(N )
lim = C
Z' (0 < C < ");
N "
N
Z' Złożoność rzędu N oznaczana jest symbolem F(N) = O(N)
Z' Algorytm o czasie wykonania F(N) ma złożoność kwadratową,
jeśli
F(N )
lim = C
2
N "
N
Z' (0 < C < ");
Z' Złożoność rzędu N 2 oznaczana jest symbolem F(N) = O(N 2)
Z' Dopiero znalezienie algorytmu o niższym rzędzie złożoności
jest istotnym ulepszeniem rozwiązania danego zadania
algorytmicznego!
M.Rawski Wstęp do Informatyki
Właściwości notacji O("
")
""
Z' zapis F(N) = O(g(N)) oznacza spełnienie warunku (0 < C < "); i
można go odczytywać  algorytm ma złożoność rzędu g(N) lub
 czas wykonania algorytmu jest O(g(N)) ,
Z' równość w zapisie F(N) = O(g(N)) powinna być rozumiana w ten
sposób, że funkcja F(N) jest jedną z funkcji, które spełniają
powyższy warunek lub precyzyjniej, że należy do zbioru wszystkich
funkcji spełniających powyższy warunek
M.Rawski Wstęp do Informatyki
Właściwości notacji O("
") cd
""
Z' F(N) = O(F(N)),
Z' O(O(g(N))) = O(g(N)),
Z' c"O(g(N)) = O(g(N)) (dla 0 < c < "),
Z' O(g(N)) + O(h(N)) = O(g(N) + h(N)),
Z' O(g(N)) " O(h(N)) = O(g(N) " h(N)) = g(N) " O(h(N)) = h(N) "
O(g(N)),
g(N )
lim = 0
Z' jeśli zachodzi ,
N "
h(N )
Y' to O(g(N)) + O(h(N)) = O(g(N) + h(N)) = O(h(N)),
Z' w wielu książkach to, co tutaj oznaczane jest symbolem O(g(N))
oznaczane jest Ś
Ś(g(N)) (theta)
Ś
Ś
M.Rawski Wstęp do Informatyki
Ulepszanie rzędu wielkości
Z' Jeśli algorytm wykonuje różną liczbę iteracji w zależności od
konkretnych danych wejściowych możemy badać czas jego
wykonania w najgorszym przypadku.
Ę% czas wykonania Alg. 1 dla wyszukiwania liniowego F1(N) H" 2 " N
Ę% czas wykonania Alg. 2 dla wyszukiwania liniowego F2(N) H" N
Ę% oba mają pesymistyczny czas wykonania O(N) - mogą zdarzyć się
takie dane wejściowe, dla których trzeba będzie przejrzeć cała listę
o długości N
M.Rawski Wstęp do Informatyki
Ulepszanie rzędu wielkości
start
Z' Czy można zaproponować
Wez całą listę
wejściową
algorytm o lepszej złożoności?
Z' Wyszukiwanie binarne elementu
Czy środkowy
NIE TAK
z listy uporządkowanej:
element bieżącej
listy jest tym
Z' Y1, Y2, ..., YN
szukanym?
Wypisz
(dla każdego i < j zachodzi Yi d" Yj)
 znalazłem
Czy szukany
Czy szukany
TAK NIE
element jest mniejszy
element jest mniejszy
od elementu
od elementu
środkowego?
środkowego?
stop
Wez pierwszą Wez drugą
Z' Algorytm 3
połowę listy połowę listy
NIE TAK
Wypisz
Czy lista bieżąca
 nie ma
jest pusta?
M.Rawski Wstęp do Informatyki
Ulepszanie rzędu wielkości
Z' Ile razy jest powtarzana w najgorszym przypadku iteracja w
algorytmie? Odpowiedz: 1 + log2 N
Z' W najgorszym przypadku złożoność algorytmu wyszukiwania
binarnego wynosi O(log 2 N)
log2 N
łł"0
ł
N
Z' Ponieważ ,
N
czyli algorytm wyszukiwania binarnego ma złożoność o rząd niższą
od prostego wyszukiwania, ale ma zastosowanie tylko dla list
uporządkowanych
M.Rawski Wstęp do Informatyki
O ile lepiej ?
1+ N
Skala ulepszenia: N
log2
10 4
Z'
100 7
1 000 10
10 000 14
1 000 000 20
1 000 000 000 30
1 000 000 000 000 40
1 000 000 000 000 000 50
1 000 000 000 000 000 000 60
M.Rawski Wstęp do Informatyki
Jak szacować?
Z' Całkowity koszt czasowy w
start
najgorszym przypadku:
Koszt K1
(1)
Z' K1 + max( K3 , K4 ) + K2 " log2 Koszt K2
N
(2)
Koszt K4
Z' Nie ma znaczenia stała liczba
operacji podstawowych
wykonywanych w każdym
kroku iteracji  wystarczy do
zliczania wybrać taką, która jest
wykonywana w każdym kroku
stop
(3)
raz.
Koszt K3
M.Rawski Wstęp do Informatyki
Jak szacować? cd
Z' Całkowity koszt czasowy w najgorszym przypadku:
Z' K1 + max( K3 , K4 ) + K2 " log2 N
Z' Nie ma znaczenia stała liczba operacji podstawowych
wykonywanych w każdym kroku iteracji  wystarczy do zliczania
wybrać taką, która jest wykonywana w każdym kroku raz.
Z' O złożoności algorytmu decyduje liczba wykonywanych
iteracji
M.Rawski Wstęp do Informatyki
Przykłady...
" sortowanie bąbelkowe w pierwotnej wersji (zagnieżdżone
iteracje)
Y' 1. wykonaj co następuje N - 1 razy:
X' 1.1. ... ;
X' 1.2. wykonaj co następuje N - 1 razy:
" 1.2.1. ... ;
Z' Całkowity koszt czasowy w najgorszym przypadku wynosi z
dokładnością do stałych: (N - 1) " (N - 1) = N 2 - 2N +1 ;
Z' N 2 jest składnikiem dominującym, czyli złożoność jest O(N 2)
" sortowanie bąbelkowe ulepszone
Całkowity koszt czasowy w najgorszym przypadku wynosi:
(N - 1) + (N - 2) + (N - 3) + ... + 2 + 1 = 0,5" N 2 - 0,5"N, czyli
mniej,
ale nadal złożoność pozostaje O(N 2)
M.Rawski Wstęp do Informatyki
Przykłady...
" sumowanie zarobków pracowników - złożoność O(N)
" sumowanie zarobków pracowników zarabiających więcej od swych
bezpośrednich przełożonych - złożoność O(N 2)
" znajdowanie największej przekątnej w wielokącie wypukłym metodą
naiwną - złożoność O(N 2)
" znajdowanie największej przekątnej w wielokącie wypukłym metodą
obrotu prostych równoległych - złożoność O(N)
M.Rawski Wstęp do Informatyki
Przykłady...
" rekurencyjny algorytm dla wież Hanoi:
Z' procedura przenieś N ;
Y' 1. jeśli N = 1, to wypisz ruch i koniec;
Y' 2. w przeciwnym razie (tj. jeśli N > 1) wykonaj co następuje:
X' 2.1. wywołaj przenieś N - 1 ;
X' 2.2. wypisz ruch ;
X' 2.3. wywołaj przenieś N -1 ;
Z' Oznaczmy nieznany koszt czasowy przez T(N) i ułóżmy równania, które
musi spełniać - tzw. równania rekurencyjne:
 T(1) = 1
 T(N) = 2 " T(N-1) +1
Z' Spełnia je koszt T(N) = 2N - 1, czyli złożoność jest O(2N)
M.Rawski Wstęp do Informatyki
7
15
Przykłady...
7 15 12 11 8 10
12
11
" sortowanie drzewiaste (bez samoorganizacji drzewa):
ma pesymistyczną złożoność O(N 2), bo wprawdzie
8
lewostronne obejście drzewa ma złożoność liniową
10
O(N), ale konstrukcja binarnego drzewa poszukiwań ma
złożoność kwadratową (w najgorszym przypadku)
" sortowanie drzewiaste (z samoorganizacją drzewa):
ma złożoność O(N " log N) , co daje wyrazną poprawę
"
"
"
sprawności algorytmu
2
Skala N N
N log N
"
ulepszenia:
10 100 33
100 10 000 664
1 000 1 000 000 9 965
1 000 000 1 000 000 000 000 19 931 568
1 000 000 000 1 000 000 000 000 000 000 29 897 352 853
M.Rawski Wstęp do Informatyki
Przykłady...
" sortowanie przez scalanie (rekurencyjne):
Z' procedura sortuj-listę L;
Y' 1.jeśli L zawiera tylko jeden element, to jest posortowana;
Y' 2.w przeciwnym razie wykonaj co następuje:
X' 2.1. ... ;
X' 2.2. wywołaj sortuj-listę połowa L ;
X' 2.3. wywołaj sortuj-listę połowa L ;
X' 2.4. scal posortowane połowy listy L w jedną posortowaną listę;
Z' Oznaczmy nieznany koszt czasowy przez T(N) i ułóżmy równania
rekurencyjne, które musi spełniać:
 T(1) = 0
 T(N) = 2 " T(0,5 " N) + N
Z' Spełnia je koszt T(N) = N " log N, czyli złożoność jest O(N " log N)
"
"
"
Z' Sortowanie przez scalanie jest jednym z najlepszych algorytmów
sortowania (choć wymaga obszaru pamięci rosnącego jak O(N) )
M.Rawski Wstęp do Informatyki
Średnia złożoność
Z' Analiza najgorszego przypadku lub analiza średniego przypadku
Z' W analizie średniego przypadku istotną rolę odgrywają założenia o
rozkładzie prawdopodobieństwa w zbiorze dopuszczalnych
danych wejściowych.
Algorytm średni przyp. najgorszy
przyp.
sumowanie zarobków O(N) O(N)
sumowanie zarobków z szukaniem O(N 2) O(N 2)
bezp. Kierowników
sortowanie bąbelkowe O(N 2) O(N 2)
sortowanie drzewiaste z
O(N " log N) O(N " log N)
" "
" "
" "
samoorganizacją drzewa
sortowanie przez scalanie
O(N " " log N)
" log N) O(N "
" "
" "
Quicksort O(N 2)
O(N "
" log N)
"
"
Z' Średni koszt czasowy algorytmu Quicksort - 1,4 N log2 N
M.Rawski Wstęp do Informatyki
Czy można skonstruować jeszcze
lepszy algorytm?
Z' Każdy poprawny algorytm znajdujący
Algorytm dla problemu P
rozwiązanie danego problemu
o złożoności O(N 3)
Górne ograniczenia dla
ustanawia dla niego górne
złożoności problemu P
ograniczenie złożoności. Algorytm dla problemu P
o złożoności O(N 2)
Z' Możliwości dalszej poprawy rzędu
Złożoność czasowa
złożoności algorytmu będącego
Najsprawniejsze
właściwa problemowi P
~
rozwiązanie problemu
?
rozwiązaniem problemu wyznacza
dolne ograniczenie!
Dowód, że rozwiązanie
problemu P kosztuje co
najmniej O(N " log N)
"
"
"
Dolne ograniczenia dla
złożoności problemu P
Dowód, że rozwiązanie
problemu P kosztuje
co najmniej O(N)
M.Rawski Wstęp do Informatyki
Problemy zamknięte i luki
algorytmiczne
problem dolne ogr. górne ogr.
przeszukiwanie listy nieuporządkowanej O(N) O(N)
przeszukiwanie listy uporządkowanej O(log N) O(log N)
sortowanie
O(N " log N) O(N "
" "
" " log N)
" "
minimalne drzewo rozpinające O(N)
O(f(N) " N) +
"
"
"
+
Z' f(N) - bardzo wolno rosnąca funkcja, np.
Z' dla N=16 ma wartość 3
Z' dla N=64000 ma wartość 4
Z' dla N= znacznie więcej niż liczba cząstek we wszechświecie ma
wartość 5
M.Rawski Wstęp do Informatyki
Przykład analizy złożoności algorytmu
Z' Problem odgradzania śpiących tygrysów:
3
" algorytm  naiwny ma złożoność O(N )
" algorytm o znacznie lepszej złożoności:
Z' 1.znajdz punkt  najniżej położony - P1 ;
Z' 2.posortuj pozostałe punkty rosnąco według kątów tworzonych przez
odcinki z linią poziomą przechodzącą przez P1 - powstanie lista P2, ... ,PN ;
Z' 3.dołącz do powłoki punkty P1 i P2 ;
Z' 4.dla J od 3 do N wykonuj ;
Y' 4.1.dołącz do powłoki punkt PJ ;
Y' 4.2.cofając się wstecz po odcinkach aktualnej powłoki, usuwaj z niej te
punkty PK , dla których prosta przechodząca przez PK i PK-1 przecina
odcinek , aż do napotkania pierwszego punktu nie dającego się usunąć ;
M.Rawski Wstęp do Informatyki
Przykład
Z' krok 2. kolejne iteracje w kroku 4.
7 11
9 7 11
9
6
5 14
10
6
5 14
13
10
13
8
4
8
4
12
12
23 15
3
2 15
1
1
M.Rawski Wstęp do Informatyki
Podsumowanie czasu wykonania
7 11
9
X' Krok 1. O(N)
6
5 14
10
13
8
X' Krok 2. O(N " log N)
"
"
"
4
12
2 3 15
X' Krok 3. O(1)
1
X' Krok 4. O(N)
7 11
9
X' Razem O(N " log N)
"
"
"
6
5 14
10
13
8
4
12
3
2 15
1
M.Rawski Wstęp do Informatyki


Wyszukiwarka

Podobne podstrony:
Wyklad 4 Budowa i analiza algorytmów
Wyklad 5 Budowa i analiza algorytmów
analiza algorytmow
Zestawienie tematów objętych zakresem egzaminu z budowy i analizy algorytmów
Analiza algorytmow Z Czech PŚ [56]
Analiza algorytmów ukrywania w dźwięku
Analiza Algorytmów Ćwiczenia
Wykład 10 Podstawowe algorytmy sterowania
Projektowanie i analiza algorytmow
pdf wykład budowa materii, podstawowe prawa chemiczne 2014
wyklad z analizy matematycznej dla studentow na kierunku automatyka i robotyka agh
5 Analiza systemowa wykłady PDF 11 z numeracją
Algorytmy grafowe, wykład
Algorytmy genetyczne i procesy ewolucyjne Wykład 2

więcej podobnych podstron