Zak lad Metod Obliczeniowych Chemii UJ 14 marca 2007
Rzad 1 Zamiast wst epu 2 Rzad Notacja dużego O Notacja Ω Notacja Θ 3
S lowniczek Rzad Algorytm W matematyce oraz informatyce to skończony, uporzadkowany zbiór jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. S lowo algorytm pochodzi od nazwiska Muhammed ibn Musa Alchwarizmi, matematyka perskiego z IX wieku. (Wikipedia) Struktura danych Sposób reprezentacji informacji w komputerze. Na strukturach danych operuja algorytmy. (Wikipedia)
Co to jest? Rzad Notacja dużego O Notacja Ω Notacja Θ Poj ecie rz edu określa asymptotyczne tempo wzrostu wartości wraz ze wzrostem jej argumentu.
Co to jest? Rzad Notacja dużego O Notacja Ω Notacja Θ Poj ecie rz edu określa asymptotyczne tempo wzrostu wartości wraz ze wzrostem jej argumentu. Istnieja różne sposoby określania rzedu. Najpopularniejsza z nich jest notacja dużego O. Niezbyt czesto można spotkać sie z notacja Ω i notacja Θ. Pozosta le praktycznie nie sa spotykane.
Definicja Rzad Notacja dużego O Notacja Ω Notacja Θ Mówimy, że f jest co najwyżej rz edu g (czyli f (x) O(g(x))) wtedy i tylko wtedy gdy x 0, M > 0 x > x 0 : f (x) M g(x) (1) Równoważnie (przy za lożeniu że x 0 x > x 0 : g(x) 0) f (x) O(g(x)) lim sup f (x) x g(x) < (2)
Rzad Podstawowe w laściwości Notacja dużego O Notacja Ω Notacja Θ Idempotencja Iloczyn Suma O(f (x)) O(f (x)) (3) O(f (x))o(g(x)) O(f (x)g(x)) (4) O(f (x)) + O(g(x)) O(max(f (x), g(x))) (5) Mnożenie przez sta l a O(cf (x)) O(f (x)) (6)
Rzad Notacja dużego O Notacja Ω Notacja Θ n O(n 2 ) (7) 3n 2 + log(n) + 2 O(n 2 ) (8) log(n 3 ) O(log(n)) (9)
Definicja Rzad Notacja dużego O Notacja Ω Notacja Θ Mówimy, że f jest co najmniej rz edu g (czyli f (x) Ω(g(x))) wtedy i tylko wtedy gdy x 0, M > 0 x > x 0 : f (x) M g(x) (10) Równoważnie (przy za lożeniu że x 0 x > x 0 : g(x) 0) f (x) O(g(x)) lim inf f (x) x g(x) > 0 (11)
Definicja Rzad Notacja dużego O Notacja Ω Notacja Θ Mówimy, że f jest dok ladnie rz edu g (czyli f (x) Θ(g(x))) wtedy i tylko wtedy gdy f (x) O(g(x)) f (x) Ω(g(x)) (12) Równoważnie (przy za lożeniu że x 0 x > x 0 : g(x) 0) f (x) O(g(x)) 0 < lim inf f (x) x g(x) lim sup f (x) x g(x) < (13)
Co to jest? I Rzad Definicja algorytmu mówi jaka ilość zasobów potrzebna jest do jego wykonania w zależności od rozmiaru danych wejściowych. Zasoby Najcześciej rozważa sie zużyty czas procesora (z lożoność czasowa) i zajmowana pamieć (z lożoność pamieciowa).
Co to jest? II Rzad Rodzaje z lożoności Poza tym mówimy też o z lożoności zamortyzowanej (to troche inna klasyfikacja)
Definicja Rzad Niech D n bedzie zbiorem wszystkich możliwych danych wejściowych o rozmiarze n, a t : D n N funkcja określajac a rozmiar użytych zasobów dla zestawu danych. Wtedy pesymistyczna z lożoność obliczeniowa definiujemy jako W (n) = sup{t(d) : d D n }. (14)
Definicja Rzad Niech D n bedzie zbiorem wszystkich możliwych danych wejściowych o rozmiarze n. Niech p n (k) oznacza prawdopodobieństwo, że dla danych o rozmiarze n algorytm użyje zasobów o rozmiarze k N. Wtedy oczekiwana z lożoność obliczeniowa definiujemy jako V (n) = k kp n (k) (15)
Rzad Szukanie elementu ciagu Problem Niech p bedzie permutacja ciagu n-elementowego. Zdefiniujmy funkcje f : {1, 2,..., n} {1, 2,..., n} która dla danego k zwraca pozycje elementu o wartości k w ciagu p.
Rzad Szukanie elementu ciagu Problem Niech p bedzie permutacja ciagu n-elementowego. Zdefiniujmy funkcje f : {1, 2,..., n} {1, 2,..., n} która dla danego k zwraca pozycje elementu o wartości k w ciagu p. Szkic algorytmu i n t f ( i n t * p, i n t k ) { f o r ( i n t * q = p ; *q!= k ; ++q ) ; return q p ; }
Rzad Szukanie elementu ciagu - z lożoność pesymistyczna Liczba operacji równa jest indeksowi poszukiwanego elementu w ciagu. Oczywiście liczba operacji bedzie najwieksza, jeżeli poszukiwany element jest ostatnim elementem ciagu. Czyli W (n) = n. (16)
Rzad Szukanie elementu ciagu - z lożoność oczekiwana Za lóżmy, że prawdopodobieństwo wystapienia szukanego elementu na określonej pozycji w ciagu nie zależy od pozycji. Wtedy p n (k) = 1. n Czyli V (n) = n k kp n (k) = n = n + 1 (17) 2 k k=1
Co to jest? Rzad Zdarza si e że dany algorytm wykonywany jest wielokrotnie. Zwykle interesujac a informacja jest wtedy ca lkowity koszt sekwencji wykonań tego algorytmu przeliczony na pojedyncze wywo lanie. S luży do tego z lożoność zamortyzowana. Na przyk lad jeżeli algorytm operuje na pewnej strukturze danych, jego z lożoność w ogólności zależeć może od stanu przechowywanego w tej strukturze. jest definiowana jedynie dla czasu wykonania.
Definicja Rzad Zdefinujmy ca lkowity czas wykonania algorytmu jako t = n t i (18) i gdzie t i jest maksymalnym czasem jednokrotnego wykonania algorytmu w danej sekwencji. Wtedy przez z lożoność zamortyzowana określać bedziemy U = max(t) n (19)
Stos Rzad s t r u c t Stack { s i z e t c a p a c i t y ; s i z e t s i z e ; i n t * data ; } ; void push ( s t r u c t Stack *, i n t ) ; i n t pop ( s t r u c t Stack * ) ;
Stos: pop Rzad i n t pop ( s t r u c t Stack * s ) { return s >data [ s >s i z e ]; }
Rzad Stos: push - naiwna implementacja void push ( s t r u c t Stack * s, i n t d ) { i f ( s >s i z e == s >c a p a c i t y ) { s >c a p a c i t y += 1 ; s >data = r e a l l o c ( s >data, s >c a p a c i t y ) ; } } s >data [ s >s i z e ++] = d ;
Rzad Stos: push - poprawiona implementacja void push ( s t r u c t Stack * s, i n t d ) { i f ( s >s i z e == s >c a p a c i t y ) { s >c a p a c i t y *= 2 ; s >data = r e a l l o c ( s >data, s >c a p a c i t y ) ; } } s >data [ s >s i z e ++] = d ;