Tải bản đầy đủ (.pdf) (65 trang)

Bài giảng cấu trúc dữ liệu thuật toán chương 4 nguyễn đức nghĩa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.92 MB, 65 trang )

Ch

ng 4

CÂY

N i dung
4.1.

nh ngh a và các khái ni m

4.2. Cây nh phân
4.3. Các

1/28/2013

ng d ng

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

2


4.1.

nh ngh a và khái ni m



4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây

1/28/2013

C U TRÚC D
NGUY N

4.1.1.

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

3

nh ngh a cây

Cây bao g m các nút, có m t nút đ c bi t đ c g i là g c (root) và
các c nh n i các nút. Cây đ c đ nh ngh a đ qui nh sau:
nh ngh a cây:
Basic Step: M t nút r là cây và r đ c g i là g c c a cây này.
Recursive Step: Gi s T1,T2,...,Tk là các cây v i g c là r1,r2,...,rk.
Ta có th xây d ng cây m i b ng cách đ t r làm cha (parent) c a
các nút r1,r2,..., rk . Trong cây này r là g c và T1, T2, . . . , Tk là các
cây con c a g c r. Các nút r1, r2, . . . , rk đ c g i là con (children)

c a nút r.
Chú ý: Nhi u khi đ phù h p ta c n đ nh ngh a cây r ng (null
tree) là cây không có nút nào c .
1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

4


C u trúc đ qui c a cây

r

r2

r1

1/28/2013

Tk

T2

T1


C U TRÚC D
NGUY N

rk

LI U VÀ THU T TOÁN

Cây trong th c t









5

C NGH A - B môn KHMT

ng d ng

Bi u đ l ch thi đ u
Cây gia ph
Bi u đ phân c p qu n lý hành chính.
Cây th m c
C u trúc c a m t quy n sách
Cây bi u th c

Cây phân ho ch t p h p
...

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

6


Cây l ch thi đ u
Trong i th ng cây r t hay
c s d ng
di n t
l ch thi u c a các gi i th thao theo th th c u lo i
tr c ti p, ch ng h n vòng 2 c a World Cub
Pháp
Tây ban nha
Brazin
Anh
c
Ucrain
Italia
Ahentina


Pháp
Brazin

Italia
c
Italia

C U TRÚC D

1/28/2013

Pháp

NGUY N

Italia

LI U VÀ THU T TOÁN

7

C NGH A - B môn KHMT

Cây gia ph
Cây gia ph c a các nhà toán dòng h Bernoulli
Nikolaus
1623-1708
Johan I
1667-1748


Nikolaus II
1695-1726

Daniel
1700-1782

Nikolaus
1662-1716

Johan II
1710-1790

Johan III
1746-1807

1/28/2013

Jacob I
1654-1705

Nikolaus I
1687-1759

Jacob II
1759-1789

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN


C NGH A - B môn KHMT

8


Cây phân c p qu n lý hành chính

Ban Giám đ c
Phòng
Hành chính

TP

Phòng
T ch c

Phòng
Tài v

Phòng
Kinh doanh

Phòng
K ho ch

V n th

1/28/2013


C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

Cây th

1/28/2013

C U TRÚC D
NGUY N

9

m c

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

10


Cây m c l c sách

1/28/2013

C U TRÚC D

NGUY N

LI U VÀ THU T TOÁN

11

C NGH A - B môn KHMT

Cây gia ph ng

c (Ancestor Tree)

Cây ph h ng c: m i ng i u có b m . Cây
này là cây nh phân (binary tree).
Thùy H

ng
Quang D ng

Thúy C i

Bích Liên

1/28/2013

Trung Kiên

C U TRÚC D
NGUY N


Hoàng Cúc

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

Quang Thái

12


Cây bi u th c (Expression Tree)
+
/

/

1

3

*
6

1/3 +
C U TRÚC D

1/28/2013

NGUY N


4
7

6*7 / 4
LI U VÀ THU T TOÁN

13

C NGH A - B môn KHMT

Cây phân ho ch t p h p
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

T p con các s l :

T p con các s ch n:

{1, 3, 5, 7, 9}

{ 2, 4, 6, 8, 10}

{1, 9}

T p con các s nguyên t :

{ 2, 4, 8, 10}

{ 3, 5, 7 }


1/28/2013

C U TRÚC D
NGUY N

