N - Politechnika Poznańska
Transkrypt
N - Politechnika Poznańska
Technologia Informacyjna Wykład 7 Strona 1 z 26 Sprawność algorytmów Analiza kosztu realizacji algorytmu Miara złożoności rozmiaru pamięci (złożoność pamięciowa) algorytmu mierzona jest liczbą i rozmiarem struktur danych używanych do wykonania programu. Miara złożoności czasu wykonania ( złożoność czasowa) algorytmu mierzona jest liczbą akcji elementarnych wykonanych przez procesor w trakcie realizacji programu. Czas i pamięć zajmowane przez algorytm zależą od wielkości danych. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 1 Technologia Informacyjna Wykład 7 Strona 2 z 26 Ulepszenia wprowadzane post factum Przykład 1 – normalizacja: Mamy serię pomiarów Y = {y1, y2, ..., yN}, które chcemy znormalizować tak, aby wartość największa wynosiła 100 jednostek. Prosty algorytm: 1. umieść w zmiennej pomocniczej MAX wartość największą; 2. dla każdej wartości z listy Y podstaw Y := Y*100/MAX. Wykonujemy N mnożeń i N dzieleń. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 2 Technologia Informacyjna Wykład 7 Strona 3 z 26 Ulepszenia wprowadzane post factum Przykład 1 – normalizacja cd. Algorytm zmodyfikowany: 1. oblicz wartość największą i umieść ją w MAX; 2. CZYNNIK := 100/MAX; 3. dla I od 1 do N wykonaj: 3.1. Y(I) := Y(I)*CZYNNIK; Wykonujemy 1 dzielenie i N mnożeń. Zysk czasu wykonania algorytmu około 50 %. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 3 Technologia Informacyjna Wykład 7 Strona 4 z 26 Ulepszenia wprowadzane post factum Przykład 2 – wyszukiwanie liniowe Dysponujemy nieuporządkowaną listą N elementów, na której mamy znaleźć określony element X. L = {A1, A2, A3, …, AN} Prosty algorytm: 1. Wskaż pierwszy element listy; 2. Czy wskazywany element to X? Jeśli tak to podaj znaleziony element i zakończ algorytm; 3. Czy wskazywany element jest ostatnim na liście? Jeśli tak to zakończ algorytm – nie znaleziono poszukiwanego elementu; 4. Wskaż na następny element i przejdź do punktu 2. Wykonujemy: N sprawdzeń „czy wskazany element jest poszukiwanym?” oraz N sprawdzeń „czy jest to koniec listy?”. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 4 Technologia Informacyjna Wykład 7 Strona 5 z 26 Ulepszenia wprowadzane post factum Przykład 2 – wyszukiwanie liniowe cd. Tworzymy nową listę: L1 = {A1, A2, A3, …, AN, X} Algorytm zmodyfikowany: 1. Wskaż pierwszy element listy; 2. Czy wskazywany element to X? Jeśli tak to przejdź do punktu 4. 3. Wskaż na następny element i przejdź do punktu 2; 4. Czy wskazywany element jest ostatnim na liście? Jeśli tak to zakończ algorytm – nie znaleziono poszukiwanego elementu; 5. Podaj wskazywany element i zakończ algorytm. Wykonujemy N sprawdzeń „czy wskazany element jest poszukiwanym?” oraz 1 sprawdzenie „czy jest to koniec listy?”. Zysk czasu wykonania algorytmu około 50 %. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 5 Technologia Informacyjna Wykład 7 Strona 6 z 26 Pesymistyczny czas wykonania algorytmu Termin pesymistyczny czas wykonania oznacza, że dla pewnych zestawów danych, a być może większości, algorytm może wykonywać się krócej. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 6 Technologia Informacyjna Wykład 7 Strona 7 z 26 Notacja duże O Mówimy, że czas wykonania algorytmu jest wprost proporcjonalny do N, co zapisujemy jako O(N). N oznacza liczbę wykonywanych operacji elementarnych. Zapis O(N) oznacza, że istnieje pewna stała proporcjonalności K, taka, że czas wykonania algorytmu wynosi K*N. Wielkość stałej proporcjonalności nie ma znaczenia. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 7 Technologia Informacyjna Wykład 7 Strona 8 z 26 Pesymistyczny czas wykonania algorytmu Przykłady: Algorytm normalizujący – wersja naiwna Należy wykonać 2*N działań arytmetycznych – pesymistyczny czas wykonania O(N). Algorytm normalizujący – wersja zmodyfikowana Należy wykonać N+1 działań arytmetycznych – pesymistyczny czas wykonania O(N). Algorytm wyszukiwania liniowego – wersja naiwna W najgorszym przypadku należy wykonać 2*N sprawdzeń – pesymistyczny czas wykonania O(N). Algorytm wyszukiwania liniowego – wersja zmodyfikowana W najgorszym przypadku należy wykonać N+1 sprawdzeń – pesymistyczny czas wykonania O(N). Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 8 Technologia Informacyjna Wykład 7 Strona 9 z 26 Przykład – wyszukiwanie numeru telefonu Należy znaleźć interesujący nas element na uporządkowanej (posortowanej) liście. Uporządkowaną listą może być słownik lub książka telefoniczna. W przypadku książki telefonicznej dane występują w następującej formie: <X1, T1>, <X2, T2>, ..., <XI, TI>, ..., <XN, TN> gdzie: XI jest nazwiskiem, a TI odpowiednim numerem telefonu. Zakładamy, że na liście jest N pozycji i są one uporządkowane alfabetycznie według nazwisk. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 9 Technologia Informacyjna Wykład 7 Strona 10 z 26 Przykład – wyszukiwanie numeru telefonu Algorytm naiwny 1. Wskaż pierwsze nazwisko z listy – X1; 2. Czy wskazywany element to poszukiwane nazwisko? Jeśli tak to podaj numer telefonu i zakończ algorytm; 3. Czy wskazywane nazwisko jest ostatnim na liście? Jeśli tak to zakończ algorytm – nie znaleziono numeru telefonu; 4. Wskaż na następne nazwisko i przejdź do punktu 2. Pesymistyczny czas wykonanie tej wersji algorytmu: O(N). Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 10 Technologia Informacyjna Wykład 7 Strona 11 z 26 Przykład – wyszukiwanie numeru telefonu Wyszukiwanie binarne Pierwszy krok wyszukiwania: <X1, T1>, <X2, T2>, ..., <X1/2N, T1/2N>, ..., <XN-1, TN-1>, <XN, TN> Drugi krok wyszukiwania: <X1, T1>, <X2, T2>, ..., <X1/4N, T1/4N>, ..., <X1/2N, T1/2N> Trzeci krok wyszukiwania: <X1, T1>, <X2, T2>, ..., <X1/8N, T1/8N>, ..., <X1/4N, T1/4N> i tak dalej. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 11 Technologia Informacyjna Wykład 7 Strona 12 z 26 Przykład – wyszukiwanie numeru telefonu Wyszukiwanie binarne Długość listy sprawdzanej w kolejnych krokach realizacji algorytmu: Krok realizacji algorytmu (numer sprawdzenia) 1 2 3 4 ... [log2N] [1-log2N] Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska Liczba sprawdzanych elementów N N/2 N/4 N/8 ... 1 0 12 Technologia Informacyjna Wykład 7 Strona 13 z 26 Przykład – wyszukiwanie numeru telefonu Wyszukiwanie binarne 1. Dokonujemy porównania ze środkowym nazwiskiem z listy; 2. Jeśli wskazywane nazwisko, jest tym poszukiwanym to podaj numer telefonu i zakończ algorytm; 3. jeśli lista jest jednoelementowa, to zakończ algorytm – brak numeru telefonu; 4. Jeśli poszukiwane nazwisko Y < X1/2 to weź lewą część listy i przejdź do punktu 1; 5. Jeśli poszukiwane nazwisko Y > X1/2 to weź prawą część listy i przejdź do punktu 1; Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 13 Technologia Informacyjna Wykład 7 Strona 14 z 26 Wyszukiwanie binarne Schemat blokowy algorytmu start weź całą listę wejściową L NIE MA Y porównaj Y ze środkowym elementem rozważanej listy weź pierwszą albo drugą część rozważanej listy, zależnie od wyniku porównania JEST Y wypisz “jest” stop NIE czy rozważana lista jest pusta ? TAK wypisz “nie ma” stop Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 14 Technologia Informacyjna Wykład 7 Strona 15 z 26 Wyszukiwanie binarne Zestawienie pesymistycznych czasów wykonania algorytmów (pesymistycznych liczb porównań). Algorytm wy- Algorytm wyszukiwania li- szukiwania niowego binarnego N [1+log2N] 10 4 100 103 7 10 106 109 20 1018 60 30 Oszacowania pesymistycznego czasu wykonania algorytmu przeszukującego książkę telefoniczną: - algorytm wyszukiwania liniowego – O(N), - algorytm wyszukiwania binarnego – O(log2(N)). Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 15 Technologia Informacyjna Wykład 7 Strona 16 z 26 Dlaczego wystarczy policzyć porównania? Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 16 Technologia Informacyjna Wykład 7 Strona 17 z 26 Wyszukiwanie binarne Punkty kontrolne i ograniczenia czasu start (1) K1 (2) K2 K4 (4) stop K3 (3) stop Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 17 Technologia Informacyjna Wykład 7 Strona 18 z 26 Wyszukiwanie binarne Typowy przebieg wykonania algorytmu K3 (1) K1 K2 … (2) (2) (2) K2 K2 (3) (2) K2 (4) K4 log2N odcinków, w sumie najwy¿ej K2∗log2N instrukcji K1 + K2 * log2(N) + max(K3, K4) = K + K2 * log2(N) gdzie: K = K1 + max(K3, K4) stąd: Oszacowanie pesymistycznego czasu wykonania algorytmu wyszukiwania binarnego – O(log2(N)) Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 18 Technologia Informacyjna Wykład 7 Strona 19 z 26 Wpływ stałej na oszacowanie pesymistycznego czasu wykonania algorytmu Złożoność czasowa 2.00E+04 A B 1.00E+04 0.00E+00 0 1000 2000 Wielkość zadania Algorytmy: liniowy (B = 10*N); logarytmiczny (A = 1000*log2N). Punkt przecięcia dla N = 995. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 19 Technologia Informacyjna Wykład 7 Strona 20 z 26 Analiza kosztu czasowego zagnieżdżonej pętli Algorytm sortowania bąbelkowego: 1. Wykonaj co następuje N-1 razy ... 1.2. Wykonaj co następuje N-1 razy ... Całkowity koszt sortowania: (N-1)*(N-1) = N2 –2N + 1 stąd oszacowanie pesymistycznego czasu realizacji algorytmu – O(N2) Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 20 Technologia Informacyjna Wykład 7 Strona 21 z 26 Oszacowania pesymistycznych czasów wykonania algorytmów Nazwa algorytmu Pesymistyczny czas wykonania Sortowanie bąbelkowego O(N2) Sumowania zarobków O(N) Znajdowanie słowa „pieniądze” O(N) Znajdowania największej odległości przekątniowej – wersja naiwna O(N2) Znajdowania największej odległości przekątniowej – wersja zmodyfikowana O(N) Przeszukanie uporządkowanej listy – algorytm binarny O(logN) Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 21 Technologia Informacyjna Wykład 7 Strona 22 z 26 Analiza kosztu czasowego wykonania rekurencji Problem: Znajdowanie największego i najmniejszego elementu na nie posortowanej liście procedura znajdź-min-i-maks-w L: 1. jeśli lista L składa się z jednego elementu, to nadaj MIN i MAX właśnie jego wartość; jeśli L składa się z dwóch elementów, to nadaj MIN wartość mniejszego z nich, a MAX - większego; 2. w przeciwnym razie wykonaj, co następuje: 2.1. podziel listę L na dwie części, L1 oraz L2; w przypadku, gdy lista L zawiera parzystą liczbę elementów, obie części są równo liczne, w przeciwnym razie lista L1 zawiera o jeden element więcej aniżeli lista L2; 2.2. wywołaj znajdź-min-i-maks-w L1, umieszczając otrzymane w wyniku wartości w MIN1, MAX1; 2.3. wywołaj znajdź-min-i-maks-w L2, umieszczając otrzymane w wyniku wartości w MIN2, MAX2; 2.4. nadaj MIN mniejszą wartość z MIN1 oraz MIN2; 2.5. nadaj MAX większą wartość z MAX1 oraz MAX2; 3. wróć z wartościami MIN i MAX. Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 22 Technologia Informacyjna Wykład 7 Strona 23 z 26 Analiza kosztu czasowego wykonania rekurencji Wprowadźmy funkcję C(N). Jest to funkcja określająca liczbę porównań wymaganych przez procedurę min-imax dla list o długości N. Co wiemy: 1. Dla N=1 i N=2, wykonuje się dokładnie jedno porównanie, co zapisujemy: C(1) = C(2) = 1; 2. jeśli N>2, to należy wykonać porównania na dwóch zbiorach o długości list N/2 oraz dwa dodatkowe porównania dla znalezionych minimów i maksimów, co zapisujemy: C(N) = 2*C(N/2) +2. Jest to równanie różnicowe lub rekurencyjne. Rozwiązanie: C(N) = 3*N/2 – 2 Czyli pesymistyczny czas wykonania tego algorytmu – O(N). Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 23 Technologia Informacyjna Wykład 7 Strona 24 z 26 Oszacowania pesymistycznych czasów wykonania algorytmów rekurencyjnych Nazwa algorytmu Pesymistyczny czas wykonania Typowe sortowanie drzewiaste O(N2) Zmodyfikowane sortowanie drzewiaste O(N*logN) Sortowanie przez scalanie O(N*logN) Problem Wieże Hanoi O(2N) Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 24 Technologia Informacyjna Wykład 7 Strona 25 z 26 Wpływ długości zadania na czas wykonania algorytmu liniowego, kwadratowego oraz liniowologarytmicznego Algorytm liniowy, N Algorytm kwadratowy, N2 Algorytm liniowo - logarytmiczny, N*logN 10 102 33 102 104 665 103 106 9966 106 1012 20*106 109 1018 30*109 Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska 25 Technologia Informacyjna Wykład 7 Strona 26 z 26 Algorytmiczne problemy zamknięte i otwarte Problem algorytmiczny Przeszukanie nie uporządkowanej listy Przeszukanie uporządkowanej listy Problem min-imax Największa odległość przekątniowa Sortowanie Problem minimalnego drzewa rozpinającego (problem budowniczego linii kolejowych) Mariusz B. Bogacki Zakład Inżynierii Procesowej Politechnika Poznańska Ograniczenie dolne O(N) Ograniczenie górne O(N) O(logN) O(logN) O(N) O(N) O(N) O(N) O(N*logN) O(N) O(N*logN) O(N2) 26