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