T p con s hoàn h o:

{6}

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

14


4.1.

nh ngh a và khái ni m

4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây

1/28/2013

C U TRÚC D
NGUY N


LI U VÀ THU T TOÁN

4.1.2. Các thu t ng












15

C NGH A - B môn KHMT

chính

Nút - node
G c - root
Lá - leaf
Con - child
Cha - parent
T tiên - ancestors
H u du - descendants
Anh em - sibling

Nút trong - internal node
Chi u cao - hight
Chi u sâu - depth

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

16


Các thu t ng

chính



N u n1, n2, . . . , nk là dãy nút trên cây sao cho ni là cha c a ni+1 v i 1  i < k, thì dãy
này đ c g i là đ ng đi (path) t nút n1 t i nút nk.
dài (length) c a đ ng đi là
b ng s l ng nút trên đ ng đi tr b t 1. Nh v y đ ng đi đ dài 0 là đ ng đi t
m t nút đ n chính nó.




N u có đ ng đi t nút a t i nút b, thì a đ
đ c g i là h u du (descendant) c a a.



T tiên (h u du ) c a m t nút khác v i chính nó đ c g i là t tiên (h u du ) chính
th ng (proper). Trong cây, g c là nút không có t tiên chính th ng và m i nút khác
trên cây đ u là h u du chính th ng c a nó.



M t nút không có h u du chính th



Các nút có cùng cha đ



Cây con (subtree) c a m t cây là m t nút cùng v i t t c các h u du c a nó.



Chi u cao (height) c a nút trên cây là b ng đ dài c a đ ng đi dài nh t t nút đó
đ n lá c ng 1. Chi u cao c a cây (height of a tree) là chi u cao c a g c.
sâu/m c
(depth/level) c a nút là b ng 1 c ng v i đ dài c a đ ng đi duy nh t t g c đ n nó.

c g i lá lá (leaf).


c g i là anh em (sibling).

C U TRÚC D

1/28/2013

ng đ

c g i là t tiên (ancestor) c a b, còn b

NGUY N

LI U VÀ THU T TOÁN

17

C NGH A - B môn KHMT

Thu t ng
nút
nodes

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

1/28/2013


18


Thu t ng
Nút cha
parent node

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

1/28/2013

C NGH A - B môn KHMT

19

Thu t ng
cha

con

parent

child

C U TRÚC D
NGUY N


LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

1/28/2013

20


Thu t ng
con

cha

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

1/28/2013

C NGH A - B môn KHMT

21

Thu t ng
g c - root

C U TRÚC D

NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

lá - leaf

1/28/2013

22


Thu t ng
cây con - subtree

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

1/28/2013

23

1/28/2013

24


Thu t ng
cây con

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT


Thu t ng
cây con

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

25

1/28/2013

C NGH A - B môn KHMT

Các thu t ng

v i cây có g c


root, ancestor

a
parent

d

b
nút

c

sibling

e

f
g
child

leaf (không có con)

h

child

j

i


descendent
1/28/2013

internal node
(không là lá)

C U TRÚC D
NGUY N

k

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

e, i, k, g, h
là lá (leaves)
26


ng đi trên cây

T cha đ n con và đ n
các nút h u du .

Có duy nh t 1 đ ng đi t
m t nút đ n m t nút là
h u du c a nó.

a


b

d

c

Path 1

Path 2

f

e

h

g

Path 1: { a, b, f, j }
Path 2: { d, i }

j
C U TRÚC D

1/28/2013

NGUY N

i


LI U VÀ THU T TOÁN

27

C NGH A - B môn KHMT

cao (height) và đ sâu/m c (depth/level)
đ cao h = 5

đ cao = 4

3

đ cao = 3

h=2

đ cao h=1
1/28/2013

8

6

10

12

1

cao c a cây là 5
C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

đ sâu 2

4

11

5

9

đ sâu 1

7

2

đ sâu 3

đ sâu 4

đ sâu 5
28



How We View a Tree

Nature Lovers View
C U TRÚC D
NGUY N

Computer Scientists View

LI U VÀ THU T TOÁN

29

1/28/2013

C NGH A - B môn KHMT

B c (Degree)
S l ng con c a nút
x đ c g i là
b c (degree) c a x.

7

3

4
11


2

degree = 0

1

5

9
1/28/2013

10

12 degree = 1

8

6

degree = 3

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

