Teoria obliczeń i złożoność obliczeniowa Kontakt: dr hab. inż. Adam Kasperski, prof. PWr. pokój 509 B4 adam.kasperski@pwr.wroc.pl materiały + informacje na stronie www. Zaliczenie: Egzamin
Literatura Problemy obliczeniowe Podstawowa: 1 M. Sipser. Wprowadzenie do teorii obliczeń. WNT Warszawa 2009. 2 C. Papadimitriou. Złożoność obliczeniowa. WNT Warszawa 2002. 3 J. E. Hopcroft, J. D. Ullman. Wprowadzenie do teorii automatów, języków i obliczeń. PWN Warszawa 2003. Dodatkowa: 1 S. Arora, B. Barak. Computational complexity. A modern approach. Cambridge University Press 2009. 2 A. Kościelski. Teoria obliczeń. Wykłady z matematycznych podstaw informatyki. Wydawnictwo Uniwersytetu Wrocławskiego 1997. 3 V. Vazirani. Algorytmy aproksymacyjne. WNT Warszawa 2005. 4 R. Penrose. Nowy umysł cesarza: o komputerach, umyśle i prawach fizyki. PWN Warszawa 1995. 5 D. Harel. Rzecz o istocie informatyki. WNT Warszawa 2008.
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Cele wykładu Problemy obliczeniowe 1 Co to jest problem obliczeniowy? 2 Co to jest algorytm? 3 Czy sa naturalne problemy, których nie można rozwiazać algorytmicznie? 4 Co to znaczy, że algorytm jest efektywny? 5 Czy sa naturalne problemy, których nie można rozwiazać za pomoca efektywnego algorytmu? 6 Jakie ograniczenia posiadaja współczesne komputery?
Przykłady problemów obliczeniowych OSIAGALNOŚĆ (REACHABILITY) Zadany jest graf skierowany G = (V, A). Czy w G istnieje ścieżka między dwoma zadanymi wierzchołkami s i t? Istnieje: 2 Nie istnieje: 2 s t s t 1 1
Przykłady problemów obliczeniowych CYKL HAMILTONA (HAMILTONIAN CYCLE) Zadany jest graf nieskierowany G = (V, E). Czy w G istnieje droga zamknięta przechodzaca dokładnie raz przez każdy wierzchołek? Istnieje: 4 Nie istnieje: 1 5 3 2
Przykłady problemów obliczeniowych PIERWSZOŚĆ (PRIMES) Zadana jest liczba naturalna N. Czy N jest liczba pierwsza? ROZKŁAD NA CZYNNIKI (FACTORING) Dla zadanej liczby naturalnej N wyznaczyć jej rozkład na czynniki pierwsze, tj. znaleźć liczby pierwsze p 1, p 2,...,p k takie, że N = p 1 p 2... p k.
Przykłady problemów obliczeniowych SPEŁNIALNOŚĆ (SATISFIABILITY) Zadana jest formuła logiczna φ(x 1,...,x n ). Czy formuła ta jest spełnialna, tj. czy jest prawdziwa dla pewnego wartościowania zmiennych logicznych? TAUTOLOGIA (TAUTOLOGY) Zadana jest formuła logiczna φ(x 1,...,x n ). Czy formuła ta jest tautologia, tj. czy jest prawdziwa dla wszyskich wartościowań zmiennych logicznych?
Przykłady problemów obliczeniowych PROBLEM STOPU (HALTING PROBLEM) Zadany jest kod algorytmu (np. w języku C) oraz dane wejściowe dla tego algorytmu. Czy algorytm ten zakończy pracę dla tych danych? KOSTKI WANGA Zadany jest skończony zbiór kwadratowych kostek. Ściany tych kostek sa pomalowane kolorami. Kostki wolno układać w ten sposób aby sasiednie ściany miały ten sam kolor. Czy posługujac się tylko kostkami z tego zbioru (wolno tworzyć dowolna ilość kopii danej kostki i je obracać) można pokryć cała płaszczyznę?
Przykłady problemów obliczeniowych NAJKRÓTSZA ŚCIEŻKA (SHORTEST PATH) W zadanym grafie skierowanym G = (V, A) z zadanymi odległościami d ij, (i, j) A, wyznacz najkrótsza ścieżka od wierzchołka s do wierzchołka t. Przykład: 2 7 5 s 5 8 3 3 9 1 5 t 2 1 2 5 5 4 5
Przykłady problemów obliczeniowych PROBLEM KOMIWOJAŻERA Dla zadanego zbioru miast, oraz czasów przejazdu między nimi znaleźć najkrótsza trasę zamknięta odwiedzajac a dokładnie raz każde miasto. Przykład: 3 6 1 5 2 3 5 4 1 4 7 2 5 5
Przykłady problemów obliczeniowych PROGRAMOWANIE LINIOWE (PL) c 1 x 1 + c 2 x 2 + + c n x n max a 11 x 1 + a 12 x 2 + + a 1n x n b 1... a m1 x 1 + a m2 x 2 + + a mn x n b m x 1,...,x n 0 Przykład: 3x 1 + 5x 2 4x 3 max 2x 1 + x 2 120 x 1 x 2 + x 3 300 x 1, x 2, x 3 0
Przykłady problemów obliczeniowych LICZBA DRZEW ROZPINAJACYCH (# SPANNING TREE) Dany jest graf nieskierowany G = (V, E). Ile różnych drzew rozpinajacych znajduje się w tym grafie? LICZBA PRZYPORZADKOWAŃ (PERMANENT) Dany jest graf dwudzielny G = (V 1 V 2, E). Ile różnych przyporzadkowań znajduje się w tym grafie?
Klasyfikacja problemów obliczeniowych Rodzaje problemów obliczeniowych: 1 Problemy decyzyjne OSIAGALNOŚĆ, CYKL HAMILTONA PIERWSZOŚĆ SPEŁNIALNOŚĆ, TAUTOLOGIA PROBLEM STOPU 2 Problemy wyszukiwania ROZKŁAD NA CZYNNIKI 3 Problemy optymalizacyjne NAJKRÓTSZA ŚCIEŻKA PROBLEM KOMIWOJAŻERA PROGRAMOWANIE LINIOWE 4 Problemy zliczania LICZBA DRZEW ROZPINAJACYCH LICZBA PRZYPORZADKOWAŃ
Reprezentacja problemu Każdy problem obliczeniowy Π składa się ze zbioru danych wejściowych (instancji) X oraz zbioru wyników (odpowiedzi) Y. Dla zadanych danych x X chcemy uzyskać poprawna odpowiedź y Y. Założenie (nie restrykcyjne): Każdy obiekt x X (y Y ) można przedstawić w postaci skończonego ciagu bitów (0 i 1). Każdy problem decyzyjny Π można traktować jako obliczanie funkcji f Π : {0, 1} {0, 1}, której wyjściem jest jeden bit. Bit 1 utożsamiamy z odpowiedzia tak a bit 0 z odpowiedzia nie.
Reprezentacja problemu Każdy problem obliczeniowy Π składa się ze zbioru danych wejściowych (instancji) X oraz zbioru wyników (odpowiedzi) Y. Dla zadanych danych x X chcemy uzyskać poprawna odpowiedź y Y. Założenie (nie restrykcyjne): Każdy obiekt x X (y Y ) można przedstawić w postaci skończonego ciagu bitów (0 i 1). Każdy problem decyzyjny Π można traktować jako obliczanie funkcji f Π : {0, 1} {0, 1}, której wyjściem jest jeden bit. Bit 1 utożsamiamy z odpowiedzia tak a bit 0 z odpowiedzia nie.
Reprezentacja problemu Każdy problem obliczeniowy Π składa się ze zbioru danych wejściowych (instancji) X oraz zbioru wyników (odpowiedzi) Y. Dla zadanych danych x X chcemy uzyskać poprawna odpowiedź y Y. Założenie (nie restrykcyjne): Każdy obiekt x X (y Y ) można przedstawić w postaci skończonego ciagu bitów (0 i 1). Każdy problem decyzyjny Π można traktować jako obliczanie funkcji f Π : {0, 1} {0, 1}, której wyjściem jest jeden bit. Bit 1 utożsamiamy z odpowiedzia tak a bit 0 z odpowiedzia nie.
Nieformalnie algorytmem nazywamy program napisany w pewnym języku programowania (np. C), którego danymi wejściowymi sa obiekty z X a wyjściem sa obiekty z Y. Rozmiarem danych wejściowych x X nazywamy liczbę bitów w reprezentacji binarnej x. Algorytm rozwiazuje problem obliczeniowy Π, jeżeli dla każdego wejścia x X kończy pracę i zwraca poprawny wynik y Y.
Nieformalnie algorytmem nazywamy program napisany w pewnym języku programowania (np. C), którego danymi wejściowymi sa obiekty z X a wyjściem sa obiekty z Y. Rozmiarem danych wejściowych x X nazywamy liczbę bitów w reprezentacji binarnej x. Algorytm rozwiazuje problem obliczeniowy Π, jeżeli dla każdego wejścia x X kończy pracę i zwraca poprawny wynik y Y.
Problemy obliczalne (rozstrzygalne) Problem obliczeniowy jest obliczalny (rozstrzygalny), jeżeli istnieje algorytm, który go rozwiazuje. Które z zaprezentowanych wcześniej problemów sa na pewno obliczalne? Jaka metodę można dla nich zastosować?
Notacja asymptotyczna Niech f i g będa dwoma funkcjami z N w N. Mówimy, że f(n) = O(g(n)) jeżeli istnieje stała c > 0 taka, że f(n) cg(n) dla wszystkich dostatecznie dużych n. Podstawowe fakty: a k n k + a k 1 n k 1 + + a 0 = O(n k ) 2 n O(n k ) dla żadnego k = 1, 2,... n! O(2 k ) dla żadnego k = 1, 2,...
Zasoby zużywane przez algorytm Algorytm działa w czasie T(n) jeżeli liczba elementarnych kroków (zawierajacych elementarne instrukcje) dla danych wejściowych o rozmiarze n wynosi nie więcej niż T(n).
Przykład Problemy obliczeniowe WYSZUKAJ Zadana jest tablica 32-bitowych liczb całkowitych A = [a 1, a 2,...,a n ] i 32-bitowa liczba całkowita b. Czy liczba b występuje w tablicy A? for i:=1 to n if a[i]=b then return 1; return 0;
Przykład Problemy obliczeniowe Analiza algorytmu: 1 Do zakodowania < A, b > potrzeba około 32(n + 1) bitów. Stałe pomijamy i przyjmujemy, że rozmiarem danych < A, b > jest n. 2 Krokiem elementarnym jest każdy wiersz algorytmu. Algorytm może zakończyć pracę w drugim kroku (jeżeli a 1 = b) ale w najgorszym przypadku zakończy pracę w kroku 2n + 1 (jeżeli a n = b). Tak więc T(n) = 2n + 1. 3 Algorytm działa w czasie O(n)*. (*) Użycie notacji O uprawomocnia punkt 1 oraz ukrywa szczegóły implementacji. Funkcję f Π można zaimplementować w czasie O(n) na dowolnym komputerze i używajac dowolnego (wystarczajaco silnego) języka programowania.
Przykład Problemy obliczeniowe SPEŁNIALNOŚĆ Zadana jest formuła logiczna φ(x 1,...,x n ). Czy formuła ta jest spełnialna, tj. czy jest prawdziwa dla pewnego wartościowania zmiennych logicznych x 1,...,x n? for i:=0 to n x[i]:=0 {Reprezentacja binarna 0,...,2 n 1 } end for if Spelnia(x,φ) then return 1 for i:=1 to 2 n 1 x:=x+1 {Dodaj 1 do reprezentacji binarnej} if Spelnia(x,φ) then return 1 end for return 0;
Przykład Problemy obliczeniowe Analiza algorytmu: 1 Do zakodowania formuły logicznej φ potrzeba O(n) bitów. Rozmiarem danych wejściowych jest ilość zmiennych n. 2 Funkcja Spełnia(x, φ) nie jest krokiem elementarnym i wymaga czasu f(n). 3 Algorytm działa w czasie O(2 n f(n)).
Czas działania algorytmu Załóżmy, że krok elementarny wykonujemy w czasie 10 6 s. T(n) n = 10 n = 20 n = 50 n = 100 n 0.00001 s. 0.00002 s. 0.00005 s. 0.0001 s. n 2 0.0001 s. 0.0004 s. 0.025 s. 0.01 s. n 3 0.001 s. 0.008 s. 0.125 s. 1 s. 2 n 0.001 s. 1.048 s. ok. 35.7 lat ok. 10 16 lat n! 3.6 s. 77 146 lat ok. 10 50 lat!! Wniosek: Tylko algorytmy O(n), O(n 2 ) i O(n 3 ) sa efektywne!
Czas działania algorytmu Algorytm działa w czasie wielomianowym (jest wielomianowy) jeżeli jego czas działania jest O(n k ) dla pewnego ustalonego k, gdzie n jest rozmiarem danych wejściowych. Przyjmujemy, że problem obliczeniowy może być efektywnie rozwiazany jeżeli potrafimy skonstruować dla niego algorytm wielomianowy.
Podsumowanie
Podsumowanie Aby określić precyzyjnie takie pojęcia jak algorytm, krok elementarny, komórka pamięci, czas obliczeń itd. należy precyzyjnie zdefiniować model obliczeń. W trakcie dalszych wykładów omówione zostana następujace modele obliczeń: 1 Automaty skończone 2 Automaty ze stosem 3 Maszyny Turinga