Algorytm magicznych piątek
Z Wikipedii
Algorytm magicznych piątek to algorytm rozwiązujący problem selekcji, czyli znalezienia k-tej co do wielkości spośród n liczb. Zaproponowali go Blum, Floyd, Pratt, Rivest i Tarjan w roku 1973. Jest on oparty na prostszym algorytmie rozwiązującym ten sam problem, algorytmie Hoare'a.
Spis treści |
[edytuj] Idea algorytmu
Załóżmy, że dany jest zbiór n liczb A, szukamy w nim k-tej liczby co do wielkości. Pomysł polega na ulepszeniu algorytmu Hoare'a, mianowicie na dokonaniu podziału względem sensownego elementu i to tym razem na trzy zbiory, mniejszych, równych oraz większych od wybranej liczby. Przypomnijmy, że algorytm Hoare'a polega na wybraniu losowego elementu, dokonaniu podziału zbioru A na elementy mniejsze lub równe od niego oraz na elementy większe od niego, a następnie rekurencyjne wywołanie algorytmu dla odpowiedniego z tych dwóch zbiorów. Idea algorytmu magicznych piątek polega na tym, żeby znaleźć w zbiorze A taki element, który zapewni podział na stosunkowo równe zbiory elementów mniejszych A < i większych A > .
[edytuj] Algorytm
Algorytm jest rekurencyjny. Dzielimy zbiór A na piątki liczb (ewentualnie ostatnia piątka jest niepełna) i spośród każdej piątki wybieramy medianę, czyli w każdej pełnej piątce liczbę trzecią co do wielkości. Oznaczmy zbiór tych median przez A5. Następnie wywołujemy rekurencyjnie algorytm magicznych piątek dla pary , czyli innymi słowy szukamy w zbiorze A5 mediany, niech wynikiem będzie liczba m5.
Liczba m5 jest dobrym elementem do wykonania podziału. Zauważmy, że w zbiorze A, w każdej z piątek, której reprezentant okazał się mniejszy lub równy od m5 przynajmniej połowa (a w większości przypadków trzy piąte) elementów jest nie większa od m5. Zatem przynajmniej jedna czwarta liczb ze zbioru A jest nie większa od m5, analogicznie można uzasadnić, że przynajmniej jedna czwarta jest nie mniejsza.
Dokonujemy zatem podziału zbioru A na liczby mniejsze od m5 (zbiór A < ), równe m5 (zbiór A = ) oraz większe od niej (zbiór A > ). Jeśli to wywołujemy rekurencyjnie algorytm magicznych piątek dla pary . W przeciwnym wypadku jeśli to zwracamy m5 jako k-tą liczbę, a jeśli nie, to wywołujemy rekurencyjnie algorytm dla pary .
[edytuj] Analiza złożoności
Niech T(n) oznacza złożoność czasową algorytmu. Zauważmy, że wykonanie algorytmu składa się z trzech kroków
- znajdowania median piątek, wykonywanego w czasie
- wybierania mediany zbioru A5, wykonywanego w czasie
- wykonania wywołania rekurencyjnego, wykonywanego co najwyżej w czasie
Jak wcześniej zauważyliśmy , zatem szacując czas wykonania całego algorytmu przez sumę maksymalnych czasów wykonań kroków dostajemy nierówność
- .
Stosując standardowe metody rozwiązywania nierówności asymptotycznych (kluczowe jest, że ) dostajemy, że algorytm magicznych piątek nawet pesymistycznie jest liniowy.