30



4.1.

nh ngh a và khái ni m

4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây

C U TRÚC D

1/28/2013

NGUY N

LI U VÀ THU T TOÁN

31

C NGH A - B môn KHMT

4.1.3. Cây có th

t

- Ordered Tree

• Th t c a các nút

• Các con c a m t nút th ng đ c x p th t t trái sang ph i. Nh
v y hai cây trong hình sau đây là khác nhau, b i vì hai con c a nút
a xu t hi n trong hai cây theo th t khác nhau:

a
b

a
c

c

b

• Cây v i các nút đ c x p th t đ c g i là cây có th t . Ta s xét
ch y u là cây có th t . Vì v y, ti p theo thu t ng cây là đ ch
cây có th t . Khi mu n kh ng đ nh là không quan tâm đ n th t ,
ta s ph i nói rõ là cây không có th t .
1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

32



X p th

t

các nút

• Ta có th x p th t các nút c a cây theo nhi u cách. Có ba
th t quan tr ng nh t, đó là Th t tr c, Th t sau và
Th t gi a (Preorder, Postorder, và Inorder)
• Các th t này đ

c đ nh ngh a m t cách đ qui nh sau

– N u cây T là r ng, thì danh sách r ng là danh sách theo th
t tr c, th t sau và th t gi a c a cây T.
– N u cây T có m t nút, thì nút đó chính là danh sách theo
th t tr c, th t sau và th t gi a c a cây T.
– Trái l i, gi s T là cây có g c r v i các cây con là T1, T2,...,
Tk.
C U TRÚC D

1/28/2013

NGUY N

Duy t theo th

LI U VÀ THU T TOÁN

33


C NGH A - B môn KHMT

t tr

c - Preorder Traversal
r

r2

r1

T1

T2

rk

Tk

• Th t tr c (hay duy t theo th
traversal) c a các nút c a T là:





1/28/2013

G c r c a T,

ti p đ n là các nút c a T1 theo th t tr c,
ti p đ n là các nút c a T2 theo th t tr c,
...
và cu i cùng là các nút c a Tk theo th t tr
C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

t

tr

c - preorder

c.
34


Duy t theo th

t sau - Postorder Traversal
r

r2

r1


Tk

T2

T1

rk

• Th t sau c a các nút c a cây T là:






Các nút c a T1 theo th t sau,
ti p đ n là các nút c a T2 theo th t sau,
...
các nút c a Tk theo th t sau,
sau cùng là nút g c r.
C U TRÚC D

1/28/2013

NGUY N

Duy t theo th

LI U VÀ THU T TOÁN


35

C NGH A - B môn KHMT

t gi a - Inorder Traversal
r

r2

r1

T1

T2

rk

Tk

• Th t gi a c a các nút c a cây T là:
– Các nút c a T1 theo th t gi a,
– ti p đ n là nút g c r,
– ti p theo là các nút c a T2, . . . , Tk, m i nhóm nút đ
gi a.

1/28/2013

C U TRÚC D
NGUY N


LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

c x p theo th t

36


Thu t toán duy t theo th t

tr

c - Preorder Traversal

void PREORDER ( nodeT r )
{
(1)
a ra r;
(2) for (m i con c c a r, n u có, theo th t t trái sang) do
PREORDER(c);
a
}
b

c

d

e


g

f

h

i

j

• Ví d : Th t tr c c a các đ nh c a cây trên hình v là
a, b, c, e, h, i, f, j, d, g
1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

Thu t toán duy t theo th


37

C NGH A - B môn KHMT

t

sau - Postorder Traversal


Thu t toán duy t theo th t sau thu đ
tác (1) và (2) trong PREORDER:

c b ng cách đ o ng

c hai thao

void POSTORDER ( nodeT r )
{
for (m i con c c a r, n u có, theo th t t trái sang) do
POSTORDER(c)
a
a ra r;
}
c

b
e
h



d
f

i

g


j

Ví d : Dãy các đ nh đ c li t kê theo th t sau c a cây trong hình v là:
b, h, i, e, j, f, c, g, d, a

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

38


Thu t toán duy t theo th t gi a - Inorder Traversal
a
void INORDER (nodeT r )
{
if ( r là lá )
a ra r;
b
c
else
e
f
{
INORDER(con trái nh t c a r);

h
i
j
a ra r;
for (m i con c c a r, ngo i tr con trái nh t, theo th t t trái sang) do
INORDER(c);
}
}



