Dr inż. Jerzy Mieścicki Instytut Informatyki PW Zadania obliczeniowe, algorytmy i złożoność obliczeniowa Wstęp do Informatyki, część 2
Przeszukiwanie listy nieuporządkowanej Zapisy (records), umieszczone w przypadkowej kolejności pole klucza 1 zadany klucz 2 Zadanie: Czy wśród N rekordów jest taki R(i), w którym zawartość wskazanego pola jest zgodna z zadanym kluczem, Jeśli tak odczytaj ten R(i), Jeśli nie napisz nie ma 3... i... N........................ J. Mieścicki, Wstęp do Informatyki, część 2 2
Przeszukiwanie listy nieuporządkowanej 1 2 3... i... N 31 15 2 7... 25 Dowolne liczby całkowite, umieszczone w przypadkowej kolejności, w kolejno ponumerowanych komórkach...? 7 zadana liczba ( klucz ) Zadanie: Czy jest wśród nich zadana liczba (np. 7 ), Jeśli tak wypisz numer komórki, Jeśli nie napisz nie ma J. Mieścicki, Wstęp do Informatyki, część 2 3
Przeszukiwanie listy nieuporządkowanej start Dane: L[1:N] wektor liczb całkowitych, L(i) liczba na i-tej pozycji, N, K, i - liczby całkowite, K klucz, i indeks przeszukiwania. i := 0 i := i+1 i > N nie tak Pisz nie ma stop nie L(i)== K tak Pisz i stop J. Mieścicki, Wstęp do Informatyki, część 2 4
Przeszukiwanie listy nieuporządkowanej start i := 0 i := i+1 Czynności jednorazowe (inicjalizacja, edycja wyników itp.) Czynności wykonywane wielokrotnie, (w najgorszym przypadku N razy) i > N nie tak Pisz nie ma stop nie L(i)== K tak Pisz i stop J. Mieścicki, Wstęp do Informatyki, część 2 5
Przeszukiwanie listy nieuporządkowanej Czas wykonania 0 1 2 3... N Zależność czasu wykonania od rozmiaru danych (N) jest liniowa, Mówi się, że złożoność obliczeniowa (czasowa) jest O(N). J. Mieścicki, Wstęp do Informatyki, część 2 6
Przeszukiwanie listy nieuporządkowanej - ulepszenie start start i := 0 Dopisz K jako L(N+1) i := i+1 i := 0 nie i > N nie L(i)== K tak tak Pisz nie ma stop Pisz i nie Pisz nie ma i := i+1 L(i)== K tak tak i > N nie stop stop stop Pisz i J. Mieścicki, Wstęp do Informatyki, część 2 7
Przeszukiwanie listy nieuporządkowanej Czas wykonania Alg. 1 Alg. 1a W obu przypadkach zależność czasu wykonania od rozmiaru danych (N) jest liniowa, Oba algorytmy mają taką samą złożoność obliczeniową: O(N). 0 1 2 3... N J. Mieścicki, Wstęp do Informatyki, część 2 8
Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Liczby całkowite, umieszczone w kolejno ponumerowanych komórkach uporządkowane narastająco. Zadanie to samo: Czy jest wśród nich zadana liczba (np. 7 ), Jeśli tak wypisz numer komórki, Jeśli nie napisz nie ma J. Mieścicki, Wstęp do Informatyki, część 2 9
Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Oba algorytmy przeszukiwania listy nieuporządkowanej działałyby również w tym przypadku, Ale tu można zastosować lepszy pomysł: dzielenia na połowy. J. Mieścicki, Wstęp do Informatyki, część 2 10
Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Niech np. zadana liczba K = 7 przygraniczna L(5) = 157 > K, więc nie ma czego szukać w dolnej połowie, Powtórzmy całe rozumowanie dla górnej połowy. J. Mieścicki, Wstęp do Informatyki, część 2 11
Przeszukiwanie listy uporządkowanej Dwukrotne zwiększenie N (np. z 8 do 16, z 16 do 32 itd.) dodaje jeden krok do algorytmu dzielenia na połowy, Algorytm ten ma więc złożoność O(log N). Czas O(N) B A O(log N) O(log N) < O(N), ponieważ istnieje takie N*, że dla każdego N > N* czas wykonania T A < T B,... choć dla pewnego zakresu N może być odwrotnie 0 1 N N* J. Mieścicki, Wstęp do Informatyki, część 2 12
Porównywanie grafów G 1 1 2 G 2 1 2 3 3 4 5 6 4 5 6 Czy G 1 jest izomorficzny z G 2? J. Mieścicki, Wstęp do Informatyki, część 2 13
Porównywanie grafów G 1 1 2 G 2 1 4 3 3 4 5 6 2 6 5 Czy G 1 jest izomorficzny z G 2? J. Mieścicki, Wstęp do Informatyki, część 2 14
Porównywanie grafów G 1 1 2 3 od 4 1 2 do 3 4 5 6 Potrzebne jest porównanie dwóch takich tabel, Gdy N jest liczbą węzłów, liczba porównań jest proporcjonalna do N 2, Zatem złożoność O(N 2 ) 5 6 J. Mieścicki, Wstęp do Informatyki, część 2 15
Problem komiwojażera (traveling salesman p.) P 383 343 303 G W 279 647 Problem: znaleźć najkrótszą trasę od W z powrotem do W, odwiedzającą (jednokrotnie) wszystkie N=3 miasta. Inaczej: znaleźć najkrótszy cykl w zadanym grafie. 524 R J. Mieścicki, Wstęp do Informatyki, część 2 16
Problem komiwojażera G W 383 343 G P R P 303 524 W 279 647 R P R R P G R R G G P P G W W W W W W 6 tras do porównania J. Mieścicki, Wstęp do Informatyki, część 2 17
Problem komiwojażera 383 343 G Najkrótsza: WGPRW (lub WRPGW) ma 1529 km, Najdłuższa: WGRPW (lub WPRGW) ma 1817 km. P 303 524 W 279 647 R J. Mieścicki, Wstęp do Informatyki, część 2 18
Problem komiwojażera Dla N = 4: W G P R P R G R G P W W W W W W 4*3*2*1 = N! = 24 trasy do porównania J. Mieścicki, Wstęp do Informatyki, część 2 19
Problem komiwojażera Złożoność obliczeniowa O(N!), Ogromna liczba stosunkowo prostych obliczeń, Załóżmy dla wsparcia wyobraźni, że pewien komputer wylicza i porównuje 10 6 tras na sekundę. 1 doba = 86 400 s, 1 rok = 31 536 000 s, Przy tym założeniu: J. Mieścicki, Wstęp do Informatyki, część 2 20
Problem komiwojażera N 4 9 10 12 14 15 17 18 20 Czas 0.000024 s 0.36 s 3.6 s 8 min > 1 doba > 2 tygodnie ~ 11 lat ~ 200 lat 78 000 lat Eksplozja wykładnicza J. Mieścicki, Wstęp do Informatyki, część 2 21
Program, ale czy algorytm? (Problem Collatza) X liczba całkowita większa od zera; begin; while ~ (X = = 1); if X parzyste then X := X/2 elseif X nieparzyste then X:= 3*X+1; endif; endwhile; end; begin Wprowadź X tak X==1 nie X parzyste tak nie X:=X/2 X:=3X+1 end J. Mieścicki, Wstęp do Informatyki, część 2 22
Superprogram oceniający własność stopu? start Dowolny program P Wczytaj P Można udowodnić, że zadanie zbudowania programu określającego własność stopu dowolnego programu jest nierealizowalne. Stop 1 Tak, P ma własność stopu? Stop2 Nie, P nie ma własności stopu J. Mieścicki, Wstęp do Informatyki, część 2 23
Klasy złożoności obliczeniowej (czasowej) Przeszukiwanie listy nieuporządkowanej O(N), Przeszukiwanie listy uporządkowanej O(log N), Sortowanie O(N log N), Porównywanie grafów O(N 2 ) Wieże Hanoi O(2 N ), Problem komiwojażera O(N!), Problem budowy uniwersalnego programu badającego własność stopu w ogóle nierozstrzygalny trudne obliczeniowo łatwe Nieobliczalne (nierozstrzygalne) Złożoność wykładnicza O(k N ) O(N k ), złożoność wielomianowa lub lepsza J. Mieścicki, Wstęp do Informatyki, część 2 24
Luka algorytmiczna trudne łatwe... O(k NN )... O(N!) O(2 N ) ---------- O(N 10 )... O(N 2 ) O(N) O(logN)... Dla pewnego problemu obliczeniowego: Znany algorytm Górne ograniczenie Luka algorytmiczna Dolne ograniczenie Formalny dowód (że nie może być lepiej) Odkrywanie nowych algorytmów Nowe dowody matematyczne J. Mieścicki, Wstęp do Informatyki, część 2 25
Problemy algorytmicznie zamknięte Jeśli luka algorytmiczna nie istnieje problem jest algorytmicznie zamknięty. Algorytmicznie zamknięte są na przykład: Przeszukiwanie listy nieuporządkowanej: udowodniono, że złożoność nie może być lepsza, niż O(N), znany jest algorytm o złożoności O(N). Sortowanie, O(N logn)... J. Mieścicki, Wstęp do Informatyki, część 2 26
Klasa problemów NP-zupełnych (NPC) trudne łatwe... O(k NN )... O(N!) O(2 N ) ---------- O(N 10 )... O(N 2 ) O(N) O(logN)...? Górne ograniczenie Ogromna luka algorytmiczna NPC Dolne ograniczenie nie znane J. Mieścicki, Wstęp do Informatyki, część 2 27
Klasa problemów NPC NPC od Nondeterministically Polynomial Complete, Każdy problem jest (jako całość) obliczeniowo trudny, Rozwiązanie polega z zasady na wykonaniu ogromnej liczby łatwych obliczeń, każde o wielomianowej (polynomial) złożoności O(N k ), Kolejność ich wykonywania nie jest określona (t.zn. jest niedeterministyczna); W zależności od przypadku (lub szczęścia) rezultat można otrzymać równie dobrze już w pierwszym, jak dopiero w ostatnim kroku obliczeń, J. Mieścicki, Wstęp do Informatyki, część 2 28
Klasa problemów NPC Klasa NPC jest zupełna (complete) w tym sensie, że należące do niej problemy są wzajemnie powiązane za pomocą redukcji, znalezienie rozwiązania wielomianowego dla choćby jednego z problemów oznaczałoby wciągnięcie wszystkich problemów NP do klasy problemów łatwych (wielomianowych, P), i odwrotnie, udowodnienie dla choćby jednego problemu istnienia dolnej granicy powyżej złożoności wielomianowej oznaczałoby wciągnięcie wszystkich problemów NP do klasy problemów trudnych, Czy NP = P? J. Mieścicki, Wstęp do Informatyki, część 2 29
Przykłady problemów NP: problem plecakowy Plecak N rzeczy do zapakowania Zadanie: tak poukładać rzeczy w plecaku, żeby zostało w nim jak najwięcej wolnego (niewykorzystanego) miejsca. Problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 30
Układanie rozkładu zajęć Plan tygodnia Wykłady, laboratoria, ćwiczenia do poukładania... plus kryterium (kryteria) celu... plus więzy (ograniczenia) J. Mieścicki, Wstęp do Informatyki, część 2 31
Pojęcie redukcji Układanie rozkładu zajęć sprowadza się (redukuje się) do problemu plecakowego, Istnieje redukcja przekształcająca problem układania rozkładu zajęć w problem plecakowy. Redukcja A do B: Problem A Problem A Algorytm o złożoności O(N k ) przeliczający dane A na dane B cel A na cel B Problem B Problem B J. Mieścicki, Wstęp do Informatyki, część 2 32
Przykłady problemów NP: kolorowanie mapy Dana jest mapa N państw oraz K kolorów, N > 1, K < N, Zadanie polega na stwierdzeniu (tak nie), czy daną mapę można pokolorować K kolorami w taki sposób, by sąsiadujące państwa się zawsze różniły kolorem. Dla K = 1 rozwiązanie natychmiastowe (nie), Dla K = 2: Tak jedynie gdy w każdym węźle zbiega się parzysta liczba krawędzi, Zatem złożoność O(N 2 ), Dla K = 4 rozwiązanie natychmiastowe (zawsze tak ), Dla K = 3 problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 33
Przykłady problemów NP: kolorowanie grafu 1? 2 4 3 7 5 6 Dany jest graf o N wierzchołkach oraz K kolorów (K < N), Zadanie: rozstrzygnąć (taknie), czy da się pokolorować wierzchołki danego grafu tak, by żadne dwa wierzchołki połączone krawędzią nie były tego samego koloru, Dla 2 < K < N problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 34
J. Mieścicki, Wstęp do Informatyki, część 2 35 Przykłady problemów NP: kolorowanie grafu... Udało się! 3 5 6 2 4 7 1 Zi Ż Ż Ż Ż Ż Ż C Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż 7 6 5 4 3 2 1 I tak dalej, 3 7 = K N możliwości do przejrzenia
Metody algorytmiczne Algorytmy zachłanne (greedy) Podział na pod-zadania ( divide and conquer ) Rozwiązywanie metodą top-down i bottom-up Algorytmy rekurencyjne Algorytmy iteracyjne Programowanie dynamiczne... Algorytmy heurystyczne Algorytmy probabilistyczne Algorytmy ewolucyjne i genetyczne Sieci neuronowe... J. Mieścicki, Wstęp do Informatyki, część 2 36
Algorytmy zachłanne (greedy) P 383 343 303 524 G W 279 647 Zachłanne rozwiązanie problemu komiwojażera: Dla początku w W, rozwiązanie zachłanne jest takie samo, jak optymalne (1529 km) Dla początku w P, otrzymana ( zachłanna ) trasa ma 1642 km (a najdłuższa trasa ma 1817 km) R J. Mieścicki, Wstęp do Informatyki, część 2 37
Dekompozycja na pod-zadania (divide and conquer) Zadanie A Zadanie A Top-down Pod-zadanie A1 Pod-zadanie A2 Pod-zadanie A1.1 Pod-zadanie A1.2 Bottom-up J. Mieścicki, Wstęp do Informatyki, część 2 38
Rozwiązywanie problemu komiwojażera metodą top-down Żoliborz Grochów Centrum Ochota Gocławek Mokotów J. Mieścicki, Wstęp do Informatyki, część 2 39
Rozwiązywanie problemu komiwojażera metodą top-down Problem wyznaczenia trasy Wyznacz trasę między dzielnicami Wyznacz trasę wewnątrz Mokotowa Wyznacz trasę wewnątrz Gocławka... J. Mieścicki, Wstęp do Informatyki, część 2 40
Możliwe heurystyczne rozwiązanie problemu komiwojażera G P 383 343 303 524 W 279 647 R B Znane rozwiązanie dla 4 miast, Dochodzi piąte (B) Podejście konserwatywne : jak najmniej zmian J. Mieścicki, Wstęp do Informatyki, część 2 41
Rekurencja: sortowanie ze scalaniem (merge sort) Sortowanie: porządkowanie listy nieuporządkowanej, Najpierw: operacja scalania (merging) dwóch list uporządkowanych: G 3 5 22 40 i M=merge(G, D) M=merge(G, D) D j 1 2 5 10 33 45 M 1 2 3 5 5 10 22 33 40 45 k J. Mieścicki, Wstęp do Informatyki, część 2 42
Rekurencja: sortowanie ze scalaniem (merge sort) Function m = sort (lista); 1 Oblicz d = długość lista; Oblicz d = długość lista; nie d == 1 d == 1 tak Podziel lista na listad, listag; 2 3 D = sort (listad); G = sort (listag); 5 Zwróć m = lista; Zwróć m = lista; 4 Zwróć m = merge(d, G); J. Mieścicki, Wstęp do Informatyki, część 2 43
Rekurencyjne wykonanie sortowania ze scalaniem 3, 1, 7, 5 1, 3, 5, 7... sort(3,1) sort(7,5) merge 3, 1 1, 3 7, 5 5, 7... sort(3) sort(1) merge... sort(5) sort(7) merge 3 5 3 1 5 7 1 7 d=1 d=1 d=1 d=1 J. Mieścicki, Wstęp do Informatyki, część 2 44
Rekurencyjne wykonanie sortowania ze scalaniem 1 4 2 3 1 1 4 4 2 3 2 3 1 5 1 5 1 5 1 5 J. Mieścicki, Wstęp do Informatyki, część 2 45
Zasada rekurencyjnego wykonania procedury (funkcji) J. Mieścicki, Wstęp do Informatyki, część 2 46
Wieże Hanoi A B C N krążków Zadanie: Przełożyć wszystkie krążki z patyka A na C (korzystając przy tym z pomocniczego B), Wolno brać jeden krążek na raz, Nie wolno kłaść większego krążka na mniejszym. J. Mieścicki, Wstęp do Informatyki, część 2 47
Wieże Hanoi Przenieś N=2 krążki, akt = A, doc = C, pom = B; A B C akt pom doc J. Mieścicki, Wstęp do Informatyki, część 2 48
Rekurencyjne rozwiązanie problemu wież Hanoi Końcowa zawartość prętów A, B, C Początkowa zawartość prętów A, B, C Liczba krążków do przeniesienia Procedure [A, B, C] = hanoi([a, B, C], n, akt, pom, doc); Nazwa pręta aktualnego Np. [A, B, C] = hanoi([a, B, C], 5, A, B, C); Nazwa pręta pomocniczego Nazwa pręta docelowego oznacza: w zadanym zbiorze prętów [A, B, C] przenieś 5 górnych krążków z A na C, korzystając pomocniczo z B i zwróć nową zawartość [A, B, C] J. Mieścicki, Wstęp do Informatyki, część 2 49
Rekurencyjne rozwiązanie problemu wież Hanoi Procedure [A, B, C] = hanoi([a, B, C], n, akt, pom, doc); If n==2 then Przenieś górny krążek z akt na pom; Przenieś górny krążek z akt na doc; Przenieś górny krążęk z pom na doc; elseif n>2; [A, B, C] = hanoi([a, B, C], n-1, akt, doc, pom); Przenieś górny krążek z akt na doc; [A, B, C] = hanoi([a, B, C], n-1, pom, akt, doc); end; J. Mieścicki, Wstęp do Informatyki, część 2 50
Wieże Hanoi Zadanie to jest często używane jako przykład obrazujący zasadę rekurencyjnego wykonania procedury, Zaletą jest zwartość i estetyczne walory kodu programu, Jednak wykonanie zadania dla N krążków oznacza dwukrotne wykonanie tego samego zadania dla (N-1) krążków (plus coś jeszcze), Złożoność jest więc O(2 N ). J. Mieścicki, Wstęp do Informatyki, część 2 51