You are on page 1of 81

i Hc S Phm Tp.

H Ch Minh

Chng 02: B-Cy
CU TRC D LIU 2

2
CTDL2 HIENLTH, HCMUP
cng mn hc: CTDL2
Chng 1: Sp xp ngoi
Chng 2: B - Cy
Chng 3: Cy en
Chng 4: Bng bm (Hash Table)

3
CTDL2 HIENLTH, HCMUP
Cy 2-3-4
+ cy 2-3-4 l cy nhiu nhnh m mi node ca
n c th c n bn node con v ba mc d liu.

4
CTDL2 HIENLTH, HCMUP
Cy 2-3-4
Node khng phi l l:
Mt node vi mt mc d liu th lun
lun c 2 con.
Mt node vi hai mc d liu th lun
lun c 3 con.
Mt node vi ba mc d liu th lun
lun c 4 con.
i vi mi node vi s con l k v s
mc d liu l d, th : k = d + 1

5
CTDL2 HIENLTH, HCMUP
Cc loi nt
2 node
mt mc d liu
2 node con.
3 node
Hai mc d liu
3 node con.
4 node
Ba mc d liu
4 node con.

6
CTDL2 HIENLTH, HCMUP
V d:
GV: TRN HU QUC TH
2 -3 -4 tree

7
CTDL2 HIENLTH, HCMUP
Cu trc mt nt
struct Node
{
char key[3];
int type; // 2 , 3, 4 Node
Node* next[4];
}

8
CTDL2 HIENLTH, HCMUP
Cch chn nt
+ Bottom up: M rng cy v pha gc,
tch t di ln, trn node => tch
+ Top Down: i t trn xung, gp nt
dy th tch, ri tm v tr thch hp chn
V d: (xem demo)

9
CTDL2 HIENLTH, HCMUP
nh gi
+ Cy cn bng
+ Chi ph tm kim l O(log(n))


10
CTDL2 HIENLTH, HCMUP
B-Tree
nh ngha:
B-Tree bc n c cc t/c:
Mi nt c ti a 2*n kha
Mi nt (khng l gc) c t nht n nt
Mi nt hoc l l hoc c m+1 nt con

11
CTDL2 HIENLTH, HCMUP
Khai bo CTDL
typedef struct
{
int numtree;//s cy con
int Key[Order];//mng lu 3 kha ca node
int Branch[Order];//con tr tr n node con
}NodeType;
typedef struct NodeType* NODEPTR;
NODEPTR * Root;//con tr tr ti nt gc

12
CTDL2 HIENLTH, HCMUP
Cy B(Block) (B-trees)
Tt c cc l nm trn cng mt mc
Tt c cc node ngoi tr gc v cc l c:
t nht m/2 con
Nhiu nht m con
Cy B+ (B+ trees)
Tt c cc kha trong cc node l gi
Ch cc kha trong cc l nhn gi tr thc real
Lin kt cc l
C kh nng duyt ht danh sch theo th t gia
khng cn thng qua cc node cao hn.
Mi node cha t nht
mt na s lng kha

13
CTDL2 HIENLTH, HCMUP
Cc php ton trn cy
Tm kim (SEARCH)
Duyt
Chn (INSERT)
Tch (SPLIT)

14
CTDL2 HIENLTH, HCMUP
Cy B (B-trees) - Chn
Chn (Insertion)
Tnh cht cy B (B-tree): mt khi c t
nht mt na s kha
Chn vo trong khi vi m kha
Trn khi
Phn tch khi
y mt kha
Phn tch cha m nu cn thit
Nu gc b tch, cy c t mc su hn






15
CTDL2 HIENLTH, HCMUP
Cy B Chn
Chn
Chn 9
Node b trn,
phn tch n
y node gia (8)
Gc b trn,
phn tch n
y node gia (6)
Node gc mi hnh thnh
Chiu cao tng 1

16
CTDL2 HIENLTH, HCMUP
Cy B trn a
Cc khi a
512 - 8k bytes
100s of keys
Dng tm kim nh phn cho cc khi
Tng qut
O( log n )
Lm hp vi phn cng !
Th tc xa tng t (Deletion)
Tuy nhin, phi hi nhp cc khi (block) bo m
tnh cht B-tree
(t nht bng na s lng kha)



17
CTDL2 HIENLTH, HCMUP
Cy B+
Cy B+
Tt c cc kha trong cc node l gi
Ch cc kha trong cc l nhn gi tr thc real
Cc bn ghi d liu c gi trong cc vng
ring

18
CTDL2 HIENLTH, HCMUP
Cy B+ - Duyt theo th t gia
Cy B+ (B+ trees)
Lin kt cc l
C kh nng duyt ht danh sch theo th t
gia khng cn thng qua cc node cao hn.


19
CTDL2 HIENLTH, HCMUP
Cy (B+) S dng
S dng - C s d liu ln
c mt khi a chm hn nhiu so vi c b nh ( ~ms vs ~ns
)
t tng khi ca cc kha vo trong mt khi a
Physical disc
blocks
i Hc S Phm Tp. H Ch Minh

Chng 03: CY EN
CU TRC D LIU 2

21
CTDL2 HIENLTH, HCMUP
a. Khi nim cy en
-L cy nh phn tm kim t cn bng
-a thm yu t mu (RED, BLACK) lm
c s cho s cn bng.

22
CTDL2 HIENLTH, HCMUP
Cc tnh cht
-Mi nt ch c th l (RED) hoc en
(BLACK)
-Nt gc mang mu en. Mi nt l (NIL) mang
mu en.
-Nu 1 nt l th con ca n phi l en
(ngha l khng c 2 nt lin tip)
-Tt c cc ng i t mt nt cho ti cc l
cha mt s nh nhau cc nt en.


23
CTDL2 HIENLTH, HCMUP
V d:

24
CTDL2 HIENLTH, HCMUP
Cy en
Chiu cao en (black height h
b
(x)) l s
node en trn ng i t node x n l
(khng bao gm x)
T quy tc [4] Khng th tn ti node cha
v node con cng . Khi cy en vi
phm quy tc ny gi l hin tng xung t
- .

25
CTDL2 HIENLTH, HCMUP
Nhn xt
Cy en c N nt trong (internal node) c
chiu cao ti a l 2log
n
(N+1)
Chiu cao ca cy (h) <= 2 * chiu cao en
(h
b
)
Cc nt l l NIL (nt ngoi external node)
lun l node en.
Mi cnh n 1 node en c gi l cnh
en.
Thi gian tm kim O(logN)

26
CTDL2 HIENLTH, HCMUP
Cy en
Cu trc lu tr:
Thng tin lu tr ti node (key)
a ch node gc ca cy con bn tri
(*pLeft)
a ch node gc ca cy con bn phi
(*pRight)
a ch node cha (*pParent)
Thuc tnh mu ca node (color)

27
CTDL2 HIENLTH, HCMUP
b. Biu din cy - en
typedef struct Node
{
int Key;
Node* pLeft, *pRight;
int color; //RED - BLACK
Node* pParent; //Tr n nt cha
}
typedef Node* pNode;
typedef struct RBTree{
pNode root;
};

28
CTDL2 HIENLTH, HCMUP
c. Mt s thao tc n gin (t vit)
+ Khi to
void Init (RBTree &t);
+ Kim tra rng
int isEmpty (RBTree t);
+ Tm kim v duyt cy (ging BST)
+ Thm node mi
+ Xa node

29
CTDL2 HIENLTH, HCMUP
d. Xut cy ra mn hnh
void Print (RBTree t)
{
if (isEmpty(t))
{
cout<<Cy rng;
return;
}
Print(t.root, 0):
}

30
CTDL2 HIENLTH, HCMUP
d. Xut cy ra mn hnh (tt)
void Print (pNode p, int level)
{
if (!p)
{
textcolor(BLACK);
for (int i = 0 ; i < level; ++ i)
{
cout<< ;
cout<<NULL <<endl;
}


31
CTDL2 HIENLTH, HCMUP
d. Xut cy ra mn hnh (tt)
Print(p->pRight, level + 1);
for (i= 0; i < level;i++)
cout<< ;
if (p->color == RED)
textcolor (RED);
else
textcolor (BLACK);
cout<<p->Key;
Print(p->pLeft , level +1)
}
}

32
CTDL2 HIENLTH, HCMUP
e. Chn mt nt vo cy en
Chn mt nt nh trong cy tm kim nh phn
bnh thng v gn cho n mu .
B1. Tm v tr thch hp chn kho K
B2. Pht sinh 1 nt mi c kho K, mu
(RED) v gn lin kt ti v tr tm
c.
B3. Hiu chnh li cy nu c vi phm
tnh cht (t mu li & quay)

34
CTDL2 HIENLTH, HCMUP
Gi:
X: Con tr, tr n nt
va chn vo
P: Con tr, nt cha ca
nt tr bi x
U: Con tr, tr n nt
anh em ca nt tr bi p
G: Con tr, tr n nt
cha ca nt tr bi p
g
p
x x
u
Chu ngoi Chu ni

35
CTDL2 HIENLTH, HCMUP
* Php quay phi ti y
x


36
CTDL2 HIENLTH, HCMUP
Php quay
y

Quay phi
Quay tri

37
CTDL2 HIENLTH, HCMUP
Cc trng hp sau khi thm:
Nu p en Dng (1)
Nu p :
Nu u , o mu 3 nt p, u, g (2)
Nu u en:
Nu x l chu ngoi ca g: Thc hin 1
php quay (3)
Nu x l chu ni ca g: Thc hin 2
php quay (4)

38
CTDL2 HIENLTH, HCMUP
Trng hp 1
P en Bnh thng (dng)

39
CTDL2 HIENLTH, HCMUP
Trng hp 2
P , U o mu G, P, U
g
p
x
u
g
p
x
u

40
CTDL2 HIENLTH, HCMUP
X
P
G
U
P
G
U
Case 1 U is Red
Just Recolor and move up
X

41
CTDL2 HIENLTH, HCMUP
Trng hp 3
P , U en, x l chu ngoi Quay ti
G; i mu P, G

42
CTDL2 HIENLTH, HCMUP
X
P
G
U
S
P
X
G
S
U
TH3 Zig-Zig
Single Rotate P around G
Recolor P and G

43
CTDL2 HIENLTH, HCMUP
Trng hp 4
P , U en, x l chu ni Quay ti P
(tr thnh chu ngoi), sau Quay ti
G; i mu P, G
Tng t
TH3

44
CTDL2 HIENLTH, HCMUP
X
P
G
U
S
X
P
G
S
U
Case 4 Zig-Zag
Double Rotate
X around P; X around G
Recolor G and X

45
CTDL2 HIENLTH, HCMUP
Hm quay tri (tng t cho quay phi)
void LeftRotate(RBTree t, pNode x){
pNode y = x->pRight;
x->pRight = y->pLeft; //Bn phi x l

if (p->pLeft !=NULL)
p->pLeft ->pParent = x; //cha l x
p->pParent = x->pParent; // cha ca x l cha ca y

//nu x l nt gc
if (x->pParent == NULL)
t.root = y; //gc mi s l y
else


46
CTDL2 HIENLTH, HCMUP
Hm quay tri (tt)
//trng hp else => x khng phi l gc

//Nu x l con tri ca cha n
if (x == (x->pParent)->pLeft)
x->pParent->pLeft = y
else
x->pParent->pRight = y;

y->pLeft = x;
x ->pParent = y;
}

47
CTDL2 HIENLTH, HCMUP
V d: Chn mt nt vo cy en
Ln lt chn vo cc nt c gi tr:
50, 75, 25, 80, 100, 110, 105
50
25
75
80
x
cha x
bc x
ng x

48
CTDL2 HIENLTH, HCMUP
TH2: Cha, bc x u c mu
- Cho cha v bc thnh mu en
-ng ca x thnh mu
(lu : nt gc qui c l mu en)
50
80
x
cha x
bc x
ng x
25
75

49
CTDL2 HIENLTH, HCMUP
TH3: Bc x u c mu en x l con phi ca cha x
Quay tri ti ng ca x ng thi i
mu cha ca x v ng ca x
50
80
25
75
100
x
50
25
75
100
x
80

50
CTDL2 HIENLTH, HCMUP
50
25
75
100
80
110
105
x

51
CTDL2 HIENLTH, HCMUP
TH4: x l con tri, cha x l phi
hoc x l con phi, cha x l tri
Quay tri (phi) ti cha (khng i mu)
50
25
75
100
80
105
110
TH.2

52
CTDL2 HIENLTH, HCMUP
CODE
void Insert(RBTree &t, int k)
{
-Tm v tr cn chn k
-Pht sinh 1 nt x c kho l k, mu , v chn vo v
tr cn chn
//Bt u cn bng
while (x!=t.root && x->pParent->color==RED)
{
//cha x l con tr ca ng x
if ( x -> p == x->pParent->pParent->pLeft)
{
//y l bc ca x
y = x->pParent->pParent->pRight;
}


53
CTDL2 HIENLTH, HCMUP
CODE
if (y->color == RED){ //TH1
x->pParent->Color = BLACK;
y->color = BLACK;
x->pParent -> pParent -> color = RED
x = x->pParent -> pParent;
}


54
CTDL2 HIENLTH, HCMUP
Red-Black Trees
Insertion example
11
2 14
15
1 7
5 8
4
Violation of rule( after 4 added to the tree)

55
CTDL2 HIENLTH, HCMUP
Red-Black Trees
Insertion example
11
2 14
15
1 7
5 8
4
Case 1

56
CTDL2 HIENLTH, HCMUP
Red-Black Trees
Insertion example
11
7 14
15
2 8
4
1 5
Case 2

57
CTDL2 HIENLTH, HCMUP
Red-Black Trees
Insertion example
2
4
1 5
7 7
11
14
15
8
Case 3

58
CTDL2 HIENLTH, HCMUP
CODE
else
if (x== x->pParent->pRight){ //TH3
x = x->pParent;
LeftRotate(t,x);
}
//TH2 lun xy ra sau
X->pParent ->color = BLACK;
X->pParent->pParent->color = RED;
RightRotae(t,x->pParent->pParent);
}


59
CTDL2 HIENLTH, HCMUP
CODE
else //TH: cha ca x l con phi ca ngx
{
//Lm tng t nh trn,i pRight<->pLeft
}
t.root -> color = BLACK;

60
CTDL2 HIENLTH, HCMUP
f. Hu mt nt trong cy en

Sau khi xa:
Nu x Khng cn bng li.
Nu x en:
Tt c cc ng i con t gc n nt l (qua
y) s t hn 1 nt en so vi nhng ng i
cn li (vi phm t/c 4)
Nu p v x cng th vi phm t/c 3.

61
CTDL2 HIENLTH, HCMUP
Du hiu en (black token)
c gn cho nt tr bi x (nt con tht s
ca nt b xa y)
Bo hiu con ng i qua cc nt c cha
n s t hn nhng con n khc 1 nt en
du hiu en i ngc ln cy cho ti khi
chiu cao cy c m bo.
Nt cha du hiu en, bn thn l:
Nt en nt en kp
Nt nt en
L khi nim tru tng, khng ci t

62
CTDL2 HIENLTH, HCMUP
Tin trnh chung
-Tm nt l nt c kho k trong cy
-Tin hnh hu z (hoc hu phn t th mng)
v to lin kt vi cc nhnh con ca z
-Cn bng li cy (nu cn thit)

63
CTDL2 HIENLTH, HCMUP
Quy c
Do khi xo v cn bng cy, s c nhiu
trng hp cn phi x l, trong c vic
kim tra nt l nt NULL?
Gii php : thay tt c cc nt NULL bng 1
nt c bit, c tn l Null. y l nt tht s
lun c mu en, cc tr ca n (key, tri ,
phi, cha) c gn bt k

64
CTDL2 HIENLTH, HCMUP
Quy c
pNode Null;
Int main()
{
Null -> color = BLACK;
Null ->pParent= Null->pLeft=Null-
>pRight = NULL;
Null -> Key = 0;
}

65
CTDL2 HIENLTH, HCMUP
Phn tch
Khi no cn cn bng li cy?
+ Khi nt b xo l nt c mu en
Khi cn bng cn n s vi phm t/c no?
+ t/c chiu cao cy en

66
CTDL2 HIENLTH, HCMUP
Phn tch
Khi hu mt nt en th chiu cao en ca
nhnh cha n s b st gim 1 n v, ta
c th:
+ Bin nt en cng cp cy con cn li
thnh nt (nu c)
+ Thc hin xoay cy to s cn bng
=> KL: Kt hp i mu v xoay cy

67
CTDL2 HIENLTH, HCMUP
CODE
void Delete(RBTree &t, int k)
{
//Tm nt z cn xo
if (isEmpty(t)) return;
pNode z = t.root;
while (z!=Null && z->key !=k){
if (z->key > k)
z= z->pLeft;
else
z= z->pRight;
}
if (z==Null)
return ; //Khng tm thy

68
CTDL2 HIENLTH, HCMUP
CODE
Xc nh nt y l nt cn thc s xo
If (z->pLeft ==Null !! z->pRight == Null)
y = z; //z khng 2 con => xo
else
//y ch c th c 1 con
y = SearchStandFor(z);


69
CTDL2 HIENLTH, HCMUP
CODE
//Tin hnh xo y
pNode x; // x l nt con ca y
if (y->pLeft != Null)
x=y->pLeft;
else
x = y->pRight;

//cha ca x l cha ca y
//Nu x l Null vn khng bo li
x->pParent = y->pParent;

70
CTDL2 HIENLTH, HCMUP
CODE
if (y->pParent == Null) //y l gc
t.root = x;
else
if (y->Parent->pLeft ==y)
y->pParent->pLeft = x;
else
y->pParent->pRight =x;

71
CTDL2 HIENLTH, HCMUP
CODE
//Kim tra cn bng
if (y != z) // y l phn t th mng
z->key = y->key;
if (y->color == BLACK)
FIXUP(t,x); // cn bng li

//Xo y
y->pLeft = y->pRight = y->pParent=Null;
Delete y;

72
CTDL2 HIENLTH, HCMUP
Cn bng li cy sau khi xo mt nt en
x: nt ang thiu en
w: l nt anh/em ca x

73
CTDL2 HIENLTH, HCMUP
TH1: x hoc gc
Nt cha du hiu en l nt (nt
- en) hay nt gc.
X l:
T mu nt en sang mu en.
Loi b du hiu en v kt thc

74
CTDL2 HIENLTH, HCMUP
TH2: x en kp, w v 2 con u en
i mu nt anh em sang
Di chuyn du hiu en ln trn 1 cp
(theo hng gc ca cy)

75
CTDL2 HIENLTH, HCMUP
TH2: w v 2 con w en
B
A
C
x
E

i mu
w
/en
D
A
C
D
E


76
CTDL2 HIENLTH, HCMUP
TH3: x en kp, w , 2 con w en, p en
o mu nt p v w
Thc hin php quay ti p
Du hiu en vn ch vo nt x ban u

77
CTDL2 HIENLTH, HCMUP
TH3: w
B
A
C
D
x
D
E
E

A
C

Left Rotate
i mu
w
x
w
mi

78
CTDL2 HIENLTH, HCMUP
TH4: x en kp, w en, 1 trong 2 con w
Gi z l nt con ca w c mu .
C 2 trng hp xy ra:
4a) z l chu ni
4b) z l chu ngoi

X l:
4a) chuyn sang 4b) nh php quay v i
mu
4b) c x l bng php quay v i mu

79
CTDL2 HIENLTH, HCMUP
TH4a: w en con tri w mu
A
D
C
x
E
E

Quay phi ti W
i mu
w
x
w mi
/en
B
C

D
B
B
z
z mi

80
CTDL2 HIENLTH, HCMUP
TH4b: w en con phi w mu
A
D
E
x
B E
C

Quay tri ti cha ca x


i mu
w
/en
B
D
C

z
p

81
CTDL2 HIENLTH, HCMUP
Hu 50, 55
25
60
55
50
65
10
30

82
CTDL2 HIENLTH, HCMUP
82
Cu hi v tho lun

You might also like