Ví d : Dãy các đ nh c a cây trong hình v đ
b, a, h, e, i, c, j, f, g, d

1/28/2013

C U TRÚC D
NGUY N

X p th


g

c li t kê theo th t gi a:

LI U VÀ THU T TOÁN

39


C NGH A - B môn KHMT

t

d

các nút

nh cách đ a ra các nút theo ba th t
v a trình bày hãy hình dung là ta đi vòng
quanh bên ngoài cây b t đ u t g c, ng c
chi u kim đ ng h và sát theo cây nh t.
Ch ng h n, đ ng đi đó đ i v i cây trong
các ví d đã xét trên là nh sau:

a

b

c
e

h

d
f

i

g


j

i v i th t tr c, ta đ a ra nút m i khi đi qua nó.
i v i th t sau, ta đ a ra nút khi qua nó l n cu i tr c khi
quay v cha c a nó.

i v i th t gi a, ta đ a ra lá ngay khi đi qua nó, còn nh ng nút
trong đ c đ a ra khi l n th hai đ c đi qua.
• Chú ý r ng các lá đ c x p th t t trái sang ph i nh nhau trong c
ba cách s p x p.



1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

40


4.1.4. Cây có nhãn (Labeled Tree)
• Thông th ng ng i ta gán cho m i nút c a cây m t nhãn (label)
ho c m t giá tr , c ng t ng t nh chúng ta đã gán m i nút c a
danh sách v i m t ph n t . Ngh a là, nhãn c a nút không ph i là tên

g i c a nút mà là giá tr đ c c t gi trong nó. Trong m t s ng
d ng ta có th thay đ i nhãn c a nút mà tên c a nó v n đ c gi
nguyên.
• Ví d : Xét cây có 7 nút n1, ..., n7. Ta gán nhãn cho các nút nh sau:








Nút n1 có nhãn *;
Nút n2 có nhãn +;
Nút n3 có nhãn -;
Nút n4 có nhãn a;
Nút n5 có nhãn b;
Nút n6 có nhãn a;
Nút n7 có nhãn c.

n1

n3

n2 +

n4

C U TRÚC D


1/28/2013

*

NGUY N

n5 b

a

n6

-

a

n7

c

LI U VÀ THU T TOÁN

41

C NGH A - B môn KHMT

Cây bi u th c (Expression Tree)
• Cây trong ví d v a nêu có tên g i là cây bi u th c
(a+b)*(a-c)
• Qui t c đ cây có nhãn bi u di n m t bi u th c là:

– M i nút lá có nhãn là toán h ng và ch g m m t toán h ng đó. Ví d nút n4 bi u
di n bi u th c a.
– M i nút trong n đ c gán nhãn là phép toán. Gi s n có nhãn là phép toán hai
ngôi q, nh + ho c *, và con trái bi u di n bi u th c E1 và con ph i bi u di n
bi u th c E2. Khi đó n bi u di n bi u th c (E1) q (E2). Ta có th b d u ngo c
n u nh đi u đó là không c n thi t.
n1

• Ví d :
– Nút n2 ch a toán h ng + và con trái
và con ph i c a nó là a và b. Vì th
n2 bi u di n (a) + (b), hay a+b.

C U TRÚC D
NGUY N

n3

n2 +

n4

1/28/2013

*

a

LI U VÀ THU T TOÁN


C NGH A - B môn KHMT

n5 b

n6

a

-

n7

c
42


4.1.

nh ngh a và khái ni m

4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây

C U TRÚC D

1/28/2013


NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

43

4.1.5. ADT Cây
• Trong ch

ng này chúng ta tìm hi u cây v a nh là ki u d

li u tr u t

ng v a nh là ki u d li u. M t trong nh ng ng

d ng quan tr ng c a cây là nó đ
nhi u ki u d li u tr u t

c dùng đ thi t k và cài đ t

ng quan tr ng khác nh "Cây tìm

ki m nh phân", "T p h p",....
• C ng nh danh sách, đ i v i cây c ng có th xét r t nhi u
phép toán làm vi c v i nó. D

i đây ta ch k ra m t s phép


toán c b n.

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

44


4.1.5. ADT Cây
• parent(n, T). Hàm này tr l i cha c a nút n trong cây T. N u
n là g c (nó không có cha), tr l i . Theo ngh a này,  là nút
r ng ("null node") dùng đ báo hi u r ng chúng ta s d i kh i
cây.
• leftmost_child(n, T) tr l i con trái nh t c a nút n trong cây T,
và tr l i  n u n là lá (không có con).
• right_sibling(n, T) tr l i em bên ph i c a nút n trong cây T
(đ c đ nh ngh a nh là nút m có cùng cha là p gi ng nh n
sao cho m n m sát bên ph i c a n trong danh sách s p th t
các con c a p.
– Ví d , v i cây trong slide g n nh t:
• leftmost_child(n2) = n4;
• right_sibling(n4) = n5, và RIGHT_SIBLING (n5) = L.
1/28/2013


C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

45

4.1.5. ADT Cây
• label(n, T) tr l i nhãn c a nút n trong cây T. Tuy nhiên, ta
không đòi h i cây nào c ng có nhãn.
• createi(v, T1, T2, . . . , Ti) là h các hàm, m i hàm cho m t giá
tr c a i = 0, 1, 2, ... createi t o m t nút m i r v i nhãn v và
g n cho nó i con, v i các con là các g c c a cây T1, T2, ..., Ti,
theo th t t trái sang. Tr l i cây v i g c r. Chú ý, n u i = 0,
thì r v a là lá v a là g c.
• root(T) tr l i nút là g c c a cây T, ho c  n u T là cây r ng.
• makenull(T) bi n T thành cây r ng.

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

46



Bi u di n cây
• Có nhi u cách bi u di n cây. Ta gi i thi u qua v ba cách bi u
di n c b n:
– dùng m ng (Array Representation)
– danh sách các con (Lists of Children)
– dùng con trái và em ph i (The Leftmost-Child, RightSibling Representation)

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

47

Bi u di n cây dùng m ng
• Gi s T là cây v i các nút đ t tên là 1, 2, . . . , n. Cách đ n gi n đ
bi u di n T là h tr thao tác parent b i danh sách tuy n tính A
trong đó m i ph n t A[i] ch a con tr đ n cha c a nút i. Riêng g c
c a T có th phân bi t b i con tr r ng.
• Khi dùng m ng, ta đ t A[i] = j n u nút j là cha c a nút i, và A[i] = 0
n u nút i là g c.
• Cách bi u di n này d a trên c s là m i nút c a cây (ngo i tr g c)
đ u có duy nh t m t cha. V i cách bi u di n này cha c a m t nút có
th xác đ nh trong th i gian h ng s .

ng đi t m t nút đ n t
tiên c a chúng (k c đ n g c) có th xác đ nh d dàng:
n <- parent(n) <- parent(parent(n)) <- ...
• Ta c ng có th đ a thêm vào m ng L[i] đ h tr vi c ghi nh n nhãn
cho các nút, ho c bi n m i ph n t A[i] thành b n ghi g m hai
tr ng: bi n nguyên ghi nh n cha và nhãn.
1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

48


Bi u di n cây dùng m ng


Ví d

1

3

2

5


4

6

7

A


0

1

1

2

10

8

2

9

3

6


6

6

3

H n ch : Cách dùng con tr cha không thích h p cho các thao tác v i con. Cho nút
n, ta s m t nhi u th i gian đ xác đ nh các con c a n, ho c chi u cao c a n. H n
n a bi u di n b i con tr cha không cho ta th t c a các nút con. Vì th các phép
toán nh leftmost_child và right_sibling là không xác đ nh đ c. Do đó cách bi u
di n này ch dùng trong m t s tr ng h p nh t đ nh.
C U TRÚC D

1/28/2013

NGUY N

LI U VÀ THU T TOÁN

49

C NGH A - B môn KHMT

Danh sách các con (Lists of Children)
• Trong cách bi u di n này, v i m i nút c a cây ta c t gi m t
danh sách các con c a nó.
• Danh sách con có th bi u di n b i m t trong nh ng cách bi u
di n danh sách đã trình bày trong ch
• Tuy nhiên, đ ý r ng s l


ng tr

c.

ng con c a các nút là r t khác

nhau, nên danh sách móc n i th

ng là l a ch n thích h p

nh t.

1/28/2013

C U TRÚC D
NGUY N

LI U VÀ THU T TOÁN

C NGH A - B môn KHMT

50


×