Algorytmy probabilistyczne
Transkrypt
Algorytmy probabilistyczne
Algorytmy probabilistyczne Wykład 1 Tomasz Krawczyk [email protected] Kraków, semestr zimowy 20015/16 testowanie równania AB = C Wejście: Trzy macierze kwadratowe A, B, C rozmiaru n × n, Wyjście: TAK wtedy i tylko wtedy, gdy AB = C . testowanie równania AB = C Wejście: Trzy macierze kwadratowe A, B, C rozmiaru n × n, Wyjście: TAK wtedy i tylko wtedy, gdy AB = C . ◮ O(n3 ) - trywialnie, testowanie równania AB = C Wejście: Trzy macierze kwadratowe A, B, C rozmiaru n × n, Wyjście: TAK wtedy i tylko wtedy, gdy AB = C . ◮ O(n3 ) - trywialnie, ◮ O(nω ), gdzie ω to czas mnożenia macierzy, testowanie równania AB = C Wejście: Trzy macierze kwadratowe A, B, C rozmiaru n × n, Wyjście: TAK wtedy i tylko wtedy, gdy AB = C . ◮ O(n3 ) - trywialnie, ◮ O(nω ), gdzie ω to czas mnożenia macierzy, ◮ Czy można szybciej? testowanie równania AB = C - podejście probabilistyczne Algorytm MatrixMultiplicationTest: ◮ wylosuj wektor r ∈ {0, 1}n , ◮ oblicz y = A(Br ) oraz z = Cr , ◮ zwróć TAK jeżeli y = z, NIE w przeciwnym przypadku. testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, ◮ jeżeli AB 6= C to algorytm może się mylić, w tym przypadku: testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, ◮ jeżeli AB 6= C to algorytm może się mylić, w tym przypadku: ◮ macierz D = AB − C ma elementy niezerowe, testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, ◮ jeżeli AB 6= C to algorytm może się mylić, w tym przypadku: ◮ macierz D = AB − C ma elementy niezerowe, ◮ załóżmy, że elementy niezerowe są w wierszu pierwszym d = (d1 , ..., dn ) macierzy C ; dodatkowo załóżmy, że d1 6= 0, testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, ◮ jeżeli AB 6= C to algorytm może się mylić, w tym przypadku: ◮ macierz D = AB − C ma elementy niezerowe, ◮ załóżmy, że elementy niezerowe są w wierszu pierwszym d = (d1 , ..., dn ) macierzy C ; dodatkowo załóżmy, że d1 6= 0, ◮ elementy x oraz z są równe na pierwszej współrzędnej wtedy i tylko wtedy, gdy d1 r1 = −(d2 · r2 + . . . + dn · rn ), testowanie równania AB = C (algorytm probabilistyczny) ◮ jeżeli AB = C to algorytm zwróci zawsze odpowiedź TAK, ◮ jeżeli AB 6= C to algorytm może się mylić, w tym przypadku: ◮ macierz D = AB − C ma elementy niezerowe, ◮ załóżmy, że elementy niezerowe są w wierszu pierwszym d = (d1 , ..., dn ) macierzy C ; dodatkowo załóżmy, że d1 6= 0, ◮ elementy x oraz z są równe na pierwszej współrzędnej wtedy i tylko wtedy, gdy d1 r1 = −(d2 · r2 + . . . + dn · rn ), ◮ zakładając, że wartość r1 jest losowana na końcu, powyższa równość jest spełniona z prawdopodobieństwem nie większym od 12 . testowanie równania AB = C ◮ (podejście probabilistyczne) Algorytm MatrixMultiplicationTest działa w czasie O(n2 ), testowanie równania AB = C (podejście probabilistyczne) ◮ Algorytm MatrixMultiplicationTest działa w czasie O(n2 ), ◮ w przypadku, gdy AB = C algorytm zawsze zwraca poprawną odpowiedź, w p.p. daje złą odpowiedź z prawdopodobieństwem nie większym niż 21 , testowanie równania AB = C (podejście probabilistyczne) ◮ Algorytm MatrixMultiplicationTest działa w czasie O(n2 ), ◮ w przypadku, gdy AB = C algorytm zawsze zwraca poprawną odpowiedź, w p.p. daje złą odpowiedź z prawdopodobieństwem nie większym niż 21 , ◮ prawdowpodobieństwo pomyłki możemy ograniczyć do ( 21 )k wykonując algorytm k razy. MatrixMultiplicationTest W analizie powyższego algorytmu skorzystaliśmy z zasady decyzji odłożonych – w przypadku gdy algorytm wykonuje niezależnie wyboru losowych wartości, przyjmujemy zazwyczaj, że wartości te są losowane w kolejności, która ułatwia analizę algorytmu probabilistycznego. algorytmy probabilistyczne (randomizowane) Input Algorytm probabilistyczny Losowe bity Output algorytmy probabilistyczne (randomizowane) Input Algorytm probabilistyczny Output Losowe bity ◮ na wejściu dodatkowo źródło losowych danych (sposób działania algorytmu jest różny nawet dla tych samych danych wejściowych), algorytmy probabilistyczne (randomizowane) Input Algorytm probabilistyczny Output Losowe bity ◮ na wejściu dodatkowo źródło losowych danych (sposób działania algorytmu jest różny nawet dla tych samych danych wejściowych), ◮ CEL: skonstruować algorytm i pokazać, że działa ’zadowalająco’, np. ◮ ◮ zawsze zwraca poprawną odpowiedź w oczekiwanym czasie wielomianowym, z bardzo dużym prawdopodobieństwem działa w czasie wielomianowym, i.t.d. analiza probabilistyczna algorytmów deterministycznych Uwaga: Nie należy mylić analizy probabilistycznej (tzw. analiza czasu oczekiwanego) algorytmu deterministycznego z algorytmem probabilistycznym. W analizie czasu oczekiwanego działania algorytmu zazwyczaj zakładamy, że każde wejście ω jest jednakowo prawdopodobne i badamy wartość oczekiwaną zmiennej losowej X zdefiniowanej nastepująco: X (ω) − ilość operacji wykonanych przez algorytm deterministyczny na wejściu ω. algorytmy probabilistyczne - przestrzeń zdarzeń W przypadku algorytmów probabilistycznych dla ustalonego wejścia przestrzenią zdarzeń jest zbiór wszystkich możliwych ‘wykonań’ algorytmu, zależący od losowych bitów z których korzysta algorytm. Często przestrzeń zdarzeń jest taka sama dla każdego wejścia. (Rand)QuickSort’a Wejście: Ciąg parami różnych liczb elementów S = (S1 , ..., Sn ), Wyjście: Permutacja π elementów S taka, że Sπ(1) 6 ... 6 Sπ(n) . Algorytm (Rand)QuickSort: ◮ wybierz pierwszy element x (wybierz losowo element x, każdy z jednakowym prawdopodobieństwem) z ciągu S, ◮ wykonaj algorytm podziału dzielący ciąg S na dwa podzbiory S1 oraz S2 takie, że S1 < x < S2 , ◮ wywołaj rekurencyjnie algorytm dla ciągów S1 oraz S2 QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. k1 k1 QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. k1 k2 k1 k2 QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. k1 k2 k1 k3 k2 k3 QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. k1 k2 k1 k3 k2 k3 ◮ algorytm deterministyczny - dla ustalonego wejścia jedno drzewo, QuickSort Działanie algorytmu (probabilistycznego i deterministycznego) QuickSort może być wizualizowane za pomocą drzew binarnych: Elementy piwotujące dla procedur partycjonowania są korzeniami odpowiednich poddrzew. Bez straty ogólności możemy przyjąć, że sortujemy zbiór liczb {1, . . . , n}. k1 k2 k1 k3 k2 k3 ◮ algorytm deterministyczny - dla ustalonego wejścia jedno drzewo, ◮ algorytm probabilistyczny - dla ustalonego wejścia każde ‘poprawne’ drzewo jest możliwe. analiza probabilistyczna deterministycznego QuickSort’a ◮ Ωn - zbiór wszystkich permutacji n−elementowych, ◮ każda permutacja ω jest jednakowo prawdopodobna, czyli P(ω) = 1 , n! RandQuickSort – analiza ◮ ustalamy permutację wejściową, ◮ ustalamy przestrzeń możliwych zdarzeń eksperymentu: Ωn - wszystkie ‘poprawne’ drzewa obliczeń algorytmu RandQuickSort, Zadanie Określ prawdopodobieństwo P(ω) każdego zdarzenia ω ∈ Ωn . Przekonaj się, że rozkład prawdopodobieństwa nie zależy od danych wejściowych. RandQuickSort – analiza Dla każdej pary elementów i, j w S pytamy, czy były one porównywane. ◮ Wprowadźmy zmienną losową: 1 elementy i oraz j były porównywane, Xij = 0 w przeciwnym przypadku. RandQuickSort – analiza Dla każdej pary elementów i, j w S pytamy, czy były one porównywane. ◮ Wprowadźmy zmienną losową: 1 elementy i oraz j były porównywane, Xij = 0 w przeciwnym przypadku. ◮ Oczekiwana liczba porównań wykonana przez QuickSort, to wartość oczekiwana zmiennej losowej X = n X n X Xij , i=1 j=i+1 czyli: n X n n X n X X Xij ) = E (Xij ), E (X ) = E ( i=1 j=i+1 i=1 j=i+1 przy czym druga równość wynika z liniowości wartości oczekiwanej. RandQuickSort – analiza Wartość E (Xij ) jest równa P(Xij = 1). Obserwacje: ◮ Xij (ω) = 1 tylko dla tych drzew ω, w których i jest przodkiem j bądź j jest przodkiem i, RandQuickSort – analiza Wartość E (Xij ) jest równa P(Xij = 1). Obserwacje: ◮ Xij (ω) = 1 tylko dla tych drzew ω, w których i jest przodkiem j bądź j jest przodkiem i, ◮ od momentu, gdy x taki, że i < x < j został wybrany jako piwot, i oraz j nie będą już porównane (i jest w lewym poddrzewie x, j w prawym) RandQuickSort – analiza Wartość E (Xij ) jest równa P(Xij = 1). Obserwacje: ◮ Xij (ω) = 1 tylko dla tych drzew ω, w których i jest przodkiem j bądź j jest przodkiem i, ◮ od momentu, gdy x taki, że i < x < j został wybrany jako piwot, i oraz j nie będą już porównane (i jest w lewym poddrzewie x, j w prawym) ◮ Xij = 0 wtedy i tylko wtedy, gdy i < x < j został wybrany wcześniej jako piwot niż i i j. RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , ◮ zdarzenia Ai dla i = 1, ..., n − |I | + 1 są rozłączne i tworzą układ zupełny zdarzeń, RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , ◮ zdarzenia Ai dla i = 1, ..., n − |I | + 1 są rozłączne i tworzą układ zupełny zdarzeń, ◮ P(Xij = 1) = Pn−|I |+1 k=1 P(Xij = 1|Ak ) · P(Ak ), RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , ◮ zdarzenia Ai dla i = 1, ..., n − |I | + 1 są rozłączne i tworzą układ zupełny zdarzeń, ◮ P(Xij = 1) = Pn−|I |+1 k=1 P(Xij = 1|Ak ) · P(Ak ), ◮ P(Xij = 1|Ak ) = P(i bądź j wybrano jako pierwszy| Ak ), RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , ◮ zdarzenia Ai dla i = 1, ..., n − |I | + 1 są rozłączne i tworzą układ zupełny zdarzeń, ◮ P(Xij = 1) = Pn−|I |+1 P(Xij = 1|Ak ) · P(Ak ), Pn−|I |+1 2 j−i +1 k=1 ◮ P(Xij = 1|Ak ) = P(i bądź j wybrano jako pierwszy| Ak ), ◮ P(Xij = 1) = k=1 · P(Ak ) = 2 . j−i +1 RandQuickSort – analiza Niech I = {i, . . . , j}. Wtedy |I | = j − i + 1. ◮ Ak - zdarzenie, że w k−tym kroku po raz pierwszy wybrano element ze zbioru I , ◮ zdarzenia Ai dla i = 1, ..., n − |I | + 1 są rozłączne i tworzą układ zupełny zdarzeń, ◮ P(Xij = 1) = Pn−|I |+1 P(Xij = 1|Ak ) · P(Ak ), Pn−|I |+1 2 j−i +1 k=1 ◮ P(Xij = 1|Ak ) = P(i bądź j wybrano jako pierwszy| Ak ), ◮ P(Xij = 1) = k=1 · P(Ak ) = 2 . j−i +1 P Pn P 2 i <j E (Xij ) = i =1 i <j j−i +1 6 Pn Pn 1 6 2 i =1 k=1 k 6 nHn = 2n(log n + O(1)). ◮ E (Xn ) = MIN-CUT - minimalne cięcie w multigrafie Wejście: Multigraf G=(V,E), Wyjście: Minimalny przekrój (cięcie) w G (przekrój to zbiór krawędzi, którego usunięcie rozspójnia graf). MIN-CUT - minimalne cięcie w multigrafie Wejście: Multigraf G=(V,E), Wyjście: Minimalny przekrój (cięcie) w G (przekrój to zbiór krawędzi, którego usunięcie rozspójnia graf). MIN-CUT - minimalne cięcie w multigrafie Wejście: Multigraf G=(V,E), Wyjście: Minimalny przekrój (cięcie) w G (przekrój to zbiór krawędzi, którego usunięcie rozspójnia graf). MIN-CUT - minimalne cięcie w multigrafie Wejście: Multigraf G=(V,E), Wyjście: Minimalny przekrój (cięcie) w G (przekrój to zbiór krawędzi, którego usunięcie rozspójnia graf). MIN-CUT - minimalne cięcie w multigrafie Wejście: Multigraf G=(V,E), Wyjście: Minimalny przekrój (cięcie) w G (przekrój to zbiór krawędzi, którego usunięcie rozspójnia graf). Rozmiar minimalnego cięcia - 2. MIN-CUT - algorytmy deterministyczne Przez minimialne s − t cięcie w grafie G rozumiemy minimalne cięcie, które rozspójnia graf w taki sposób, że wierzchołki s oraz t znajdują się w różnych składowych spójnych. MIN-CUT - algorytmy deterministyczne Przez minimialne s − t cięcie w grafie G rozumiemy minimalne cięcie, które rozspójnia graf w taki sposób, że wierzchołki s oraz t znajdują się w różnych składowych spójnych. Zadanie Pokaż, jak znaleźć minimalne s − t cięcie w grafie G wykorzystując n − 1 krotnie algorytm znajdowania maksymalnego przepływu w sieci. MIN-CUT - algorytmy deterministyczne Rezultaty: 2 ◮ O(nm log( n )) - algorytm znajdowania maksymalnego przepływu w m sieciach, Goldberg, Tarjan’ 88, 2 ◮ (n − 1) × O(nm log( n )) - algorytm dla MIN-CUT polegający na m (n − 1)−krotnym wywołaniu algorytmu dla MIN-s-t-CUT (s−dowolny, ustalony; t przyjmuje wszystkie wartości ze zbioru V \ {s}), Gomory, Hu ’61, 2 ◮ problem MIN-CUT może być zrealizowany w czasie O(nm log( n )), Hao, m Orlin’94, ◮ O(n2 log O(1) n) - algorytm probabilistyczny Kargera. MIN-CUT - podejście probabilistyczne Probabilistyczny algorytm Contract dla problemu MIN-CUT, Karger ’92: 1. wylosuj krawędź e = (u, v ) z G , 2. ‘ściągnij’ krawędź e zachowując krawędzie wielokrotne ale usuwając pętle (jeżeli istniały krawędzie (u, x) oraz (v , x) to zachowujemy obie), 3. powtarzaj 1. i 2. dopóki graf ma więcej niż dwa wierzchołki, 4. wypisz powstałe krawędzie jako MIN-CUT. Contract - przykład 3 4 1 6 2 5 Contract - przykład 3 4 e 1 6 2 5 Contract - przykład 3 4 e 1 6 2 5 3 1 6 2, 4 5 Contract - przykład 3 4 e 1 6 2 5 3 1 e 2, 4 5 6 Contract - przykład 3 4 3 e 1 6 2 2, 4 5 3 1 e 2, 4 5 1 6 5, 6 Contract - przykład 3 4 3 e 1 6 2 2, 4 5 3 1 e 2, 4 5 e 1 6 5, 6 Contract - przykład 3 4 3 e 1 6 2 e 1 5 2, 4 5, 6 2, 3, 4 5, 6 3 1 e 2, 4 5 6 1 Contract - przykład 1 2, 3, 4 5, 6 Contract - przykład 1 e 2, 3, 4 5, 6 Contract - przykład 1 e 2, 3, 4 1 2, 3, 4, 5, 6 5, 6 Contract - przykład Obserwacja: ◮ W każdym etapie działania algorytmu cięcie w grafie zredukowanym jest również cięciem w grafie wyjściowym. ◮ Algorytm zwraca cięcie minimalne C w.t.w., gdy w żadnym kroku nie została ściągnieta krawędź z C . Contract - przykład Obserwacja: ◮ W każdym etapie działania algorytmu cięcie w grafie zredukowanym jest również cięciem w grafie wyjściowym. ◮ Algorytm zwraca cięcie minimalne C w.t.w., gdy w żadnym kroku nie została ściągnieta krawędź z C . 3 3 1 6 2, 4 5 4 1 6 2 5 Contract - przykład Obserwacja: ◮ W każdym etapie działania algorytmu cięcie w grafie zredukowanym jest również cięciem w grafie wyjściowym. ◮ Algorytm zwraca cięcie minimalne C w.t.w., gdy w żadnym kroku nie została ściągnieta krawędź z C . 3 3 1 6 2, 4 5 4 1 6 2 5 Contract – analiza Analiza: ◮ Zdarzenie elementarne ω, ściągnięcie kolejno krawędzi e1 , . . . , en−2 , ◮ Niech |ei | będzie liczbą krawędzi w grafie po ściągnięciu e1 , . . . , ei , wtedy P(ω) = 1 1 1 · · ... · . |E | |e1 | |en−2 | Contract Analiza: ◮ ustalmy minimalne cięcie C w G . Niech |C | = k, ◮ liczba krawędzi w grafie G , e(G ) ≥ kn , 2 ◮ po każdej iteracji stopień dowolnego wierzchołka grafu zredukowanego jest większy od k, ◮ algorytm zwróci inne cięcie niż C wtedy i tylko wtedy, gdy któraś krawędź z C zostanie ściągnięta w pewnym kroku algorytmu, ◮ niech A będzie zdarzeniem, że algorytm znajdzie C (w każdym kroku algorytmu wybierana jest krawędź spoza C ), ◮ P(A) =? Contract Analiza: ◮ Ai − zdarzenie, że w i−tym kroku nie wybrano krawędzi z C , ◮ P(A) = P(A1 ∩ . . . ∩ An−2 ) = P( ◮ ze wzoru łańcuchowego: P( Tn−2 i =1 Ai ) = Tn−2 i =1 Ai ), P(A1 ) · P(A2 |A1 ) · ·P(A3 |A1 ∩ A2 )· · . . . · P(An−2 |A1 ∩ . . . ∩ An−3 ), Contract Analiza: ◮ Ai - zdarzenie, że w i-tym kroku losujemy krawędź spoza C , ◮ P(A1 ) = e(G )−k e(G ) = 1− k e(G ) ≥ 1 − n2 , ◮ po ściągnięciu krawędzi spoza C , każdy graf ma co najmniej krawędzi, stąd: P(A2 |A1 ) ≥ 1 − ◮ podobnie P(Ai |A1 ∩ . . . ∩ Ai −1 ) = 2 , n−1 e(Gi −1 )−k e(Gi −1 ) ≥1− 2 , n−i +1 ◮ ostatecznie, ze wzoru łańcuchowego otrzymujemy: P(A) ≥ n−2 Y (1 − i =1 2 2 )= . n−i +1 n(n − 1) (n−1)k 2 Contract Podsumowanie: ◮ prawdopodobieństwo błędu dla MIN-CUT jest ograniczone przez 1 1 − n 2 ◮ jeżeli powtórzymy eksperyment a n 2 prawdopodobieństwo błędu do 1 1 − n 2 ! . razy, zmniejszymy !a(n) 2 ≃ 1 ea ◮ dla a = ln n prawdopodobieństwo błędu jest ograniczone przez 1 . n klasyfikacja algorytmów probabilistycznych Algorytmy probabilistyczne dzielimy na algorytmy typu: ◮ LAS VEGAS, które zawsze zwracają poprawną odpowiedź, (QuickSort) ◮ MONTE CARLO, które mogą dać odpowiedź błędną z pewnym prawdopodobieństwem, (Contract). Dla problemów decyzyjnych wyróżnia się algorytmy Monte Carlo: ◮ z jednostronnym błędem (MatrixMultiplicationTest) ◮ z dwustronnym błędem.