Upload
duynguyen
View
214
Download
1
Embed Size (px)
DESCRIPTION
Cây
Citation preview
Chng 7: CY (Tree)
Chng 7: Cy (Tree)
Ni dung
*
Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)Chng 7: Cy (Tree)
Tree inh nghia
*
Cy l mt tp hp T cc phn t (gi l nt ca cy) trong c 1 nt c bit c gi l gc, cc nt cn li c chia thnh nhng tp ri nhau T1, T2 , ... , Tn theo quan h phn cp trong Ti cng l mt cyA tree is a set of one or more nodes T such that:i. there is a specially designated node called a rootii. The remaining nodes are partitioned into n disjointed set of nodes T1, T2,,Tn, each of which is a treeChng 7: Cy (Tree)
Tree V d
*
S t chc ca mt cng tyCng ty A
R&D
Kinh doanh
Tai vu
San xuat
TV
CD
Amplier
Noi a
Quoc te
Chau au
My
Cac nc
Chng 7: Cy (Tree)
Tree V d
Cy th mc*
Chng 7: Cy (Tree)
Tree V d
*
Chng 7: Cy (Tree)
Tree V d
This is a tree because it is a set of nodes {A,B,C,D,E,F,G,H,I}, with node A as a root node and the
remaining nodes partitioned into three disjointed sets {B,G,H,I}, { C,E,F} and {D}, respectively. Each of
these sets is a tree because each satisfies the aforementioned definition properly.
Chng 7: Cy (Tree)
Tree V d
Khng phai cy*
Nhn xet: Trong cu trc cy khng tn ti chu trnh
Even though this is a set of nodes {A,B,C,D,E,F,G,H,I}, with node A as a root node, this is not a tree
because the fact that node E is shared makes it impossible to partition nodes B through I into
disjointed sets.
Chng 7: Cy (Tree)
Tree - Mt s khi nim c bn
Bc ca mt nt (Degree of a Node of a Tree): L s cy con ca nt . Nu bc cua mt nut bng 0 thi nut o goi la nut la (leaf node)Bc ca mt cy (Degree of a Tree):L bc ln nht ca cc nt trong cy. Cy c bc n th gi l cy n-phnNt gc (Root node): L nt khng c nt chaNt l (Leaf node): L nt c bc bng 0*
Chng 7: Cy (Tree)
Tree - Mt s khi nim c bn
*
Nt nhanh: L nt c bc khc 0 v khng phi l gcMc ca mt nt (Level of a Node): Mc (gc (T) ) = 0Gi T1, T2, T3, ... , Tn l cc cy con ca T0 Mc(T1) = Mc(T2) = ... = Mc(Tn) = Mc(T0) + 1Chng 7: Cy (Tree)
Tree V d
Chng 7: Cy (Tree)
*
Owner
Manager
Chef
Waitress
Cook
Helper
Waiter
Nut gc (root node)
Tree V d
nut l (leaf node)
*
Chng 7: Cy (Tree)
Tree V d
*
Tree nodes
Tree edges
Chng 7: Cy (Tree)
Tree V d
*
Gc(root)
Nt trong
l
cha
v
con
Chng 7: Cy (Tree)
*
Owner
Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper
Joyce Chris Max Len
A Tree Has Levels
LEVEL 0
*
Chng 7: Cy (Tree)
*
Owner
Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper
Joyce Chris Max Len
Level One
LEVEL 1
*
Chng 7: Cy (Tree)
*
Owner
Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper
Joyce Chris Max Len
Level Two
LEVEL 2
*
Chng 7: Cy (Tree)
nh ngha
*
Node 0
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
l
Gc
Node 1,2,3 con ca gc
Node 4, 5 l anh em
Node 1 l cha ca
Nodes 4,5
Node 0 l t tin ca tt c cc node
Nodes 1-6 l con chu ca node 0
Chng 7: Cy (Tree)
Mt s khi nim c bn
di ng i t gc n nt x:Px = s nhnh cn i qua k t gc n x
di ng i tng ca cy:trong Px l di ng i t gc n X
di ng i trung bnh: PI = PT/n (n l s nt trn cy T)Rng cy: l tp hp nhiu cy trong th t cc cy l quan trng*
Chng 7: Cy (Tree)
Depth-first Search
*
Chng 7: Cy (Tree)
Breadth-first Search
*
Chng 7: Cy (Tree)
Ni dung
*
Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)Chng 7: Cy (Tree)
Binary Tree inh nghia
*
Cy nh phn l cy m mi nt c ti a 2 cy conChng 7: Cy (Tree)
Binary Tree Vi du
*
Cy con trai
Cy con phai
Hinh anh mt cy nh phn
Chng 7: Cy (Tree)
Binary Tree Vi du
Cy lch trai va cy lch phaiChng 7: Cy (Tree)
Binary Tree Vi du
A full binary treeChng 7: Cy (Tree)
Binary Tree Vi du
Cy nh phn dng biu din mt biu thc ton hc:*
Chng 7: Cy (Tree)
Binary Tree Mt s tnh cht
S nt nm mc i 2iS nt l 2h-1, vi h l chiu cao ca cyChiu cao ca cy h log2N, vi N la s nt trong cyS nt trong cy 2h-1vi h l chiu cao ca cy*
Xem them gtrinh trang 142
A full binary tree is a binary of depth k having 2^k 1 nodes. If it has < 2^k 1, it is not a full binary tree.
Chng 7: Cy (Tree)
Binary Tree
Cy nh phn y*
0
1
2
3
7
4
5
6
8
0
1
2
3
4
5
6
7
8
2k+1, 2k+2
k=3
y : cc node l lun nm mc cao nht v cc nt khng l nt l c y 2 nhnh con.
Chng 7: Cy (Tree)
Binary Tree - Biu din
In general, any binary tree can be represented using an array, but ?If a binary tree is a complete binary tree, it can be represented using an array capable of holding n
elements where n is the number of nodes in a complete binary tree. If the tree is an array of n
elements, we can store the data values of the ith node of a complete binary tree with n nodes at an
index i in an array tree. That means we can
map node i to the ith index in the array, and
the parent of node i will get mapped at an index i/2, whereas
the left child of node i gets mapped at an index 2i and
the right child gets mapped at an index 2i + 1.
For example, a complete binary tree with depth k = 3,
having the number of nodes n = 5, can be represented using an array of
In general, any binary tree can be represented using an array. We see that an array representation of
a complete binary tree does not lead to the waste of any storage. But if you want to represent a binary
tree that is not a complete binary tree using an array representation, then it leads to the waste of
storage as shown in Figure 7.9.
Chng 7: Cy (Tree)
Binary Tree - Biu din
*
S dng mt bin ng lu tr cc thng tin cua mt nut:Thng tin lu tr ti nta ch nt gc ca cy con tri trong b nha ch nt gc ca cy con phi trong b nhKhai bao cu truc cy nhi phn: qun l cy nh phn ch cn qun l a ch nt gc:Tree root;
struct TNode
{
DataType data;
TNode *pLeft, *pRight;
};
typedef TNode* Tree;
An array representation of a binary tree is not suitable for frequent insertions and deletions, even
though no storage is wasted if the binary tree is a complete binary tree. It makes insertion and deletion
in a tree costly. Therefore, instead of using an array representation, we can use a linked
representation, in which every node is represented as a structure with three fields
Chng 7: Cy (Tree)
Binary Tree - Biu din
*
a
b
c
d
e
g
h
i
f
j
k
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn
*
C 3 kiu duyt chnh c th p dng trn cy nh phn: Duyt theo th t trc - preorder (Node-Left-Right: NLR)Duyt theo th t gia - inorder (Left-Node-Right: LNR)Duyt theo th t sau - postorder (Left-Right-Node: LRN)Tn ca 3 kiu duyt ny c t da trn trnh t ca vic thm nt gc so vi vic thm 2 cy conChng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn
Duyt theo th t trc NLR (Node-Left-Right)
Kiu duyt ny trc tin thm nt gc sau thm cc nt ca cy con tri ri n cy con phi
Th tc duyt c th trnh by n gin nh sau:
*
void NLR (Tree t)
{
if (t != NULL)
{
// X ly t tng ng theo nhu cu
NLR(t->pLeft);
NLR(t->pRight);
}
}
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn NLR
*
A
B
D
H
I
N
E
J
K
O
C
F
L
P
G
M
A
Kt qu:
B
D
H
I
N
E
J
O
K
C
F
L
P
G
M
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn
Duyt theo th t gia LNR (Left-Node-Right)
Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm nt gc ri n cy con phiTh tc duyt c th trnh by n gin nh sau:*
void LNR(Tree t)
{
if (t != NULL)
{
LNR(t->pLeft);
//X ly nut t theo nhu cu
LNR(t->pRight);
}
}
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn LNR
*
A
B
D
H
I
N
E
J
K
O
C
F
L
P
G
M
H
Kt qu:
D
N
I
B
J
O
E
K
A
F
P
L
C
M
G
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn
Duyt theo th t gia LRN (Left-Right-Node)
Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm n cy con phi ri cui cng mi thm nt gcTh tc duyt c th trnh by n gin nh sau:*
void LRN(Tree t)
{
if (t != NULL)
{
LRN(t->pLeft);
LRN(t->pRight);
// X ly tng ng t theo nhu cu
}
}
Chng 7: Cy (Tree)
Binary Tree - Duyt cy nh phn LRN
*
A
B
D
H
I
N
E
J
K
O
C
F
L
P
G
M
H
Kt qu:
N
I
D
O
J
K
E
B
P
L
F
M
G
C
A
Chng 7: Cy (Tree)
*
Mt v d quen thuc trong tin hc v ng dng ca duyt theo th t sau l vic xc nh tng kch thc ca mt th mc trn aBinary Tree - Duyt cy nh phn LRN
Chng 7: Cy (Tree)
*
Tnh ton gi tr ca biu thc da trn cy biu thcBinary Tree - Duyt cy nh phn LRN
(3 + 1)3/(9 5 + 2) (3(7 4) + 6) = 13
Chng 7: Cy (Tree)
Mt cch biu din cy nh phn khc
*
i khi, khi nh ngha cy nh phn, ngi ta quan tm n c quan h 2 chiu cha con ch khng ch mt chiu nh nh ngha phn trn. Lc , cu trc cy nh phn c th nh ngha li nh sau:typedef struct tagTNode
{
DataTypeKey;
struct tagTNode*pParent;
struct tagTNode*pLeft;
struct tagTNode*pRight;
}TNODE;
typedef TNODE*TREE;
Chng 7: Cy (Tree)
Mt cch biu din cy nh phn khc
*
Chng 7: Cy (Tree)
Mt s thao tc trn cy
m s nodem s node lTnh chiu cao*
Chng 7: Cy (Tree)
m s node
*
Chng 7: Cy (Tree)
m s node
S node (EmptyTree) = 0S node (Tree) = 1 + S node (Tree.Left)+ S node (Tree.Right)
*
Chng 7: Cy (Tree)
m s node l
*
Chng 7: Cy (Tree)
m s node l
S nt l (EmptyTree) = 0
S nt l(RootOnly) = 1
S nt l(Tree) = S nt l (Tree.Left) +
S nt l (Tree.Right)
*
Chng 7: Cy (Tree)
Tnh chiu cao
*
Chng 7: Cy (Tree)
Tnh chiu cao
Height(Tree) = 1 + maximum(Height(Tree.Left), Height(Tree.Right))
Depth(EmptyTree) = 0
*
Chng 7: Cy (Tree)
Ni dung
*
Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)Chng 7: Cy (Tree)
Binary Search Tree
Trong chng 6, chng ta lm quen vi mt s cu trc d liu ng. Cc cu trc ny c s mm do nhng li b hn ch trong vic tm kim thng tin trn chng (ch c th tm kim tun t)Nhu cu tm kim l rt quan trng. V l do ny, ngi ta a ra cu trc cy tha mn nhu cu trnTuy nhin, nu ch vi cu trc cy nh phn nh ngha trn, vic tm kim cn rt m hCn c thm mt s rng buc cu trc cy tr nn cht ch, d dng hnMt cu trc nh vy chnh l cy nh phn tm kimChng 7: Cy (Tree)
Binary Search Tree - nh ngha
Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt, kha ca nt ang xt ln hn kha ca tt c cc nt thuc cy con tri v nh hn kha ca tt c cc nt thuc cy con phiNh rng buc v kha trn CNPTK, vic tm kim tr nn c nh hngNu s nt trn cy l N th chi ph tm kim trung bnh ch khong log2NTrong thc t, khi xt n cy nh phn ch yu ngi ta xt CNPTK*
Chng 7: Cy (Tree)
Binary Search Tree Vi du
*
44
18
88
13
37
59
108
15
23
40
55
71
Chng 7: Cy (Tree)
*
Binary Search Tree Vi du
*
Chng 7: Cy (Tree)
*
Binary Search Tree Vi du
*
Chng 7: Cy (Tree)
Cy nh phn v tm kim nh phn
*
0 1 2 3 4 5 6
34
41
56
63
72
89
95
Chng 7: Cy (Tree)
Cy nh phn v tm kim nh phn
*
0 1 2 3 4 5 6
0 1 2
4 5 6
34
41
56
63
72
89
95
34
41
56
72
89
95
Chng 7: Cy (Tree)
Cy nh phn v tm kim nh phn
*
0 1 2 3 4 5 6
0 1 2
4 5 6
0 2
4 6
34
41
56
63
72
89
95
34
41
56
72
89
95
34
56
72
95
Chng 7: Cy (Tree)
Binary Search Tree (BST)
*
63
41
89
34
56
72
95
Chng 7: Cy (Tree)
Binary Search Tree Biu din
*
Cu trc d liu ca CNPTK l cu trc d liu biu din cy nh phn ni chung (???)Thao tc duyt cy trn CNPTK hon ton ging nh trn cy nh phn (???)Ch : khi duyt theo th t gia, trnh t cc nt duyt qua s cho ta mt dy cc nt theo th t tng dn ca khaChng 7: Cy (Tree)
Binary Search Tree Duyt cy
*
Duyt inorder: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50
Duyt gia trn CNPTK
25
10
3
1
6
5
18
12
20
13
37
29
35
32
50
41
Chng 7: Cy (Tree)
Binary Search Tree Duyt cy
*
Duyt postorder:
Duyt sau trn CNPTK
25
10
3
1
6
5
18
12
20
13
37
29
35
32
50
41
Chng 7: Cy (Tree)
Binary Search Tree Duyt cy
*
Duyt preorder:
Duyt trc trn CNPTK
25
10
3
1
6
5
18
12
20
13
37
29
35
32
50
41
Chng 7: Cy (Tree)
Binary Search Tree Tm kim
*
25
10
3
1
6
5
18
12
20
13
37
29
35
32
50
41
Tm kim
13
Khc nhau
Ging nhau
Node gc nh hn
Node gc ln hn
Tm thy
S node duyt: 5
S ln so snh: 9
Tm kim trn CNPTK
Chng 7: Cy (Tree)
Binary Search Tree Tm kim
*
25
10
3
1
6
5
18
12
20
13
37
29
35
32
50
41
Tm kim
14
Khc nhau
Node gc nh hn
Node gc ln hn
Khng tm thy
S node duyt: 5
S ln so snh: 10
Tm kim trn CNPTK
Chng 7: Cy (Tree)
Binary Search Tree Tm kim
Tm mt phn t x trong CNPTK (dng quy):*
TNode* searchNode(Tree T, DataType X)
{
if (T)
{
if(T->Key == X)
return T;
if(T->Key > X)
return searchNode(T->pLeft, X);
return searchNode(T->pRight, X);
}
return NULL;
}
Chng 7: Cy (Tree)
Binary Search Tree Tm kim
Tm mt phn t x trong CNPTK (dng vng lp):*
TNode * searchNode(Tree T, DataType x)
{
TNode *p = T;
while (p != NULL)
{
if(x == p->Key) return p;
else
if(x < p->Key) p = p->pLeft;
elsep = p->pRight;
}
return NULL;
}
Chng 7: Cy (Tree)
Binary Search Tree Tm kim
*
Nhn xt:S ln so snh ti a phi thc hin tm phn t X l h, vi h l chiu cao ca cyNh vy thao tc tm kim trn CNPTK c n nt tn chi ph trung bnh khong O(log2n)Chng 7: Cy (Tree)
Binary Search Tree Thm
*
Vic thm mt phn t X vo cy phi bo m iu kin rng buc ca CNPTKTa c th thm vo nhiu ch khc nhau trn cy, nhng nu thm vo mt nt ngoi s l tin li nht do ta c th thc hin qu trnh tng t thao tc tm kimKhi chm dt qu trnh tm kim cng chnh l lc tm c ch cn thmHm insert tr v gi tr:1 khi khng b nh
0 khi gp nt c
1 khi thm thnh cng
Chng 7: Cy (Tree)
Binary Search Tree Thm
Thm mt phn t vo cy*
int insertNode (Tree &T, DataType X)
{if (T) {
if(T->data == X) return 0;
if(T->data > X)
return insertNode(T->pLeft, X);
else
return insertNode(T->pRight, X);
}
T = new TNode;
if (T == NULL) return -1;
T->data = X;
T->pLeft = T->pRight = NULL;
return 1;
}
Chng 7: Cy (Tree)
*
6
Binary Search Tree Thm
V d to cy vi dy:4, 6, 1, 2, 5, 7, 3
4
1
2
5
7
3
Chng 7: Cy (Tree)
Binary Search Tree Thm
*
30
12
49
51
17
22
56
70
68
65
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Vic hy mt phn t X ra khi cy phi bo m iu kin rng buc ca CNPTKC 3 trng hp khi hy nt X c th xy ra:X l nt lX ch c 1 con (tri hoc phi)X c c 2 conChng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Trng hp 1: X l nt l Ch n gin hy X v n khng mc ni n phn t no khc44
18
88
13
37
59
108
15
23
40
55
71
T/h 1: huy X=40
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Trng hp 2: X ch c 1 con (tri hoc phi) Trc khi hy X ta mc ni cha ca X vi con duy nht ca n*
44
18
88
13
37
59
108
15
23
55
71
T/h 2: huy X=37
Trc khi huy X ta moc noi cha cua X vi con duy nhat cua no
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Trng hp 3: X c 2 con:Khng th hy trc tip do X c 2 con Hy gin tip: Thay v hy X, ta s tm mt phn t th mng Y. Phn t ny c ti a mt conThng tin lu ti Y s c chuyn ln lu ti XSau , nt b hy tht s s l Y ging nh 2 trng hp uVn : chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK*
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Trng hp 3: X c 2 con:C 2 phn t tha mn yu cu: Phn t tri nht trn cy con phiPhn t phi nht trn cy con triVic chn la phn t no l phn t th mng hon ton ph thuc vo thch ca ngi lp trnh y, ta s chn phn t phi nht trn cy con tri lm phn t th mng*
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Trng hp 3: X c 2 con:Khi hy phn t X=18 ra khi cy, phn t 23 l phn t th mng:*
44
18
88
13
37
59
108
15
23
40
55
71
T/h 3: huy X=18
30
23
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Trng hp 3: X c 2 con:Hm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy:int delNode(Tree &T, DataType X)
Hm searchStandFor tm phn t th mng cho nt pvoid searchStandFor(Tree &p, Tree &q)
*
Chng 7: Cy (Tree)
*
Binary Search Tree Hy mt phn t c kha X
int delNode(Tree &T, DataType X)
{
if (T == NULL)return 0;
if (T->data > X)return delNode(T->pLeft, X);
if (T->data < X)return delNode(T->pRight, X);
TNode* p = T;
if (T->pLeft == NULL)
T = T->pRight;
else
if (T->pRight == NULL) T = T->pLeft;
else // T c 2 con
searchStandFor(p, T->pRight);
delete p;
}
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
Tm phn t th mng*
void searchStandFor(Tree &p, Tree &q)
{
if (q->pLeft)
searchStandFor(p, q->pLeft);
else
{
p->data = q->data;
p = q;
q = q->pRight;
}
}
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
V d xa 51:Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
V d xa 83:Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
V d xa 36:Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Xa nt gc (2 ln):Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
V d xa 15:Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
42 l th mngChng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Kt qu xo ln 1:Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
V d xa 42Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Chng 7: Cy (Tree)
Binary Search Tree Hy mt phn t c kha X
*
Xa 15, sau 42:Chng 7: Cy (Tree)
Binary Search Tree Hy ton b cy
Vic ton b cy c th c thc hin thng qua thao tc duyt cy theo th t sau. Ngha l ta s hy cy con tri, cy con phi ri mi hy nt gc*
void removeTree(Tree &T)
{
if(T)
{
removeTree(T->pLeft);
removeTree(T->pRight);
delete(T);
}
}
Chng 7: Cy (Tree)
Binary Search Tree
*
Nhn xt:Tt c cc thao tc searchNode, insertNode, delNode u c phc tp trung bnh O(h), vi h l chiu cao ca cy Trong trong trng hp tt nht, CNPTK c n nt s c cao h = log2(n). Chi ph tm kim khi s tng ng tm kim nh phn trn mng c th tTrong trng hp xu nht, cy c th b suy bin thnh 1 danh sch lin kt (khi m mi nt u ch c 1 con tr nt l). Lc cc thao tc trn s c phc tp O(n)V vy cn c ci tin cu trc ca CNPTK t c chi ph cho cc thao tc l log2(n)Chng 7: Cy (Tree)
Binary Search Tree
*
1,2,3,4,51
2
3
4
5
Chng 7: Cy (Tree)
Ni dung
*
Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)Chng 7: Cy (Tree)
AVL Tree - nh ngha
*
Cy nh phn tm kim cn bng l cy m ti mi nt ca n cao ca cy con tri v ca cy con phi chnh lch khng qu mt.Chng 7: Cy (Tree)
AVL Tree V d
*
44
23
88
13
37
59
108
15
30
40
55
71
Chng 7: Cy (Tree)
AVL Tree
*
Lch s cy cn bng (AVL Tree): AVL l tn vit tt ca cc tc gi ngi Nga a ra nh ngha ca cy cn bng Adelson-Velskii v Landis (1962)T cy AVL, ngi ta pht trin thm nhiu loi CTDL hu dng khc nh cy -en (Red-Black Tree), B-Tree, Cy AVL c chiu cao O(log2(n))Chng 7: Cy (Tree)
AVL Tree
Ch s cn bng ca mt nt: nh ngha: Ch s cn bng ca mt nt l hiu ca chiu cao cy con phi v cy con tri ca n. i vi mt cy cn bng, ch s cn bng (CSCB) ca mi nt ch c th mang mt trong ba gi tr sau y: CSCB(p) = 0 cao cy tri (p) = cao cy phi (p)CSCB(p) = 1 cao cy tri (p) < cao cy phi (p)CSCB(p) =-1 cao cy tri (p) > cao cy phi (p) tin trong trnh by, chng ta s k hiu nh sau: p->balFactor = CSCB(p); cao cy tri (p) k hiu l hL cao cy phi(p) k hiu l hR*
Chng 7: Cy (Tree)
AVL Tree Biu din
*
#defineLH-1/* Cay con trai cao hn */
#defineEH 0/* Hai cay con bang nhau */
#defineRH 1/* Cay con phai cao hn */
struct AVLNode{
charbalFactor; // Ch s cn bng
DataTypedata;
tagAVLNode*pLeft;
tagAVLNode*pRight;
};
typedef AVLNode*AVLTree;
Chng 7: Cy (Tree)
AVL Tree Biu din
*
Trng hp thm hay hy mt phn t trn cy c th lm cy tng hay gim chiu cao, khi phi cn bng li cyVic cn bng li mt cy s phi thc hin sao cho ch nh hng ti thiu n cy nhm gim thiu chi ph cn bngCc thao tc c trng ca cy AVL:Thm mt phn t vo cy AVLHy mt phn t trn cy AVLCn bng li mt cy va b mt cn bngChng 7: Cy (Tree)
AVL Tree
Cc trng hp mt cn bng:Ta s khng kho st tnh cn bng ca 1 cy nh phn bt k m ch quan tm n cc kh nng mt cn bng xy ra khi thm hoc hy mt nt trn cy AVL Nh vy, khi mt cn bng, lch chiu cao gia 2 cy con s l 2C 6 kh nng sau: Trng hp 1 - Cy T lch v bn tri : 3 kh nngTrng hp 2 - Cy T lch v bn phi: 3 kh nng*
Chng 7: Cy (Tree)
AVL Tree
Trng hp 1: cy T lch v bn tri*
T
T1
L1
R1
h
h-1
h-1
L
R1
T
T1
L1
h
h-1
L
R
R
h-1
T
T1
L1
h
h-1
h
L
R
L1
Chng 7: Cy (Tree)
AVL Tree
Trng hp 2: cy T lch v bn phi*
T
h-1
R1
T1
h
h
R
L
L1
T
T1
L1
R1
h
h-1
R
T
R1
T1
L1
h
h-1
R
L
h-1
L
h-1
Chng 7: Cy (Tree)
AVL Tree
*
Cc trng hp mt cn bng:Cc trng hp lch v bn phi hon ton i xng vi cc trng hp lch v bn tri. V vy, ch cn kho st trng hp lch v bn tri. Trong 3 trng hp lch v bn tri, trng hp T1 lch phi l phc tp nht. Cc trng hp cn li gii quyt rt n gin.Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-LeftT
T1
L1
R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
T/h 1.2: cy T1 khng lch. Ta thc hin php quay n Left-LeftT
T1
L1
h
h-1
h
L
R
T1
T
L1
h
R
h-1
R1
R1
h
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
T/h 1.3: cy T1 lch v bn phi. Ta thc hin php quay kp Left-Right Do T1 lch v bn phi ta khng th p dng php quay n p dng trong 2 trng hp trn v khi cy T s chuyn t trng thi mt cn bng do lch tri thnh mt cn bng do lch phi ? cn p dng cch khcChng 7: Cy (Tree)
*
R1
T
T1
L1
h
h-1
L
R
h-1
T
T1
L1
h-1
R1
R
h-1
T2
L2
R2
T
T1
L1
h-1
R
h-1
T2
L2
R2
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
Lu : Trc khi cn bng cy T c chiu cao h+2 trong c 3 trng hp 1.1, 1.2 v 1.3Sau khi cn bng:Trng hp 1.1 v 1.3 cy c chiu cao h+1Trng hp 1.2 cy vn c chiu cao h+2. y l trng hp duy nht sau khi cn bng nt T c c ch s cn bng 0Thao tc cn bng li trong tt c cc trng hp u c phc tp O(1)*
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-LeftT
T1
L1
R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
void rotateLL(AVLTree &T) //quay n Left-Left
{
AVLNode* T1 = T->pLeft;
T->pLeft= T1->pRight;
T1->pRight= T;
switch(T1->balFactor) {
case LH: T->balFactor = EH;
T1->balFactor = EH;
break;
case EH: T->balFactor = LH;
T1->balFactor = RH;
break;
}
T= T1;
}
Quay n Left-Left:Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
Quay n Right-Right:void rotateRR (AVLTree &T)//quay n Right-Right
{
AVLNode*T1 = T->pRight;
T->pRight= T1->pLeft;
T1->pLeft= T;
switch(T1->balFactor){
case RH: T->balFactor = EH;
T1->balFactor= EH;
break;
case EH: T->balFactor = RH; T1->balFactor= LH;
break;
}
T = T1;
}
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
Quay kp Left-Right:void rotateLR(AVLTree &T)//quay kp Left-Right
{AVLNode*T1 = T->pLeft;
AVLNode*T2 = T1->pRight;
T->pLeft= T2->pRight;
T2->pRight= T;
T1->pRight= T2->pLeft;
T2->pLeft= T1;
switch(T2->balFactor){
case LH: T->balFactor = RH; T1->balFactor = EH; break;
case EH: T->balFactor = EH; T1->balFactor = EH; break;
case RH: T->balFactor = EH; T1->balFactor = LH; break;
}
T2->balFactor = EH;
T = T2;
}
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
Quay kep Right-Leftvoid rotateRL(AVLTree &T)//quay kp Right-Left
{AVLNode*T1 = T->pRight;
AVLNode*T2 = T1->pLeft;
T->pRight= T2->pLeft;
T2->pLeft= T;
T1->pLeft= T2->pRight;
T2->pRight= T1;
switch(T2->balFactor){
case RH: T->balFactor = LH; T1->balFactor = EH; break;
case EH: T->balFactor = EH; T1->balFactor = EH; break;
case LH: T->balFactor = EH; T1->balFactor = RH; break;
}
T2->balFactor = EH;
T = T2;
}
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
Cn bng khi cy b lch v bn tri:int balanceLeft(AVLTree &T)
//Cn bng khi cy b lch v bn tri
{
AVLNode*T1 = T->pLeft;
switch(T1->balFactor){
case LH:rotateLL(T); return 2;
case EH:rotateLL(T); return 1;
case RH:rotateLR(T); return 2;
}
return 0;
}
Chng 7: Cy (Tree)
AVL Tree - Cn bng li cy AVL
*
Cn bng khi cy b lch v bn phiint balanceRight(AVLTree &T )
//Cn bng khi cy b lch v bn phi
{
AVLNode*T1 = T->pRight;
switch(T1->balFactor){
case LH:rotateRL(T); return 2;
case EH:rotateRR(T); return 1;
case RH:rotateRR(T); return 2;
}
return 0;
}
Chng 7: Cy (Tree)
AVL Tree - Thm mt phn t trn cy AVL
Vic thm mt phn t vo cy AVL din ra tng t nh trn CNPTKSau khi thm xong, nu chiu cao ca cy thay i, t v tr thm vo, ta phi ln ngc ln gc kim tra xem c nt no b mt cn bng khng. Nu c, ta phi cn bng li nt nyVic cn bng li ch cn thc hin 1 ln ti ni mt cn bng Hm insertNode tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng. Nu sau khi thm, chiu cao cy b tng, gi tr 2 s c tr vint insertNode(AVLTree &T, DataType X)
*
Chng 7: Cy (Tree)
AVL Tree - Thm mt phn t trn cy AVL
int insertNode(AVLTree &T, DataType X)
{intres;
if (T)
{if (T->key == X) return 0; // c
if (T->key > X)
{ res= insertNode(T->pLeft, X);
if(res < 2) return res;
switch(T->balFactor)
{case RH: T->balFactor = EH; return 1;
case EH: T->balFactor = LH; return 2;
case LH: balanceLeft(T); return 1;
}
}
......................................................
}
*
insertNode2
Chng 7: Cy (Tree)
AVL Tree - Thm mt phn t trn cy AVL
int insertNode(AVLTree &T, DataType X)
{
......................................................
else // T->key < X
{ res= insertNode(T-> pRight, X);
if(res < 2) return res;
switch(T->balFactor)
{case LH: T->balFactor= EH; return 1;
case EH: T->balFactor= RH; return 2;
case RH: balanceRight(T); return 1;
}
}
......................................................
}
*
insertNode3
Chng 7: Cy (Tree)
AVL Tree - Thm mt phn t trn cy AVL
int insertNode(AVLTree &T, DataType X)
{
......................................................
T= new TNode;
if(T == NULL) return -1; //thiu b nh
T->key = X;
T->balFactor= EH;
T->pLeft = T->pRight = NULL;
return 2; // thnh cng, chiu cao tng
}
*
Chng 7: Cy (Tree)
AVL Tree - Hy mt phn t trn cy AVL
Cng ging nh thao tc thm mt nt, vic hy mt phn t X ra khi cy AVL thc hin ging nh trn CNPTKSau khi hy, nu tnh cn bng ca cy b vi phm ta s thc hin vic cn bng liTuy nhin vic cn bng li trong thao tc hy s phc tp hn nhiu do c th xy ra phn ng dy chuynHm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy. Nu sau khi hy, chiu cao cy b gim, gi tr 2 s c tr v:int delNode(AVLTree &T, DataType X)
*
Chng 7: Cy (Tree)
AVL Tree - Hy mt phn t trn cy AVL
int delNode(AVLTree &T, DataType X)
{intres;
if(T==NULL)return 0;
if(T->key > X)
{ res = delNode (T->pLeft, X);
if(res < 2)return res;
switch(T->balFactor)
{ case LH: T->balFactor = EH; return 2;
case EH: T->balFactor = RH; return 1;
case RH: return balanceRight(T);
}
} // if(T->key > X)
......................................................
}
*
delNode2
Chng 7: Cy (Tree)
AVL Tree - Hy mt phn t trn cy AVL
int delNode(AVLTree &T, DataType X)
{
......................................................
if(T->key < X)
{ res= delNode (T->pRight, X);
if(res < 2)return res;
switch(T->balFactor)
{ case RH: T->balFactor = EH; return 2;
case EH: T->balFactor = LH; return 1;
case LH: return balanceLeft(T);
}
} // if(T->key < X)
......................................................
}
*
delNode3
Chng 7: Cy (Tree)
AVL Tree - Hy mt phn t trn cy AVL
int delNode(AVLTree &T, DataType X)
{......................................................
else//T->key == X
{ AVLNode*p = T;
if(T->pLeft == NULL) { T = T->pRight; res = 2; }
else if(T->pRight == NULL) { T = T->pLeft; res = 2; }
else //T c c 2 con
{ res = searchStandFor(p,T->pRight);
if(res < 2) return res;
switch(T->balFactor)
{ case RH: T->balFactor = EH; return 2;
case EH: T->balFactor = LH; return 1;
case LH: return balanceLeft(T);
}
}
delete p; return res;
}
}
*
Chng 7: Cy (Tree)
AVL Tree - Hy mt phn t trn cy AVL
int searchStandFor(AVLTree &p, AVLTree &q)
//Tm phn t th mng
{intres;
if(q->pLeft)
{ res= searchStandFor(p, q->pLeft);
if(res < 2)return res;
switch(q->balFactor)
{ case LH: q->balFactor = EH; return 2;
case EH: q->balFactor = RH; return 1;
case RH: return balanceRight(T);
}
} else
{ p->key = q->key; p = q; q = q->pRight; return 2;
}
}
*
Chng 7: Cy (Tree)
AVL Tree
*
Nhn xt:Thao tc thm mt nt c phc tp O(1)Thao tc hy mt nt c phc tp O(h)Vi cy cn bng trung bnh 2 ln thm vo cy th cn mt ln cn bng li; 5 ln hy th cn mt ln cn bng liChng 7: Cy (Tree)
AVL Tree
Nhn xt:Vic hy 1 nt c th phi cn bng dy chuyn cc nt t gc cho n phn t b hy trong khi thm vo ch cn 1 ln cn bng cc b di ng tm kim trung bnh trong cy cn bng gn bng cy cn bng hon ton log2n, nhng vic cn bng li n gin hn nhiuMt cy cn bng khng bao gi cao hn 45% cy cn bng hon ton tng ng d s nt trn cy l bao nhiu*
=
T
X
X
T
P
P