Drzewo wyszukiwania - Search tree

W informatyce , o drzewo wyszukiwania jest strukturą danych drzewa wykorzystywane do lokalizowania określonych kluczy w zestawie. Aby drzewo funkcjonowało jako drzewo wyszukiwania, klucz dla każdego węzła musi być większy niż klucze w poddrzewach po lewej stronie i mniejszy niż klucze w poddrzewach po prawej stronie.

Zaletą drzew wyszukiwania jest ich wydajny czas wyszukiwania, biorąc pod uwagę, że drzewo jest rozsądnie zrównoważone, co oznacza, że liście na obu końcach mają porównywalną głębokość. Istnieją różne struktury danych drzewa wyszukiwania, z których kilka umożliwia również wydajne wstawianie i usuwanie elementów, których operacje muszą następnie utrzymywać równowagę drzewa.

Drzewa wyszukiwania są często używane do implementacji tablicy asocjacyjnej . Algorytm drzewa wyszukiwania używa klucza z pary klucz-wartość do znalezienia lokalizacji, a następnie aplikacja przechowuje całą parę klucz-wartość w tej konkretnej lokalizacji.

Rodzaje drzew

Drzewo wyszukiwania binarnego
Drzewo wyszukiwania binarnego

Drzewo wyszukiwania binarnego

Drzewo wyszukiwania binarnego to struktura danych oparta na węzłach, w której każdy węzeł zawiera klucz i dwa poddrzewa, lewe i prawe. Dla wszystkich węzłów klucz lewego poddrzewa musi być mniejszy niż klucz węzła, a klucz prawego poddrzewa musi być większy niż klucz węzła. Wszystkie te poddrzewa muszą kwalifikować się jako drzewa wyszukiwania binarnego.

Najgorsza złożoność czasowa przy przeszukiwaniu drzewa wyszukiwania binarnego to wysokość drzewa , która może być tak mała jak O(log n) dla drzewa zawierającego n elementów.

B-drzewo

B-drzewa są uogólnieniem binarnych drzew wyszukiwania, ponieważ mogą mieć zmienną liczbę poddrzew w każdym węźle. Chociaż węzły podrzędne mają wstępnie zdefiniowany zakres, niekoniecznie będą wypełnione danymi, co oznacza, że ​​drzewa B mogą potencjalnie zmarnować trochę miejsca. Zaletą jest to, że drzewa B nie muszą być ponownie równoważone tak często, jak inne drzewa samobalansujące .

Ze względu na zmienny zakres długości ich węzłów, B-drzewa są zoptymalizowane pod kątem systemów odczytujących duże bloki danych, są również powszechnie stosowane w bazach danych.

Złożoność czasowa przeszukiwania B-drzewa wynosi O(log n).

(a,b)-drzewo

Drzewo (a,b) to drzewo wyszukiwania, w którym wszystkie jego liście mają tę samą głębokość. Każdy węzeł ma co najmniej jedno dziecko i co najwyżej b dzieci, podczas gdy korzeń ma co najmniej 2 dzieci i co najwyżej b dzieci.

a i b można określić za pomocą następującego wzoru:

Złożoność czasowa przeszukiwania drzewa (a,b) wynosi O(log n).

Trójargumentowe drzewo wyszukiwania

Trójskładnikowe drzewo wyszukiwania to rodzaj drzewa, które może mieć 3 węzły: niskie dziecko, równe dziecko i wysokie dziecko. Każdy węzeł przechowuje pojedynczy znak, a samo drzewo jest uporządkowane w taki sam sposób, jak drzewo wyszukiwania binarnego, z wyjątkiem możliwego trzeciego węzła.

Wyszukiwanie w trójskładnikowym drzewie wyszukiwania polega na przekazaniu ciągu w celu sprawdzenia, czy zawiera go jakakolwiek ścieżka.

Złożoność czasowa przeszukiwania zrównoważonego trójskładnikowego drzewa poszukiwań wynosi O(log n).

Algorytmy wyszukiwania

Wyszukiwanie określonego klucza

Zakładając, że drzewo jest uporządkowane, możemy wziąć klucz i spróbować go zlokalizować w drzewie. Poniższe algorytmy są uogólnione dla drzew wyszukiwania binarnego, ale ten sam pomysł można zastosować do drzew o innych formatach.

Rekursywny

search-recursive(key, node)
    if node is NULL
        return EMPTY_TREE
    if key < node.key
        return search-recursive(key, node.left)
    else if key > node.key
        return search-recursive(key, node.right)
    else
        return node

Wielokrotny

searchIterative(key, node)
    currentNode := node
    while currentNode is not NULL
        if currentNode.key = key
            return currentNode
        else if currentNode.key > key
            currentNode := currentNode.left
        else
            currentNode := currentNode.right

Wyszukiwanie min i max

W posortowanym drzewie minimum znajduje się w węźle najbardziej wysuniętym na lewo, a maksimum w węźle najbardziej wysuniętym na prawo.

Minimum

findMinimum(node)
    if node is NULL
        return EMPTY_TREE
    min := node
    while min.left is not NULL
        min := min.left
    return min.key

Maksymalny

findMaximum(node)
    if node is NULL
        return EMPTY_TREE
    max := node
    while max.right is not NULL
        max := max.right
    return max.key

Zobacz też

Bibliografia