Złożoność obliczeniowa algorytmów Literatura podstawowa Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Wprowadzenie do algorytmów. WNT, Warszawa, 1998. Edward M. Reingold, Jurg Nievergelt, Narsing Deo. Algorytmy kombinatoryczne. PWN, Warszawa, 1985. Lech Banachowski, Antomi Kreczmar. Elementy analizy algorytmów. WNT, Warszawa, 1982. Lech Banachowski, Antomi Kreczmar, Wojciech Rytter. Analiza algorytmów i struktur danych. WNT, Warszawa, 1989.
Algorytmy Algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych produkuje żądane dane wyjściowe (wynik działania algorytmu). Rozmiar danych wejściowych - liczba elementów w ciągu wejściowym czy całkowita liczba bitów potrzebnych do reprezentowania tych danych. Czas działania algorytmu - liczba wykonanych prostych operacji.
Problemy rozwiązywalne w czasie wielomianowym - O(nk) rozwiązywalne, ale nie w czasie wielomianowym (np., w czasie wykładniczym - O(kn)) nierozwiązywalne NP-zupełne (status nieznany; rozwiązywalne, ale nie wiadomo, czy w czasie wielomianowym)
Problemy Nierozwiązywalne: na przykład, problem stopu - Dla danego algorytmu A odpowiedzieć, czy kończy pracę dla dowolnych danych wejściowych. Łatwo rozwiązywalne: rozwiązywalne w czasie wielomianowym. Trudno rozwiązywalne: nie jest znany (czy nie istnieje) algorytm rozwiązujący problem w czasie wielomianowym
Czas działania algorytmów t3(n) t2(n) (czas działania) t1(n) (rozmiar danych wejściowych) n0 n
Przykład algorytmu Algorytm sortowania Insertion-Sort(A) 1. for j:=2 to length[A] 2. do key:=A[j] /* Wstaw A[i] w posortowany ciąg A[1..j-1].*/ 3. i:= j-1 4. while i>0 i A[i] > key 5. do A[i+1] := A[i] 6. i:= i-1 7. A[i+1] := key Przykład działania algorytmu 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6
Przykład analizy algorytmu Insertion-Sort(A) koszt liczba wykonań 1. for j:=2 to length[A] c1 n 2. do key:=A[i] c2 n-1 3. i:= j-1 c3 n-1 4. while i>0 i A[i] > key c4 5. do A[i+1] := A[i] c5 6. i:= i-1 c6 7. A[i+1] := key c7 n-1
Przykład analizy algorytmu
Czas działania algorytmów Notacja : (g(n)) = {f(n): istnieją stałe c1, c2 i n0 takie, że 0 c1g(n) f(n) c2g(n) dla wszystkich n n0}. Asymptotyczne ogranicza funkcję od góry oraz od dołu. Notacja O: O(g(n)) = {f(n): istnieją stałe c i n0 takie, że 0 f(n) cg(n) dla wszystkich n n0}. Asymptotyczne ogranicza funkcję od góry. cg(n) c2g(n) f(n) f(n) c1g(n) f(n)=O(g(n)) f(n)=(g(n)) n n n0 n0