Ch 12_5 More Trees

advertisement
2-3-4
Tree
and how it relates to Red Black Tree
Outline
B Tree, B* Tree, B+ Tree
2-3 Tree, 2-3-4 Tree
Red-Black Tree (RBT)
Left-Leaning Red-Black Tree
Double Red & Double Black
RBT “Insert” Example
The Same Example with 2-3-4 tree
B Tree
B-Tree
is in memory of R. Bayer
It is a generalization of binary search tree in
that a node (or, an entry) can have more than
two children [wiki].
Degree 為 d 的 B tree:
1) 每個 node 含至多 d 個 child pointers
(或 d-1個 elements)
2) 每個 node 至少 1/2 滿
(即至少 [ (d-1)/2]個 elements)
B-Tree of Degree 3
20
10
28
25
30
B* Tree
B-tree 的 node 至少 2/3 滿
B* Tree of Degree 4
6
2
4
10
20
15
28
23
26
30
35
B+ Tree
• 含 index pages 和 data pages
• root node 和 internal nodes
為 index pages (keys only).
• leaf nodes 為 data pages (排序的data )
data 即 element (含有 key)
• 每個 node 至少 1/2 滿 (Fill Factor 50%).
B+ Tree
index page
data page
This B+ tree:
Number of Keys
4
Number of Pointers
5
Fill Factor
50%
Minimum Keys in each page
2
2-3 Tree
2-3 Tree
為 search tree 可為空或:
每個 internal node 為 2-node (有2 child pointers)
或 3-node (有3 child pointers)
2-node
3-node
40
A
B
10 20
C
80
2-3 Tree Insertion
insert Case 1: 插入 70
• 先尋找 70. 發現不在其中.
• 須知尋找70時 遇到哪node?
是 含 80 的 node C
• node C 只有一個 element,
所以70 可放 C
A
40
B
10 20
C
70 80
2-3 Tree
insert Case 2: 插入 30
•
•
•
•
•
•
會遇到 30 的是 node B
B 為 3-node, 須產生新 node D.
B 含 elements 10, 20, 30
其中最大element 30 放D
最小element 10 放 B.
B
中間20放B的parent A
這叫 Split (分裂):
1.產生新node D.
2.中間 20 推升上層
10
A
20 40
D
30
Figure 3
C
70 80
2-3 Tree Insertion (Cont.)
insert case 3: 插入 60
•
•
•
•
•
•
•
•
•
尋找60會遇 node C
C 為 3-node,需產生新 node E
C 含 elements 60,70,80
中間值 70 放在C的parent A
最小值 60放C 最大值80放E
A 為 3-node,產生新 node F
A含 elements 20, 40, 70
中間值 40 放在A的parent G (需產生 G)
最小值 20放A 最大值70放F
2-3 Tree Insertion (Cont.)
G
40
A
F
20
B
10
D
30
70
C
60
E
80
Figure 4 Insertion of 60 into the 2-3 tree of Figure 3
2-3 Tree Deletion
A
50 80
B
10 20
D
C
60 70
90 95
(a) Initial 2-3 tree
A
50 80
B
10 20
D
C
60
(b) 70 deleted
90 95
2-3 Tree Deletion (Cont.)
A
50 80
B
10 20
D
C
60
95
(c) 90 deleted
A
20 80
B
10
D
C
50
95
(d) 60 deleted Next, delete 95
2-3 Tree Deletion (Cont.)
A
20
B
10
C
50 80
這叫 Merge (融合):
1.消去 node D
2.上層 80 併入下層
(e) 95 deleted
A
20
B
10
C
A
20 80
80
(f) 50 deleted
(g) 10 deleted
2-3-4 Tree
2-3-4 Tree
它為 search tree 可為空或:
– 每個 internal node 為 2, 3,或 4 node.
(2-node有2 child pointers, 3-node有3 child
pointers, 4-node 有4 child pointers)
– 所有external nodes 都在相同 level.
2-3-4 tree 類似2-3 tree, 但它有 4-node
如下圖
50 60 70
2-3-4 Tree Insertion
There are 3 cases for a 4-node:
Case 1: It is the root
Case 2: Its parent is a 2-node
Case 3: Its parent is a 3-node (fig. omitted)
2-3-4 Tree Insertion
• Case 1: It is the root.
t
t (root)
y
x
y
z
x
a
b
c
d
a
Figure1
z
b
when the root is a 4-node
c
d
2-3-4 Tree Insertion
• Case 2: Its parent is a 2-node
z
w
a
b
x
y
c
x
e
d
z
w
a
b
e
y
c
Figure 2 when the child of a 2-node is a 4-node
d
2-3-4 Tree
2-3-4 tree 轉成binary search tree
則稱為 red-black tree
red-black tree比2-3-4 tree節省空間
因為2-3-4 node 會浪費不少
未存資料的空的空間
Red-Black Tree
(RBT)
Red-Black Tree
red-black tree 為
binary search tree:
• 每個 node 不是red就是black
• 每個leaf (NULL) 都為black
• red node 的兩個children都為
black.
• 每個 path 含相同數目的 black
nodes.
• red node不可接著red node
(不可紅紅)
A basic red-black tree
Red-Black Tree
A red-black tree with n internal nodes
has height at most 2 log(n+1).
Red-Black tree can always be searched
in O (log n) time.
Red-Black Tree
S
L
S L
OR

