- Introduction
- Warunki na RB-Tree
- Lemma A
- Operacje
- Recolor(x,color)
- Rotateright(T,x), Rotateleft(T,x)
- InsertRB, DeleteRB
- Sources
Introduction
Na poprzednim wykładzie poznaliśmy strukturę BST, które pozwalają zaimplementować operacje na zbiorach dynamicznych w złożoności obliczeniowej O(h), gdzie h jest wysokością BST.
Operacje te działają więc szybko, jeżeli wysokość drzewa przeszukiwań jest mała. Jeśli jednak wysokość drzewa jest duża h=O(n), to koszty operacji mogą być równie duże jak dla zwykłych list.
Dlatego powstało dużo modyfikacji BST (drzewa czerwono-czarne, drzewa AVL etc.), które pozwalają utrzymać drzewa poszukiwań w postaci zbalansowanej, czyli wysokość drzewa w pesymistycznym przypadku można ograniczyć przez Θ(logn).
Teraz zajmiemy się drzewami czerwono-czarnymi (RB-Trees).
Warunki na RB-Tree
- Każdy węzeł drzewa przechowuje dodatkową informację: kolor węzła - czerwony albo czarny
- Każdy liść przechowujący wartość NIL jest czarny
- Jeśli węzeł jest czerwony, to obaj jego potomkowie są czarni
- Każda prosta ścieżka z ustalonego węzła do liścia ma tyle samo czarnych węzłów (liczbę tę nazywamy czarną wysokością węzła i oznaczamy przez bh())
Lemma A
RB-Tree o n kluczach ma wysokość co najwyżej 2lg(n+1) (czyli h≤2lg(n+1)=Θ(logn)).
D-d Lemma A
- Rozpatrzmy drzewo T′ powstałe z RB-Tree T o n kluczach (czyli 2n+1 węzłach licząc razem z liśćmi) poprzez złączenie każdego czerwonego węzła z jego czarnym rodzicem. Tak powstałe drzewo T′ (2-3-4-tree) ma węzły zawierające jeden, dwa lub trzy klucze i odpowiednio dwa, trzy lub cztery pod-drzewa. Wysokość tak powstałego drzewa h′ jest równa czarnej wysokości korzenia oryginalnego drzewa T (h′=bh(T)).
Liczba liści (przechowujących wartość NIL) jest taka sama dla RB-Tree i drzewa powstałego po transformacji T′ i jest równa n+1.
- Zauważmy, że liczbę liści drzewa T′ możemy ograniczyć przez 2h′≤#lisˊci≤4h′ a zatem h′≤lg(n+1).
- Zauważmy również, że wysokość RB-Tree T może wynosić maksymalnie 2bh(T)=2h′.
Zatem h≤2lg(n+1).
Operacje
Operacje dodawania i usuwania węzłów z drzewa znane z poprzedniego wykładu w oczywisty sposób nie zachowują własności (porządku) RB-Tree, dlatego należy je rozszerzyć.
Rozszerzenia te będą wykonywały rekonstrukcję drzewa po której własności RB-Tree będą spełnione.
Wykorzystywane będą dwie procedury:
Recolor(x,color)
Ustawia color jako kolor węzła x.
Złożoność obliczeniowa O(1).
Rotateright(T,x), Rotateleft(T,x)
Są to operacje odpowiednio prawej i lewej rotacji drzewa. Podczas rotacji drzewa względem węzła x, węzeł x jest zastępowany swoim odpowiednim potomkiem y (dla prawej rotacji lewym potomkiem, dla lewej rotacji prawym potomkiem), x staje się potomkiem y (dla prawej rotacji prawym potomkiem, dla lewej lewym), a odpowiednie pod-drzewa x i y są przepinane w taki sposób aby własność BST była zachowana.
Złożoność obliczeniowa rotacji to O(1).
InsertRB, DeleteRB
Operacje InsertRB, DeleteRB mają asymptotyczną złożoność obliczeniową O(h), czyli taką jak w przypadku operacji Insert oraz Delete w zwykłym BST.
Natomiast jasne jest, że stała występujące przy h będzie większa.
Sources
Więcej informacji na temat RB-Trees można znaleźć tutaj: