5.1 Użycie drzew do wyszukiwania danych
Do wyszukiwania danych używa się specjalnych drzew binarnych wyszukiwania (Binary Search Trees — BST):
Binarne drzewa wyszukiwania (BST) organizują dane w taki sposób, że dla każdego węzła wszystkie klucze w lewym poddrzewie są mniejsze od klucza węzła, a wszystkie klucze w prawym poddrzewie są większe od klucza węzła.
To właściwość pozwala na efektywne wykonywanie operacji wyszukiwania.
Zasady działania:
- Wyszukiwanie elementu w BST zaczyna się od korzenia.
- Jeśli szukana wartość jest mniejsza od wartości bieżącego węzła, wyszukiwanie przechodzi do lewego poddrzewa.
- Jeśli szukana wartość jest większa, wyszukiwanie przechodzi do prawego poddrzewa.
- Proces powtarza się tak długo, aż zostanie znaleziony szukany element lub osiągnięty zostanie koniec drzewa.
Zalety:
- Średni czas wyszukiwania —
O(log n)
, gdzien
— liczba węzłów w drzewie. - Efektywność wyszukiwania zależy od zrównoważenia drzewa.
5.2 Sortowanie drzewa
Sortowanie drzewa — to metoda sortowania oparta na użyciu binarnego drzewa wyszukiwania. Elementy dodawane są do BST, a następnie przegląd drzewa w porządku "in-order"
(lewe poddrzewo → bieżący węzeł → prawe poddrzewo) daje posortowaną tablicę.
Kroki algorytmu:
- Wstawić wszystkie elementy tablicy do binarnego drzewa wyszukiwania.
- Wykonać przegląd drzewa w porządku
"in-order"
aby uzyskać posortowaną tablicę.
Zalety:
- Sortowanie drzewa zapewnia średni czas wykonania
O(n log n)
. - Zapewnia stabilne sortowanie (jeśli dane wejściowe zawierają równe elementy, ich względna kolejność jest zachowana).
Wady:
W najgorszym przypadku, gdy drzewo nie jest zrównoważone, czas wykonania może osiągnąć O(n^2)
.
5.3 Przykłady zadań rozwiązywanych z użyciem drzew
1. Wyszukiwanie minimalnego i maksymalnego elementu:
Opis:
- Można znaleźć minimalną wartość w BST, przechodząc do najbardziej lewego węzła.
- Można znaleźć maksymalną wartość, przechodząc do najbardziej prawego węzła.
Zastosowanie:
- W systemach zarządzania zapasami w celu znalezienia minimalnej i maksymalnej ilości towarów.
- W systemach bankowych w celu określenia minimalnych i maksymalnych transakcji.
2. Wyszukiwanie zakresowe:
Opis:
- Znalezienie wszystkich elementów, których wartości znajdują się w zadanym zakresie.
- Stosuje się przegląd w porządku
"in-order"
z dodatkową weryfikacją, czy węzeł znajduje się w zakresie.
Zastosowanie:
- W bazach danych do wykonywania zapytań zakresowych.
- W systemach monitorowania, gdzie trzeba śledzić wartości parametrów w zadanych granicach.
3. Wsparcie operacji autouzupełniania (Autocomplete):
Opis:
- Przechowywanie ciągów znaków (np. słów) w postaci drzewa (np. drzewa prefiksowego).
- Szybkie wyszukiwanie wszystkich ciągów znaków zaczynających się od zadanego prefiksu.
Zastosowanie:
- W wyszukiwarkach dla sugestii przy wprowadzaniu zapytania.
- W edytorach tekstu dla sugestii autouzupełniania.
4. Optymalizacja tras i ścieżek:
Opis:
- Przechowywanie punktów i tras w postaci drzewa.
- Wyszukiwanie optymalnych ścieżek i minimalnych odległości z użyciem algorytmów na drzewach.
Zastosowanie:
- W systemach nawigacyjnych do wytyczania tras.
- W systemach logistycznych do optymalizacji dostaw.
5. Organizacja danych hierarchicznych:
Opis:
- Użycie drzew do reprezentacji i zarządzania strukturami hierarchicznymi, takimi jak struktury organizacyjne, systemy plików i drzewa genealogiczne.
Zastosowanie:
- W korporacyjnych systemach informacyjnych do reprezentowania struktury firmy.
- W systemach zarządzania treścią (CMS) do organizacji plików i dokumentów.
GO TO FULL VERSION