Drzewo B w strukturze danych: wyszukiwanie, wstawianie, usuwanie
โก Inteligentne podsumowanie
B-Drzewo w Strukturze Danych to samobalansujฤ ce siฤ drzewo, ktรณre sortuje dane, umoลผliwiajฤ c szybkie wyszukiwanie, wstawianie i usuwanie danych z dysku. Wyjaลnia ono reguลy B-Drzewa, jego historiฤ oraz algorytmy wyszukiwania, wstawiania i usuwania danych wraz z przykลadami.
Co to jest drzewo B?
Drzewo B to samorรณwnowaลผฤ ca siฤ struktura danych oparta na okreลlonym zestawie reguล wyszukiwania, wstawiania i usuwania danych w szybszy i bardziej efektywny sposรณb. Aby to osiฤ gnฤ ฤ, stosuje siฤ poniลผsze reguลy, aby utworzyฤ drzewo B.
B-drzewo to specjalny rodzaj drzewa w strukturze danych. W 1972 roku McCreight i Bayer po raz pierwszy wprowadzili tฤ metodฤ, nazywajฤ c jฤ Height Balanced m-way Search Tree (Drzewem Wyszukiwania Wysokoลci Zrรณwnowaลผonych m-kierunkรณw). Pomaga ona zachowaฤ posortowane dane i umoลผliwia wykonywanie rรณลผnych operacji, takich jak wstawianie, wyszukiwanie i usuwanie, w krรณtszym czasie.
Zasady dla B-Tree
Oto waลผne zasady tworzenia drzewa B:
- Wszystkie liลcie zostanฤ utworzone na tym samym poziomie.
- Drzewo B jest okreลlone przez liczbฤ stopni, zwanฤ
rรณwnieลผ โkolejnoลciฤ
โ (okreลlonฤ
przez aktora zewnฤtrznego, np. programistฤ), zwanฤ
mdalej. Wartoลฤmzaleลผ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.
- Maksymalnฤ
liczbฤ kluczy, jakฤ
moลผe zawieraฤ wฤzeล gลรณwny i jego wฤzลy podrzฤdne, oblicza siฤ wedลug nastฤpujฤ
cego wzoru:
m โ 1. Na przykลad:m = 4 max keys: 4 โ 1 = 3
- Kaลผdy wฤzeล, z wyjฤ
tkiem wฤzลa gลรณwnego, musi zawieraฤ minimalnฤ
liczbฤ kluczy
[m/2] โ 1. Na przykลad:m = 4 min keys: 4/2 โ 1 = 1
- Maksymalna liczba wฤzลรณw podrzฤdnych, jakie moลผe mieฤ wฤzeล, jest rรณwna jego stopniowi, tj
m. - Minimalne dzieci, jakie moลผe mieฤ wฤzeล, to poลowa rzฤdu, czyli m/2 (przyjmowana jest wartoลฤ gรณrna).
- Wszystkie klucze w wฤลบle sฤ sortowane w kolejnoลci rosnฤ cej.
Dlaczego warto uลผywaฤ B-Tree
Oto powody, dla ktรณrych warto uลผywaฤ drzewa B:
- Zmniejsza liczbฤ odczytรณw wykonywanych na dysku.
- Drzewa B moลผna ลatwo zoptymalizowaฤ, dostosowujฤ c ich rozmiar (czyli liczbฤ wฤzลรณw podrzฤdnych) 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 odczyt i zapis duลผych blokรณw danych.
Historia drzewa B
- Dane sฤ przechowywane na dysku w blokach. Po przeniesieniu do pamiฤci gลรณwnej (RAM) nazywane sฤ strukturฤ danych.
- W przypadku ogromnych iloลci danych przeszukanie jednego rekordu na dysku wiฤ ลผe siฤ z koniecznoลciฤ 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 na podstawie blokรณw, w ktรณrych siฤ znajdujฤ . To radykalnie skraca czas i zmniejsza zuลผycie pamiฤci.
- Poniewaลผ mamy ogromne dane, moลผemy tworzyฤ wielopoziomowe tabele indeksowe.
- Indeks wielopoziomowy moลผna zaprojektowaฤ, uลผywajฤ c drzewa B do keeping dane posortowano w sposรณb samobalansujฤ cy.
Szukaj Operacja
Operacja wyszukiwania jest najprostszฤ operacjฤ na drzewie B. Zastosowano nastฤpujฤ cy algorytm:
- Niech kluczem (wartoลciฤ ) do przeszukania bฤdzie โkโ.
- Rozpocznij wyszukiwanie od korzenia i rekurencyjnie przechodลบ w dรณล.
- Jeลli k jest mniejsze od wartoลci pierwiastka, przeszukujemy lewe poddrzewo; jeลli k jest wiฤksze od wartoลci pierwiastka, przeszukujemy prawe poddrzewo.
- Jeลli wฤzeล ma znalezione k, po prostu zwrรณฤ wฤzeล.
- Jeลli k nie zostanie znalezione w wฤลบle, przejdลบ w dรณล do dziecka z wiฤkszym kluczem.
- Jeลli k nie zostanie znalezione w drzewie, zwracamy NULL.
wstawka Operacja
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ฤ rodzicem dla pozostaลych dwรณch wฤzลรณw podrzฤdnych.
- Wฤzลy muszฤ ponownie uลoลผyฤ klucze w kolejnoลci rosnฤ cej.
๐ก WSKAZรWKA: Oto jest nie prawda o algorytmie wstawiania: โPoniewaลผ wฤzeล jest peลny, zostanie podzielony, a nastฤpnie zostanie wstawiona nowa wartoลฤโ. Najpierw wstawiany jest klucz, a wฤzeล zostanie podzielony dopiero wtedy, gdy przekroczy maksymalnฤ liczbฤ kluczy.
W powyลผszym przykลadzie:
- Wyszukaj odpowiedniฤ pozycjฤ w wฤลบle, aby znaleลบฤ klucz.
- Wprowadลบ klucz do wฤzลa docelowego i sprawdลบ reguลy.
- Czy po wstawieniu wฤzeล ma co najmniej 1 minimalnฤ liczbฤ kluczy? W tym przypadku odpowiedลบ brzmi: tak. Sprawdลบ kolejnฤ reguลฤ.
- Czy po wstawieniu wฤzeล ma wiฤcej kluczy niลผ maksymalna liczba, ktรณra wynosi 3? W tym przypadku odpowiedลบ brzmi: nie. Oznacza to, ลผe drzewo B nie narusza ลผadnych reguล, a wstawianie jest zakoลczone.
W powyลผszym przykลadzie:
- Wฤzeล osiฤ gnฤ ล maksymalnฤ liczbฤ kluczy.
- Wฤzeล zostanie podzielony, a ลrodkowy klucz stanie siฤ wฤzลem gลรณwnym pozostaลych dwรณch wฤzลรณw.
- W przypadku parzystej liczby kluczy, ลrodkowy wฤzeล zostanie wybrany poprzez odchylenie w lewo lub w prawo.
W powyลผszym przykลadzie:
- Wฤzeล ma mniej niลผ maksymalnฤ liczbฤ kluczy.
- Obok 3 wstawiono 1, ale naruszono zasadฤ kolejnoลci rosnฤ cej.
- Aby rozwiฤ zaฤ ten problem, klucze zostaลy posortowane.
Podobnie, 13 i 2 moลผna ลatwo wstawiฤ do wฤzลa, poniewaลผ speลniajฤ one reguลฤ โkluczy mniejszych od maks.โ dla wฤzลรณw.
W powyลผszym przykลadzie:
- Wฤzeล ma klucze rรณwne maksymalnej liczbie kluczy.
- Klucz zostaล wstawiony do wฤzลa docelowego, ale narusza to reguลฤ maksymalnej liczby kluczy.
- Wฤzeล docelowy jest podzielony, a ลrodkowy klawisz z odchyleniem w lewo jest teraz rodzicem nowych wฤzลรณw podrzฤdnych.
- 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.
Usuniฤcia Operacja
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.
- W zaleลผnoลci od lokalizacji klucza docelowego stosowane sฤ trzy warunki, jak wyjaลniono w poniลผszych sekcjach.
Jeลli klucz docelowy znajduje siฤ w wฤลบle liลcia
- Target znajduje siฤ w wฤลบle liลcia, wiฤcej niลผ min kluczy. Usuniฤcie tego nie naruszy wลaลciwoลci drzewa B.
- Target znajduje siฤ w wฤลบle liลcia i ma wฤzลy o minimalnym kluczu. Usuniฤcie tego elementu naruszy wลaลciwoลฤ drzewa B.
- Wฤzeล docelowy moลผe poลผyczyฤ klucz od najbliลผszego wฤzลa lewego lub najbliลผszego wฤzลa prawego (rodzeลstwa).
- Rodzeลstwo powie tak jeลli ma wiฤcej niลผ minimalnฤ liczbฤ kluczy.
- Klucz zostanie poลผyczony od wฤzลa nadrzฤdnego, wartoลฤ maksymalna zostanie przesลana do wฤzลa nadrzฤdnego, wartoลฤ maksymalna wฤzลa nadrzฤdnego zostanie przesลana do wฤzลa docelowego, a wartoลฤ docelowa zostanie usuniฤta.
- Target znajduje siฤ w wฤลบle liลciastym, ale ลผadne z rodzeลstwa nie ma wiฤkszej liczby kluczy niลผ minimalna: wyszukaj klucz, poลฤ cz z rodzeลstwem i minimalnฤ liczbฤ wฤzลรณw nadrzฤdnych, caลkowita liczba kluczy bฤdzie teraz wiฤksza niลผ minimalna, a klucz docelowy zostanie zastฤ piony minimalnฤ liczbฤ wฤzลรณw nadrzฤdnych.
Jeลli klucz docelowy znajduje siฤ w wฤลบle wewnฤtrznym
- Wybierz poprzednika lub nastฤpcฤ w kolejnoลci chronologicznej.
- W przypadku poprzednika o kolejnoลci in-order wybrany zostanie maksymalny klucz z jego lewego poddrzewa.
- W przypadku nastฤpnika uporzฤ dkowanego zostanie wybrany minimalny klucz z jego prawego poddrzewa.
- Tylko wtedy, gdy poprzednik klucza docelowego ma wiฤcej kluczy niลผ klucze min, moลผna zastฤ piฤ klucz docelowy kluczem maksimum poprzednika w kolejnoลci.
- Jeลli poprzednik klucza docelowego w kolejnoลci nie ma wiฤcej niลผ min kluczy, naleลผy poszukaฤ minimalnego klucza nastฤpnika w kolejnoลci.
- Jeลli poprzednik i nastฤpnik klucza docelowego majฤ mniej niลผ min kluczy, poลฤ cz poprzednika i nastฤpcฤ.
Jeลli klucz docelowy znajduje siฤ w wฤลบle gลรณwnym
- Zastฤ p elementem maksymalnym poddrzewa poprzedniego rzฤdu.
- Jeลผeli po usuniฤciu wฤzeล docelowy ma mniej niลผ min kluczy, wรณwczas wฤzeล docelowy poลผyczy wartoลฤ max od swojego rodzeลstwa za poลrednictwem wฤzลa nadrzฤdnego rodzeลstwa.
- Maksymalna wartoลฤ elementu nadrzฤdnego zostanie przejฤta przez element docelowy, ale z wฤzลami o maksymalnej wartoลci elementu rodzeลstwa.
Teraz wyjaลnimy operacjฤ usuwania na przykลadzie.
Powyลผszy diagram przedstawia rรณลผne przypadki operacji usuwania w drzewie B. To drzewo B jest rzฤdu 5, co oznacza, ลผe โโminimalna liczba wฤzลรณw potomnych, jakฤ moลผe mieฤ kaลผdy wฤzeล, to 3, a maksymalna liczba wฤzลรณw potomnych, jakฤ moลผe mieฤ kaลผdy wฤzeล, to 5. Natomiast minimalna i maksymalna liczba kluczy, jakฤ moลผe mieฤ kaลผdy wฤzeล, to 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ลผ wynosi minimalna liczba kluczy.
- Po prostu usuล klucz.
W powyลผszym przykลadzie:
- Wฤzeล docelowy ma klucze rรณwne minimalnej liczbie kluczy, wiฤc nie moลผemy go usunฤ ฤ bezpoลrednio, gdyลผ naruszyลoby to warunki.
Poniลผszy diagram wyjaลnia, jak usunฤ ฤ ten klucz:
- Wฤzeล docelowy poลผyczy klucz od bezpoลredniego rodzeลstwa, w tym przypadku od poprzednika w kolejnoลci (lewego rodzeลstwa), poniewaลผ nie posiada ลผadnego nastฤpcy w kolejnoลci (prawego rodzeลstwa).
- Maksymalna wartoลฤ poprzednika w kolejnoลci zostanie przekazana do wฤzลa nadrzฤdnego, a wฤzeล nadrzฤdny przekaลผe maksymalnฤ wartoลฤ do wฤzลa docelowego (patrz poniลผszy diagram).
Poniลผszy przykลad ilustruje sposรณb usuwania klucza, ktรณry wymaga wartoลci z jego nastฤpnika w kolejnoลci.
- Wฤzeล docelowy poลผyczy klucz od bezpoลredniego rodzeลstwa, w tym przypadku nastฤpnika w kolejnoลci (prawego rodzeลstwa), poniewaลผ jego poprzednik w kolejnoลci (lewy rodzeลstwo) ma klucze rรณwne kluczom minimalnym.
- Minimalna wartoลฤ nastฤpnika w kolejnoลci zostanie przesลana do elementu nadrzฤdnego, a element nadrzฤdny przekaลผe wartoลฤ maksymalnฤ do wฤzลa docelowego.
W poniลผszym przykลadzie wฤzeล docelowy nie ma ลผadnego wฤzลa siostrzanego, ktรณry mรณgลby przekazaฤ mu swรณj klucz. W zwiฤ zku z tym wymagane jest scalenie. Zobacz procedurฤ usuwania takiego klucza:
- Poลฤ cz wฤzeล docelowy z dowolnym z jego bezpoลrednich rodzeลstwa i kluczem nadrzฤdnym.
- Wybierany jest klucz z wฤzลa nadrzฤdnego, ktรณry znajduje siฤ pomiฤdzy dwoma ลฤ czonymi wฤzลami.
- Usuล klucz docelowy ze scalonego wฤzลa.
Usuniฤcia Operacja Pseudo Code
private int removeBiggestElement() { if (root has no child) remove and return the last element else { answer = subset[childCount-1].removeBiggestElement() if (subset[childCount-1].dataCount < MINIMUM) fixShort (childCount-1) return answer } }
Wyjลcie: Najwiฤkszy element zostanie usuniฤty z drzewa B.













