Algorytm magicznych piątek

Z Wikipedii, wolnej encyklopedii

Algorytm magicznych piątek (znany też jako „mediana median”) – algorytm rozwiązujący problem selekcji, czyli znalezienia -tej co do wielkości spośród 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.

Idea algorytmu[edytuj | edytuj kod]

Załóżmy, że dany jest zbiór liczb szukamy w nim -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 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 taki element, który zapewni podział na stosunkowo równe zbiory elementów mniejszych i większych

Algorytm[edytuj | edytuj kod]

Algorytm jest rekurencyjny. Dzielimy zbiór na piątki liczb (ewentualnie ostatnia piątka jest niepełna) i spośród każdej piątki wybieramy medianę. Oznaczmy zbiór tych median przez Następnie wywołujemy rekurencyjnie algorytm magicznych piątek dla pary czyli innymi słowy szukamy w zbiorze mediany, niech wynikiem będzie liczba

Liczba jest dobrym elementem do wykonania podziału. Zauważmy, że w zbiorze w każdej z piątek, której reprezentant okazał się mniejszy lub równy od przynajmniej połowa (a w większości przypadków trzy piąte) elementów jest nie większa od Zatem przynajmniej jedna czwarta liczb ze zbioru jest nie większa od analogicznie można uzasadnić, że przynajmniej jedna czwarta jest nie mniejsza.

Dokonujemy zatem podziału zbioru na liczby mniejsze od (zbiór ), równe (zbiór ) oraz większe od niej (zbiór ). Jeśli to wywołujemy rekurencyjnie algorytm magicznych piątek dla pary W przeciwnym wypadku jeśli to zwracamy jako -tą liczbę, a jeśli nie, to wywołujemy rekurencyjnie algorytm dla pary

Analiza złożoności[edytuj | edytuj kod]

Niech 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 (rekurencyjnie) mediany zbioru 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.

Bibliografia[edytuj | edytuj kod]