Co to jest drzewo B?
B Tree to samobalansująca się struktura danych oparta na określonym zestawie reguł wyszukiwania, wstawiania i usuwania danych w szybszy i efektywniejszy sposób. Aby to osiągnąć, należy przestrzegać następujących zasad tworzenia drzewa B.
Drzewo B to specjalny rodzaj drzewa w strukturze danych. W 1972 roku ta metoda została po raz pierwszy wprowadzona przez McCreighta, a firma Bayer nazwał ją drzewem wyszukiwania ze zrównoważoną wysokością m-way. Pomaga zachować posortowane dane i umożliwiać wykonywanie różnych operacji, takich jak wstawianie, wyszukiwanie i usuwanie w krótszym czasie.
W tym samouczku B-Tree dowiesz się:
- Co to jest drzewo B?
- Dlaczego warto korzystać z B-Tree
- Historia drzewa B.
- Operacja wyszukiwania
- Operacja wstawiania
- Usuń operację
Reguły dla B-Tree
Tutaj są ważne zasady tworzenia B_Tree
- Wszystkie liście zostaną utworzone na tym samym poziomie.
- B-Tree jest określane przez liczbę stopni, które są również nazywane „porządkami” (określane przez zewnętrznego aktora, np. Programistę), określane jako
m
dalej. Wartośćm
zależy od rozmiaru bloku na dysku, na którym głównie znajdują się dane. - Lewe poddrzewo węzła będzie miało mniejsze wartości niż prawa strona poddrzewa. Oznacza to, że węzły są również sortowane w kolejności rosnącej od lewej do prawej.
- Maksymalna liczba węzłów podrzędnych, które mogą zawierać węzeł główny, a także jego węzły podrzędne, jest obliczana według następującego wzoru:
m - 1
Na przykład:m = 4max keys: 4 - 1 = 3
- Każdy węzeł, z wyjątkiem roota, musi zawierać minimum kluczy
[m/2]-1
Na przykład:m = 4min keys: 4/2-1 = 1
- Maksymalna liczba węzłów podrzędnych, jakie może mieć węzeł, jest równa jego stopniowi, czyli
m
- Minimalne elementy potomne, jakie może mieć węzeł, to połowa zamówienia, czyli m / 2 (przyjmowana jest wartość pułapu).
- Wszystkie klucze w węźle są sortowane w kolejności rosnącej.
Dlaczego warto korzystać z B-Tree
Oto powody korzystania z B-Tree
- Zmniejsza liczbę odczytów wykonywanych na dysku
- B Drzewa można łatwo zoptymalizować w celu dostosowania ich rozmiaru (czyli liczby węzłów potomnych) do rozmiaru dysku
- Jest to specjalnie zaprojektowana technika obsługi dużych ilości danych.
- Jest to przydatny algorytm dla baz danych i systemów plików.
- Dobry wybór, jeśli chodzi o odczytywanie i zapisywanie dużych bloków danych
Historia drzewa B.
- Dane są przechowywane na dysku w blokach, dane te po wprowadzeniu do pamięci głównej (lub RAM) nazywane są strukturą danych.
- W przypadku dużej ilości danych, przeszukanie jednego rekordu na dysku wymaga odczytania całego dysku; zwiększa to czas i zużycie pamięci głównej ze względu na dużą częstotliwość dostępu do dysku i rozmiar danych.
- Aby temu zaradzić, tworzone są tabele indeksów, które zapisują odniesienia do rekordów w oparciu o bloki, w których się znajdują. To drastycznie redukuje czas i zużycie pamięci.
- Ponieważ mamy ogromne dane, możemy tworzyć wielopoziomowe tabele indeksów.
- Indeks wielopoziomowy można zaprojektować za pomocą drzewa B do przechowywania danych posortowanych w sposób samobalansujący.
Operacja wyszukiwania
Operacja wyszukiwania jest najprostszą operacją na drzewie B.
Stosowany jest następujący algorytm:
- Niech klucz (wartość) będzie przeszukiwany przez „k”.
- Rozpocznij wyszukiwanie od korzenia i rekurencyjnie przechodź w dół.
- Jeśli k jest mniejsze niż wartość główna, przeszukaj lewe poddrzewo, jeśli k jest większe niż wartość główna, przeszukaj prawe poddrzewo.
- Jeśli węzeł ma znalezione k, po prostu zwróć węzeł.
- Jeśli k nie zostanie znalezione w węźle, przejdź do dziecka z większym kluczem.
- Jeśli k nie zostanie znalezione w drzewie, zwracamy NULL.
Operacja wstawiania
Ponieważ drzewo B jest drzewem samobalansującym, nie można wymusić wstawienia klucza do dowolnego węzła.
Obowiązuje następujący algorytm:
- Uruchom operację wyszukiwania i znajdź odpowiednie miejsce wstawienia.
- Wstaw nowy klucz we właściwym miejscu, ale jeśli węzeł ma już maksymalną liczbę kluczy:
- Węzeł wraz z nowo wstawionym kluczem oddzieli się od środkowego elementu.
- Środkowy element stanie się elementem nadrzędnym dla pozostałych dwóch węzłów podrzędnych.
- Węzły muszą ponownie uporządkować klucze w kolejności rosnącej.
WSKAZÓWKA |
Poniższe stwierdzenie nie dotyczy algorytmu wstawiania: Ponieważ węzeł jest pełny, zostanie podzielony, a następnie zostanie wstawiona nowa wartość |
W powyższym przykładzie:
- Wyszukaj odpowiednią pozycję w węźle dla klucza
- Włóż klucz do węzła docelowego i sprawdź reguły
- Czy po wstawieniu węzeł ma więcej niż równą minimalnej liczbie kluczy, która wynosi 1? W tym przypadku tak. Sprawdź następną regułę.
- Czy po wstawieniu węzeł ma więcej niż maksymalną liczbę kluczy, czyli 3? W tym przypadku nie. Oznacza to, że drzewo B nie narusza żadnych reguł i wstawianie jest zakończone.
W powyższym przykładzie:
- Węzeł osiągnął maksymalną liczbę kluczy
- Węzeł zostanie podzielony, a środkowy klawisz stanie się węzłem głównym pozostałych dwóch węzłów.
- W przypadku parzystej liczby kluczy, środkowy węzeł zostanie wybrany przez odchylenie w lewo lub w prawo.
W powyższym przykładzie:
- Węzeł ma mniej niż max kluczy
- 1 jest wstawiane obok 3, ale zasada kolejności rosnącej jest naruszona
- Aby to naprawić, klucze są sortowane
Podobnie 13 i 2 można łatwo wstawić do węzła, ponieważ spełniają one regułę mniejszą niż maksymalna liczba kluczy dla węzłów.
W powyższym przykładzie:
- Węzeł ma klucze równe maksymalnej liczbie kluczy.
- Klucz jest wstawiany do węzła docelowego, ale narusza zasadę maksymalnej liczby kluczy.
- Węzeł docelowy jest podzielony, a środkowy klawisz przy odchyleniu w lewo jest teraz nadrzędnym dla nowych węzłów potomnych.
- Nowe węzły są ułożone w kolejności rosnącej.
Podobnie, w oparciu o powyższe zasady i przypadki, pozostałe wartości można łatwo wstawić do drzewa B.
Usuń operację
Operacja usuwania ma więcej reguł niż operacje wstawiania i wyszukiwania.
Obowiązuje następujący algorytm:
- Uruchom operację wyszukiwania i znajdź klucz docelowy w węzłach
- Zastosowano trzy warunki w zależności od lokalizacji klucza docelowego, jak wyjaśniono w poniższych sekcjach
Jeśli klucz docelowy znajduje się w węźle liścia
- Cel znajduje się w węźle liścia, więcej niż min kluczy.
- Usunięcie tego nie naruszy właściwości drzewa B.
- Cel znajduje się w węźle liścia, ma minimalną liczbę kluczowych węzłów
- Usunięcie tego spowoduje naruszenie właściwości drzewa B.
- Węzeł docelowy może pożyczyć klucz z bezpośredniego lewego węzła lub bezpośredniego prawego węzła (rodzeństwo)
- Rodzeństwo powie tak, jeśli ma więcej niż minimalną liczbę kluczy
- Klucz zostanie wypożyczony z węzła nadrzędnego, maksymalna wartość zostanie przesłana do węzła nadrzędnego, maksymalna wartość węzła nadrzędnego zostanie przesłana do węzła docelowego i usunie wartość docelową
- Cel znajduje się w węźle liścia, ale żadne rodzeństwo nie ma więcej niż minimalną liczbę kluczy
- Wyszukaj klucz
- Połącz z rodzeństwem i minimalną liczbą węzłów nadrzędnych
- Łączna liczba kluczy będzie teraz większa niż min
- Klucz docelowy zostanie zastąpiony minimum węzła nadrzędnego
Jeśli klucz docelowy znajduje się w węźle wewnętrznym
- Wybierz poprzednika w kolejności lub następcę w kolejności
- W przypadku poprzednika w kolejności zostanie wybrany maksymalny klucz z jego lewego poddrzewa
- W przypadku następcy w zamówieniu zostanie wybrany minimalny klucz z jego prawego poddrzewa
- Jeśli poprzednik w kolejności klucza docelowego ma więcej niż klucze min, tylko wtedy może zastąpić klucz docelowy maksimum poprzednika w kolejności
- Jeśli poprzednik w kolejności klucza docelowego nie ma więcej niż min kluczy, poszukaj minimalnego klucza następcy w kolejności.
- Jeśli poprzednik i następca klucza docelowego w kolejności mają mniej niż min kluczy, połącz poprzednika i następcę.
Jeśli klucz docelowy znajduje się w węźle głównym
- Zastąp maksymalnym elementem poprzedniego poddrzewa w kolejności
- Jeśli po usunięciu cel ma mniej niż min kluczy, węzeł docelowy pożyczy maksymalną wartość od swojego rodzica za pośrednictwem rodzica rodzica.
- Maksymalna wartość rodzica zostanie przyjęta przez cel, ale z węzłami maksymalnej wartości rodzeństwa.
Teraz przyjrzyjmy się operacji usuwania na przykładzie.
Powyższy diagram przedstawia różne przypadki operacji usuwania w B-drzewie. To B-Drzewo jest rzędu 5, co oznacza, że minimalna liczba węzłów podrzędnych, jakie może mieć każdy węzeł, to 3, a maksymalna liczba węzłów podrzędnych, jakie może mieć każdy węzeł, to 5. Zważywszy, że minimalna i maksymalna liczba kluczy w każdym węźle mogą mieć odpowiednio 2 i 4.
W powyższym przykładzie:
- Węzeł docelowy ma klucz docelowy do usunięcia
- Węzeł docelowy ma więcej kluczy niż minimalna liczba kluczy
- Po prostu usuń klucz
W powyższym przykładzie:
- Węzeł docelowy ma klucze równe liczbie kluczy minimalnej, więc nie można go usunąć bezpośrednio, ponieważ naruszy to warunki
Teraz poniższy diagram wyjaśnia, jak usunąć ten klucz:
- Węzeł docelowy pożyczy klucz od bezpośredniego rodzeństwa, w tym przypadku poprzednika w kolejności (lewe rodzeństwo), ponieważ nie ma żadnego następcy w kolejności (prawe rodzeństwo)
- Maksymalna wartość poprzednika w zamówieniu zostanie przesłana do rodzica, a rodzic prześle maksymalną wartość do węzła docelowego (patrz diagram poniżej)
Poniższy przykład ilustruje, jak usunąć klucz, który wymaga wartości z jego następcy w kolejności.
- Węzeł docelowy pożyczy klucz od bezpośredniego rodzeństwa, w tym przypadku następcy w kolejności (prawe rodzeństwo), ponieważ jego poprzednik w kolejności (lewe rodzeństwo) ma klucze równe minimalnej liczbie kluczy.
- Minimalna wartość następcy w kolejności zostanie przesłana do rodzica, a rodzic prześle maksymalną wartość do węzła docelowego.
W poniższym przykładzie węzeł docelowy nie ma żadnego elementu siostrzanego, który mógłby przekazać swój klucz węzłowi docelowemu. Dlatego wymagane jest scalanie.
Zobacz procedurę usuwania takiego klucza:
- Scal węzeł docelowy z dowolnym jego bezpośrednim rodzeństwem wraz z kluczem nadrzędnym
- Klucz z węzła nadrzędnego jest wybierany jako rodzeństwo między dwoma łączącymi się węzłami
- Usuń klucz docelowy ze scalonego węzła
Usuń pseudokod operacji
private int removeBiggestElement(){if (root has no child)remove and return the last elementelse {answer = subset[childCount-1].removeBiggestElement()if (subset[childCount-1].dataCount < MINIMUM)fixShort (childCount-1)return answer}}
Dane wyjściowe :
Największy element jest usuwany z B-Tree.
Podsumowanie:
- B Tree to samobalansująca się struktura danych zapewniająca lepsze wyszukiwanie, wstawianie i usuwanie danych z dysku.
- B Drzewo jest regulowane przez określony stopień
- B Klucze i węzły drzewa są ułożone w porządku rosnącym.
- Operacja wyszukiwania drzewa B jest najprostsza, która zawsze zaczyna się od katalogu głównego i rozpoczyna sprawdzanie, czy klucz docelowy jest większy, czy mniejszy niż wartość węzła.
- Operacja wstawiania drzewa B jest dość szczegółowa, która najpierw znajduje odpowiednią pozycję wstawienia dla klucza docelowego, wstawia go, ocenia poprawność drzewa B w różnych przypadkach, a następnie odpowiednio przebudowuje węzły drzewa B.
- Operacja usuwania drzewa B najpierw wyszukuje klucz docelowy do usunięcia, usuwa go, ocenia ważność na podstawie kilku przypadków, takich jak klucze minimum i maksimum węzła docelowego, rodzeństwa i rodzica.