Algorytm Hoare’a

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Algorytm Hoare’aalgorytm rozwiązujący problem selekcji, czyli wyznaczający k-tą co do wielkości (k-tą statystykę pozycyjną) spośród danych n liczb[1]. Opiera się na pomyśle podobnym do algorytmu sortowania szybkiego, czyli na podziale zbioru na elementy mniejsze i większe od wybranego[1]. Pomysłodawcą obu algorytmów jest Antony Hoare[2].

Działanie

Działanie algorytmu jest następujące, powiedzmy, że dany jest zbiór A zawierający n liczb. Zadanie polega na wybraniu k-tej co do wielkości. Wybieramy losową liczbę l ze zbioru A i dzielimy ten zbiór na elementy mniejsze lub równe od l (zbiór A) oraz liczby większe od niej (zbiór A>). Następnie, jeśli moc zbioru A jest większa lub równa k, to rekurencyjnie szukamy w tym zbiorze k-tego elementu, w przeciwnym przypadku rekurencyjnie szukamy w zbiorze A> elementu k|A| co do wielkości.

Złożoność czasowa

Pesymistyczna złożoność czasowa to O(n2), możemy bowiem (podobnie jak w QuickSorcie) wybierać cały czas do podziału największy element.

Równanie na oczekiwaną złożoność czasową w modelu permutacyjnym[1]:

f(n)={0,jeżeli n=1(n+1)+1n(j=1nkf(nj)+j=nk+2nf(j1)),wpp.

Średnia złożoność jest liniowa.

Podany algorytm nie jest optymalny dla problemu selekcji, gdyż algorytm magicznych piątek działa pesymistycznie w czasie liniowym, więc jest znacząco lepszy.

Zobacz też

Przypisy

Szablon:Przypisy

Bibliografia

  • Selekcja (materiały dydaktyczne MIMUW na studia informatyczne I stopnia).