Siedem cudów informatyki czyli o algorytmach zdumiewajacych Łukasz Kowalik kowalik@mimuw.edu.pl Instytut Informatyki Uniwersytet Warszawski Łukasz Kowalik, Siedem cudów informatyki p. 1/25
Problem 1: mnożenie 8 5 3 1 7 2 2 3 5 4 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 7 2 2 3 5 4 8 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 2 8 5 3 1 6 2 2 3 5 4 4 8 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 2 8 5 3 1 6 2 2 3 5 4 6 4 8 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 4 2 6 5 8 1 0 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 4 2 6 5 8 1 0 2 5 5 9 4 8 6 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 4 2 6 5 8 1 0 2 5 5 9 4 8 6 1 7 0 6 3 2 4 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 4 2 6 5 8 1 0 2 5 5 9 4 8 6 + 1 7 0 6 3 2 4 2 0 0 8 3 4 3 3 4 8 Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Problem 1: mnożenie 8 5 3 1 6 2 2 3 5 4 3 4 1 2 6 4 8 4 2 6 5 8 1 0 2 5 5 9 4 8 6 + 1 7 0 6 3 2 4 2 0 0 8 3 4 3 3 4 8 liczba n-cyfrowa liczba m-cyfrowa Wykonuje się m (n + 1) mnożeń oraz (m 1) (n 1) dodawań. Łukasz Kowalik, Siedem cudów informatyki p. 2/25
Czas działania algorytmu Wniosek: Szkolny algorytm mnożenia liczby n-cyfrowej przez liczbę m-cyfrowa działa w czasie O(mn). Łukasz Kowalik, Siedem cudów informatyki p. 3/25
Czas działania algorytmu Wniosek: Szkolny algorytm mnożenia liczby n-cyfrowej przez liczbę m-cyfrowa działa w czasie O(mn). Pytanie: Czy można lepiej? Tzn. szybciej? Łukasz Kowalik, Siedem cudów informatyki p. 3/25
Trochę arytmetyki... Niech a, b będa liczbami 2n-cyfrowymi. Przedstawimy liczby a i b w następujacej postaci: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, gdzie a 1, a 2, b 1, b 2 maja po n cyfr. Wtedy: ab = (10 n a 1 + a 2 ) (10 n b 1 + b 2 ) = 10 2n a 1 b 1 + 10 n (a 1 b 2 + a 2 b 1 ) + a 2 b 2. Mnożenie przez 10 k zajmuje czas O(k). Mamy też 3 operacje dodawania i 4 operacje mnożenia. Łukasz Kowalik, Siedem cudów informatyki p. 4/25
Dziel i zwyciężaj: próba 1 a, b maja n = 2 k cyfr. if a i b maja po 1 cyfrze then return a b else a 1 a div 10 n/2 ; a 2 a mod 10 n/2 b 1 b div 10 n/2 ; b 2 a mod 10 n/2 X ILOCZYN (a 1, b 1 ); Y ILOCZYN (a 2, b 1 ) Z ILOCZYN (a 1, b 2 ); V ILOCZYN (a 2, b 2 ) return 10 2n X + 10 n (Y + Z) + V. procedure ILOCZYN(a,b) Łukasz Kowalik, Siedem cudów informatyki p. 5/25
Więcej arytmetyki... Wtedy: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, 10 2n a 1 b 1 +10 n a 1 b 1 +10 n (a 1 a 2 ) (b 2 b 1 )+ +10 n a 2 b 2 +a 2 b 2 = Łukasz Kowalik, Siedem cudów informatyki p. 6/25
Więcej arytmetyki... Wtedy: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, 10 2n a 1 b 1 +10 n a 1 b 1 +10 n (a 1 a 2 ) (b 2 b 1 )+ +10 n a 2 b 2 +a 2 b 2 = 10 2n a 1 b 1 +10 n a 1 b 1 + 10 n a 1 b 2 10 n a 1 b 1 10 n a 2 b 2 + 10 n a 2 b 1 +10 n a 2 b 2 + a 2 b 2 = Łukasz Kowalik, Siedem cudów informatyki p. 6/25
Więcej arytmetyki... Wtedy: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, 10 2n a 1 b 1 +10 n a 1 b 1 +10 n (a 1 a 2 ) (b 2 b 1 )+ +10 n a 2 b 2 +a 2 b 2 = 10 2n a 1 b 1 +10 n a 1 b 1 + 10 n a 1 b 2 10 n a 1 b 1 10 n a 2 b 2 + 10 n a 2 b 1 +10 n a 2 b 2 + a 2 b 2 = = 10 2n a 1 b 1 + 10 n a 1 b 2 + 10 n a 2 b 1 + a 2 b 2 = ab. Łukasz Kowalik, Siedem cudów informatyki p. 6/25
Więcej arytmetyki... Wtedy: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, 10 2n a 1 b 1 +10 n a 1 b 1 +10 n (a 1 a 2 ) (b 2 b 1 )+ +10 n a 2 b 2 +a 2 b 2 = 10 2n a 1 b 1 +10 n a 1 b 1 + 10 n a 1 b 2 10 n a 1 b 1 10 n a 2 b 2 + 10 n a 2 b 1 +10 n a 2 b 2 + a 2 b 2 = = 10 2n a 1 b 1 + 10 n a 1 b 2 + 10 n a 2 b 1 + a 2 b 2 = ab. 3 mnożenia Łukasz Kowalik, Siedem cudów informatyki p. 6/25
Więcej arytmetyki... Wtedy: a = 10 n a 1 + a 2, b = 10 n b 1 + b 2, 10 2n a 1 b 1 +10 n a 1 b 1 +10 n (a 1 a 2 ) (b 2 b 1 )+ +10 n a 2 b 2 +a 2 b 2 = 10 2n a 1 b 1 +10 n a 1 b 1 + 10 n a 1 b 2 10 n a 1 b 1 10 n a 2 b 2 + 10 n a 2 b 1 +10 n a 2 b 2 + a 2 b 2 = = 10 2n a 1 b 1 + 10 n a 1 b 2 + 10 n a 2 b 1 + a 2 b 2 = ab. 3 mnożenia, 6 dodawań/odejmowań Łukasz Kowalik, Siedem cudów informatyki p. 6/25
Dziel i zwyciężaj: próba 2 a, b maja n = 2 k cyfr. if a i b maja po 1 cyfrze then return a b else a 1 a div 10 n/2 ; a 2 a mod 10 n/2 b 1 b div 10 n/2 ; b 2 a mod 10 n/2 X ILOCZYN (a 1, b 1 ) Y ILOCZYN (a 1 a 2, b 2 b 1 ) Z ILOCZYN (a 2, b 2 ) return 10 2n X + 10 n X + 10 n Y + 10 n Z + Z. procedure ILOCZYN(a,b) Łukasz Kowalik, Siedem cudów informatyki p. 7/25
Dziel i zwyciężaj: próba 2 Wniosek: Nowy algorytm mnoży dwie liczby n-cyfrowe w czasie O(n log 2 3 ) = O(n 1,585 ). Przypomnijmy: Algorytm szkolny robi to w czasie O(n 2 ). Łukasz Kowalik, Siedem cudów informatyki p. 8/25
Dziel i zwyciężaj: próba 2 Wniosek: Nowy algorytm mnoży dwie liczby n-cyfrowe w czasie O(n log 2 3 ) = O(n 1,585 ). Przypomnijmy: Algorytm szkolny robi to w czasie O(n 2 ). Twierdzenie Można uzyskać czas O(n log n log log n). Łukasz Kowalik, Siedem cudów informatyki p. 8/25
Dziel i zwyciężaj: próba 2 Wniosek: Nowy algorytm mnoży dwie liczby n-cyfrowe w czasie O(n log 2 3 ) = O(n 1,585 ). Przypomnijmy: Algorytm szkolny robi to w czasie O(n 2 ). Twierdzenie Można uzyskać czas O(n log n log log n). Uwaga. Stosujac podobne tricki można mnożyć macierze n n w czasie lepszym niż O(n 3 ) np. algorytm Strassena O(n log 2 7 ) = O(n 2,81 ). Łukasz Kowalik, Siedem cudów informatyki p. 8/25
Skierowany cykl Eulera Dane: Graf skierowany G. Problem: Znaleźć cykl, który zawiera każda krawędź dokładnie raz. Łukasz Kowalik, Siedem cudów informatyki p. 9/25
Skierowany cykl Eulera Dane: Graf skierowany G. Problem: Znaleźć cykl, który zawiera każda krawędź dokładnie raz. Łukasz Kowalik, Siedem cudów informatyki p. 9/25
Skierowany cykl Eulera Fakt: Taki cykl istnieje wtedy i tylko wtedy gdy: (1) do każdego wierzchołka wchodzi tyle samo krawędzi co z niego wychodzi, (2) po zignorowaniu kierunków krawędzi istnieje ścieżka łacz aca dowolne dwa wierzchołki (spójność). Łukasz Kowalik, Siedem cudów informatyki p. 10/25
Algorytm 1. wybierz dowolny wierzchołek. Oznaczmy go przez v. v Łukasz Kowalik, Siedem cudów informatyki p. 11/25
Algorytm 2. Odwróć krawędzie. v Łukasz Kowalik, Siedem cudów informatyki p. 12/25
Algorytm 2. Odwróć krawędzie. v Łukasz Kowalik, Siedem cudów informatyki p. 12/25
Algorytm 3. Wyjdź z v i znajdź ścieżki do innych wierzchołków ale tak, żeby nigdy nie wchodzić do już odwiedzonego wierzchołka. Krawędzie tych ścieżek pomalujemy na zielono. v Łukasz Kowalik, Siedem cudów informatyki p. 13/25
Algorytm 4. Ponownie odwróć krawędzie. v Łukasz Kowalik, Siedem cudów informatyki p. 14/25
Algorytm 4. Ponownie odwróć krawędzie. v Łukasz Kowalik, Siedem cudów informatyki p. 14/25
Algorytm 5. Znajdź cykl: wyjdź z v i idź na oślep, wybierajac zielona krawędź tylko gdy nie ma innego wyjścia. v Łukasz Kowalik, Siedem cudów informatyki p. 15/25
Algorytm 5. Znajdź cykl: wyjdź z v i idź na oślep, wybierajac zielona krawędź tylko gdy nie ma innego wyjścia. v Łukasz Kowalik, Siedem cudów informatyki p. 15/25
Operacja ściagania krawędzi Łukasz Kowalik, Siedem cudów informatyki p. 16/25
Minory Graf H jest minorem G, gdy możemy otrzymać H poprzez usuwanie wierzchołków i krawędzi, ściaganie krawędzi. Łukasz Kowalik, Siedem cudów informatyki p. 17/25
Minory Mówimy też, że G zawiera H jako minor oraz G zawiera podgraf ściągalny do H. Fakt 1 Rodzina grafów planarnych jest zamknięta ze względu na branie minorów. Łukasz Kowalik, Siedem cudów informatyki p. 18/25
Twierdzenie Kuratowskiego Twierdzenie (Kuratowski) Graf jest planarny wtedy i tylko wtedy gdy nie zawiera K 5 ani K 3,3 jako minora. K 5 K 3,3 Łukasz Kowalik, Siedem cudów informatyki p. 19/25
Pytanie Erdősa Pytanie (Erdős 1930) Czy tw. Kuratowskiego można uogólnić na inne powierzchnie? Dla pewnych powierzchni (np. tzw. płaszczyzna rzutowa) udało się znaleźć takie zbiory. Ale np. dla torusa jak dotad nie. Pytanie (Erdős 1930). Czy dla każdej powierzchni istnieje skończony zbiór zabronionych minorów? Łukasz Kowalik, Siedem cudów informatyki p. 20/25
Grafowe Twierdzenie o Minorach Twierdzenie (Robertson, Seymour 1981-1985) Każdy nieskończony zbiór grafów skończonych zawiera takie dwa grafy, że jeden jest minorem drugiego. Łukasz Kowalik, Siedem cudów informatyki p. 21/25
Wniosek z GTM Wniosek. Dowolna własność grafowa P G zamknięta na branie minorów może być wyrażona przez skończony zbiór zabronionych minorów. Tymczasem... Dla dowolnej powierzchni S zbiór grafów, które można narysować na S bez przecięć krawędzi jest zamknięty na branie minorów. Łukasz Kowalik, Siedem cudów informatyki p. 22/25
GTM i algorytmy Twierdzenie (Robertson & Seymour). Dla każdego ustalonego grafu H istnieje algorytm, który dla dowolnego n-wierzchołkowego grafu G sprawdzi w czasie O(n 3 ) czy H jest minorem G. Łukasz Kowalik, Siedem cudów informatyki p. 23/25
Rysowanie grafów na torusie Wniosek: Istnieje algorytm o złożoności O(n 3 ), który sprawdzi, czy dany graf można narysować na torusie. Łukasz Kowalik, Siedem cudów informatyki p. 24/25
Inny problem Czy dany graf G można umieścić w przestrzeni 3D tak żeby każdy jego cykl był węzłem prostym? Oto przykłady węzłów, które nie sa proste (nie da się ich rozplatać aby dostać okrag). Łukasz Kowalik, Siedem cudów informatyki p. 25/25
Inny problem Czy dany graf G można umieścić w przestrzeni 3D tak żeby każdy jego cykl był węzłem prostym? Takie grafy sa zamknięte na branie minorów. Wniosek: Dla naszego problemu istnieje algorytm o czasie O(n 3 ). Ale... Nie znamy takiego algorytmu! Co więcej, nie znamy ŻADNEGO algorytmu, który rozwiazuje ten problem. Łukasz Kowalik, Siedem cudów informatyki p. 25/25