Algorytmy i struktury danych/Selekcja: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
|||
| Linia 1: | Linia 1: | ||
Rozważmy następujący problem: | |||
Należy wyznaczyć <math>k</math>-ty co do wielkości element | Dany jest zbiór <math>A</math> składający się <math>n</math> liczb oraz liczba <math>k</math>. | ||
Należy wyznaczyć <math>k</math>-ty co do wielkości element zbioru <math>A</math>. | |||
Dla niektórych wartości <math>k</math> (np. 1 lub n) problem jest bardzo prosty i wymaga | |||
jedynie wyznaczenia minimalnej lub maksymalnej wartości, co możemy zrobić w czasie <math>O(n)</math>. | |||
Najprostszym rozwiązaniem naszego problemu, może być uporządkowanie | |||
zbioru, np. algorytmem MergeSort i zwrócenie k-tego elementu. | |||
Takie postępowanie wymaga czasu <math>O(n\log n)</math>. | |||
Jednak można łatwo zauważyć, że nasz problem jest znacznie prostszy od problemu sortowania. | |||
Czy można rozwiązać go szybciej? | |||
Okazuje się, że jest to możliwe, w następnej części wykładu przedstawimy dwa algorytmy, | |||
które rozwiązują nasz problem znacznie sprytniej. | |||
---- | ---- | ||
== Algorytm Hoar'a == | == Algorytm Hoar'a == | ||
Wersja z 09:53, 15 lip 2006
Rozważmy następujący problem:
Dany jest zbiór składający się liczb oraz liczba . Należy wyznaczyć -ty co do wielkości element zbioru .
Dla niektórych wartości (np. 1 lub n) problem jest bardzo prosty i wymaga jedynie wyznaczenia minimalnej lub maksymalnej wartości, co możemy zrobić w czasie .
Najprostszym rozwiązaniem naszego problemu, może być uporządkowanie zbioru, np. algorytmem MergeSort i zwrócenie k-tego elementu. Takie postępowanie wymaga czasu .
Jednak można łatwo zauważyć, że nasz problem jest znacznie prostszy od problemu sortowania. Czy można rozwiązać go szybciej? Okazuje się, że jest to możliwe, w następnej części wykładu przedstawimy dwa algorytmy, które rozwiązują nasz problem znacznie sprytniej.
Algorytm Hoar'a
- opis algorytmu,
- analiza (optymistyczna, pesymistyczna)
- kod programu z implementacją
Przykładowa implementacja:
function AlgHoara(A[1..n],k);
begin
if n=1 && k=1 then' return A[1];
m:=A[1]; l:=1; r:=n;
// parition
while(l<r) do begin
while (l<n && A[l]<m) do l++;
while (r>1 && A[r]>m) do r--;
if (l<=r) then begin
tmp:=A[l]; A[l]:=A[r]; A[r]:=tmp;
l++; r--;
end;
end;
if (r<=k) then
return AlgHoara(A[1..r],k)
else
return AlgHoara(A[r+1..n],k-r)
end;
Algorytm magicznych piątek
- opis algorytmu,
- analiza,
- kod programu z implementacją
Plan:
- algorytm Hoare'a
- algorytm magicznych piątek