c
Leftleaning
S
a b
c
a
b
a
Rightleaning
L
b
S for Small
L for Large
Figure 1 Transforming a 3-node into two red-black nodes
c
Red-Black Tree
M
SML

S
a
b
c
S for Small
M, Middle
L,
Large
L
d
a
b
c
d
Figure 2 Transforming a 4-node into two red-black nodes
1. 將下圖的 Red-Black Tree 轉成 2-3-4 Tree
2. 依序 (1)刪除60
(2)加入8
3. 再轉回 Red-Black Tree
50
10
7
5
70
40
9
30
60
80
75
90
85
92
上圖轉成的 2-3-4 Tree
50
10
5
7
9
30 40
70 80
60
75
85 90 92
刪除 60
70
wasted space
加入 8
7
8
轉回 Red-Black Tree
50
7
80
5
10
70
30
8
9
90
75
40
85
92
Red Black Tree Saves Space
In the example above, the 2-3-4 tree wastes
10 unused space of elements.
The corresponding red-black tree
cuts this waste!
Left-Leaning
Red-Black Tree
LLRBT is easier to implement
than RBT, especially the deletion
It requires
3-nodes are left-leaning,
thus maintains
1-1 correspondence
with 2-3-4 trees (see next page).
LL Red-Black Tree
L
S L

c
Left-Leaning
(LL)
S
a b
c
S for Small
L for Large
a
b
Transforming a 3-node into LL red-black nodes
Double Red
&
Double Black
During Red-Black Tree
insertion, abnormal
Double Red
may occur as shown next.
Red-Black Tree Insertion
我們要對左圖 insert 4
1) 依 binary search tree
把 4 當 3 的 right child
2) 依 red black tree 新加入者為red
故 3,4 形成右圖 Double Red 違反 Red Rule
2
2
1
3
1
3
4
41
Double Red in 2-3-4 Tree
1
2
3
1
2
3
已滿, 此時 insert 4
這 node 爆掉了,故要調整之
4
對應的 Red-Black Tree:
2
1
此時 3
4 叫 Double Red 雙紅,
表示原來 node 爆掉了
3
4
During Red-Black Tree
deletion, again, abnormal
Double Black
may occur as shown next.
Double Black in 2-3-4 Tree
7
5
8
7
8
此時 Delete 5
對應的 Red-Black Tree:
3
3
7
8
3
Double BLACK 雙黑線,表示
其中有個空 2-3-4 node.故要調整之
RBT “Insert” Example
This is textbook exercise 12.7
Insert 30, 40, 20, 90, 10, 50, 70, 60, 80 to an initially
empty red-black tree.
RBT insert 30
30
When any node is
inserted, it must be red.
30
The root 30 must be black.
RBT insert 40
30
40
Because 40 is greater than 30, 40 is inserted as the right child of 30.
RBT insert 20
30
20
40
Because 20 is less than 30, 20 is inserted as the left child of 30.
RBT insert 90
30
30
20
40
20
30
40
Case 1: red uncle 20
1.change parent 40 &
90 uncle 20 to black
2.change granspa 30
to red
20
90
40
90
The root 30 must be black.
RBT insert 10
Because 10 is less than 20,
10 is inserted as the left
child of 20.
30
20
10
40
90
RBT insert 50
30
20
30
40
10
20
90
10
50
Case 2: no uncle
& RL
rotate right around 90
Case 3: no uncle &RR
1.rotate left around 40
2.40,50 change color
30
20
10
50
40
40
90
50
90
RBT insert 70
30
20
10
Case 1: red uncle 40
1.change parent 90 & uncle 40 to black
2.change granspa 50 to red
50
20
90
40
70
30
10
50
90
40
70
RBT insert 60
30
20
10
Case 3: no uncle & LL
1.rotate right around 90
2.70,90 change color
30
50
90
40
70
60
20
10
50
70
40
60
90
RBT insert 80
30
20
10
30
50
20
70
40
10
50
10
80
50
30
20
90
60
80
Case 1: red uncle 60
1.change parent 90 & uncle 60
to black
2.change granspa 70 to red
70
40
90
60
Double red (50,70).
recurs upward!
Case3:black uncle 20 & RR
1. rotate left around 30
2. 30,50 change color
3. 40 as right child of 30
70
40
90
60
80
The Same Insert Example
with 2-3-4 tree
Insert 30, 40, 20, 90, 10, 50, 70, 60, 80
to an initially empty 2-3-4 tree.
2-3-4 tree insert 30
30
2-3-4 tree insert 40
30 40
2-3-4 tree insert 20
20 30 40
2-3-4 tree insert 90
30
20
Node 20,30,40,90 overflows!
create 2 nodes.
SPLIT as below:
1.move the middle 30 upward.
2. 20 in lower left node
3. 40,90 in lower right node
40 90
2-3-4 tree insert 10
30
10 20
40 90
2-3-4 tree insert 50
30
10 20
40 50 90
2-3-4 tree insert 70
30 50
10 20
40
70 90
2-3-4 tree insert 60
30 50
10 20
40
60 70 90
2-3-4 tree insert 80
30 50 70
10 20
40
60
80 90
浪費空間 = 6 elements / 15 elements
= 40 %
Download