490 likes | 616 Views
Red Black Trees. Colored Nodes Definition Binary search tree. Each node is colored red or black. Root and all external nodes are black. No root-to-external-node path has two consecutive red nodes. All root-to-external-node paths have the same number of black nodes. Red Black Trees.
E N D
Red Black Trees Colored Nodes Definition • Binary search tree. • Each node is colored red or black. • Root and all external nodes are black. • No root-to-external-node path has two consecutive red nodes. • All root-to-external-node paths have the same number of black nodes
Red Black Trees Colored Edges Definition • Binary search tree. • Child pointers are colored red or black. • Pointer to an external node is black. • No root to external node path has two consecutive red pointers. • Every root to external node path has the same number of black pointers.
10 7 40 45 3 8 30 60 35 1 20 5 25 Example Red-Black Tree
Properties • The height of a red black tree that has n (internal) nodes is between log2(n+1) and 2log2(n+1).
Properties • Start with a red black tree whose height is h; collapse all red nodes into their parent black nodes to get a tree whose node-degrees are between 2 and 4, height is >= h/2,and all external nodes are at the same level.
10 7 40 45 3 8 30 60 35 1 20 5 25 Properties
Properties • Let h’>= h/2 be the height of the collapsed tree. • In worst-case, all internal nodes of collapsed tree have degree 2. • Number of internal nodes in collapsed tree >= 2h’-1. • So, n>= 2h’-1 • So, h <= 2 log2 (n + 1)
Properties • At most 1 rotation and O(log n) color flips per insert/delete. • Priority search trees. • Two keys per element. • Search tree on one key, priority queue on other. • Color flip doesn’t disturb priority queue property. • Rotation disturbs priority queue property. • O(log n) fix time per rotation => O(log2n) overall time.
Properties • O(1) amortized complexity to restructure following an insert/delete. • C++ STL implementation • java.util.TreeMap => red black tree
Insert • New pair is placed in a new node, which is inserted into the red-black tree. • New node color options. • Black node => one root-to-external-node path has an extra black node (black pointer). • Hard to remedy. • Red node => one root-to-external-node path may have two consecutive red nodes (pointers). • May be remedied by color flips and/or a rotation.
gp pp d p c a b Classification Of 2 Red Nodes/Pointers LLb • XYz • X => relationship between gp and pp. • pp left child of gp => X = L. • Y => relationship between pp and p. • p right child of pp => Y = R. • z = b (black) if d = null or a black node. • z = r (red) if d is a red node.
gp pp d gp p c pp d p a b c a b XYr • Color flip. • Move p, pp, and gp up two levels. • Continue rebalancing if necessary.
gp y z pp x z y d p x a b c d c a b LLb • Rotate. • Done! • Same as LL rotation of AVL tree.
gp y z pp x z x d a b c d a p y b c LRb • Rotate. • Done! • Same as LR rotation of AVL tree. • RRb and RLb are symmetric.
Delete • Delete as for unbalanced binary search tree. • If red node deleted, no rebalancing needed. • If black node deleted, a subtree becomes one black pointer (node) deficient.
10 7 40 45 3 8 30 60 35 1 20 5 25 Delete A Black Leaf • Delete 8.
10 7 40 45 3 30 60 35 1 20 5 25 Delete A Black Leaf py y • y is root of deficient subtree. • py is parent of y.
10 7 40 45 3 8 30 60 35 1 20 5 25 Delete A Black Degree 1 Node py y • Delete 45. • y is root of deficient subtree.
10 7 40 45 3 8 30 60 35 1 20 5 25 Delete A Black Degree 2 Node • Not possible, degree 2 nodes are never deleted.
10 7 40 45 3 8 30 py 60 35 1 20 5 25 y Rebalancing Strategy • If y is a red node, make it black.
10 py 7 40 45 3 8 30 y 60 35 1 20 5 25 Rebalancing Strategy • Now, no subtree is deficient. Done!
y 10 7 40 45 3 8 30 60 35 1 20 5 25 Rebalancing Strategy • y is a black root (there is no py). • Entire tree is deficient. Done!
py v y a b Rebalancing Strategy • y is black but not the root (there is a py). • Xcn • y is right child of py=> X = R. • Pointer to v is black => c = b. • v has 1 red child => n = 1.
py py v y v y a b a b Rb0 (case 1) • Color change. • Now, py is root of deficient subtree. • Continue!
py py v y v y a b a b Rb0 (case 2) • Color change. • Deficiency eliminated. • Done!
v py py v a y b y a b Rb1 (case 1) • LL rotation. • Deficiency eliminated. • Done!
w py py v v y c y a b w a b c Rb1 (case 2) • LR rotation. • Deficiency eliminated. • Done!
w py py v v y c y a b w a b c Rb2 • LR rotation. • Deficiency eliminated. • Done!
py v y w a b c Rr(n) • n = # of red children of v’s right child w. Rr(2)
v py py v a y b y a b Rr(0) • LL rotation. • Done!
w py py v v y c y a b w a c b Rr(1) (case 1) • LR rotation. • Deficiency eliminated. • Done!
x py py v v y d y a w w a x b b c c d Rr(1) (case 2) • Rotation. • Deficiency eliminated. • Done!
x py py v v y d y a w w a x b b c c d Rr(2) • Rotation. • Deficiency eliminated. • Done!
B-Trees • Large degree B-trees used to represent very large dictionaries that reside on disk. • Smaller degree B-trees used for internal-memory dictionaries to overcome cache-miss penalties.
AVL Trees • n = 230 = 109(approx). • 30 <= height <= 43. • When the AVL tree resides on a disk, up to 43 disk access are made for a search. • This takes up to (approx) 4 seconds. • Not acceptable.
Red-Black Trees • n = 230 = 109(approx). • 30 <= height <= 60. • When the red-black tree resides on a disk, up to 60 disk access are made for a search. • This takes up to (approx) 6 seconds. • Not acceptable.
m-way Search Trees • Each node has up to m – 1 pairs and m children. • m = 2 => binary search tree.
10 30 35 4-Way Search Tree k > 35 k < 10 10 < k < 30 30 < k < 35
Maximum # Of Pairs • Happens when all internal nodes are m-nodes. • Full degree m tree. • # of nodes = 1 + m + m2 + m3 + … + mh-1 = (mh – 1)/(m – 1). • Each node has m – 1 pairs. • So, # of pairs = mh – 1.
Definition Of B-Tree • Definition assumes external nodes (extended m-way search tree). • B-tree of order m. • m-way search tree. • Not empty => root has at least 2 children. • Remaining internal nodes (if any) have at least ceil(m/2) children. • External (or failure) nodes on same level.
2-3 And 2-3-4 Trees • B-tree of order m. • m-way search tree. • Not empty => root has at least 2 children. • Remaining internal nodes (if any) have at least ceil(m/2) children. • External (or failure) nodes on same level. • 2-3 tree is B-tree of order 3. • 2-3-4 tree is B-tree of order 4.
B-Trees Of Order 5 And 2 • B-tree of order m. • m-way search tree. • Not empty => root has at least 2 children. • Remaining internal nodes (if any) have at least ceil(m/2) children. • External (or failure) nodes on same level. • B-tree of order 5is3-4-5tree (root may be2-node though). • B-tree of order 2 is full binary tree.
level # of nodes Minimum # Of Pairs • n = # of pairs. • # of external nodes = n + 1. • Height = h=> external nodes on level h + 1. 1 1 >= 2 2 >= 2*ceil(m/2) 3 >= 2*ceil(m/2)h-1 h + 1 n + 1 >= 2*ceil(m/2)h-1, h >= 1
height # of pairs Minimum # Of Pairs n + 1 >= 2*ceil(m/2)h-1, h >= 1 • m = 200. >= 199 2 >= 19,999 3 >= 2 * 106 –1 4 >= 2 * 108 –1 5 h <= log ceil(m/2)[(n+1)/2] + 1
search time 50 400 m Choice Of m • Worst-case search time. • (time to fetch a node + time to search node) * height • (a + b*m + c * log2m) * h wherea, bandcare constants.
Insert 8 4 15 20 1 3 5 6 9 30 40 16 17 Insertion into a full leaf triggers bottom-up node splitting pass.
Split An Overfull Node m a0 p1 a1 p2 a2 …pm am • aiis a pointer to a subtree. • piis a dictionary pair. ceil(m/2)-1 a0 p1 a1 p2 a2 …pceil(m/2)-1 aceil(m/2)-1 m-ceil(m/2) aceil(m/2) pceil(m/2)+1 aceil(m/2)+1 …pm am • pceil(m/2)plus pointer to new node is inserted in parent.
Insert 8 4 15 20 1 3 5 6 9 30 40 16 17 • Insert a pair with key = 2. • New pair goes into a 3-node.