c Lc
1 Cu trúc d liu 1
1.1 Cu trúc d liu là gì? 2
1.2 Cu trúc d liu c s 3
1.2.1 Kiu d liu c s 3
1.2.2 Kiu có cu trúc 4
1.2.3 Kiu d liu tru tng 7
1.3 Cu trúc d liu hng vn 8
1.3.1 Cu trúc danh sách 8
1.3.2 Ngn xp 10
1.3.3 Hàng i 11
1.3.4 Cu trúc cây 12
1.3.5 Bm 17
2 Thut toán 23
2.1 C s v thut toán 24
2.1.1 Thut toán là gì? 24
2.1.2 Thut toán và cu trúc d liu 26
2.2 Các thut toán 30
2.2.1 Thut toán duyt 30
2.2.2 Thut toán sp xp 34
2.2.3 Thut toán qui 49
2.2.4 X lí xâu kí t 51
2.2.5 X lí tp 55
2.2.6 V hình 63
2.2.7 th 67
2.2.8 Tính toán s 71
2.2.9 Thut toán i sánh 78
2.2.10 Thut toán xp x và xác sut 82
2.3 ánh giá thut toán 87
2.3.1 ánh giá theo phc tp tính toán 87
2.3.2 ánh giá theo tính hp l 88
2.3.3 ánh giá theo biu din 88
2.4 Cách thit k thut toán 89
3 Thit k trong 95
3.1 Thit k trong là gì? 96
3.1.1 Mc ích ca thit k trong và nhng m cn lu ý 96
3.1.2 Th tc thit k trong 97
3.2 Phân hoch và cu trúc chc nng 101
3.2.1 Các n v ca vic phân hoch và cu trúc chc nng 101
3.2.2 Các th tc phân hoch và cu trúc chc nng 103
3.2.3 Phng pháp thit k có cu trúc 109
3.3 Thit k d liu vt lí 112
3.3.1 Th tc thit k d liu vt lí 112
3.3.2 T chc d liu vt lí 117
3.4 Thit k vào ra chi tit 120
3.4.1 Thit k d liu vào chi tit 120
3.4.2 Thit k màn hình 123
2 Chng 1 Cu trúc d liu
3.4.3 Thit k d liu a ra chi tit 132
3.5 To ra và dùng li các b phn 136
3.5.1 Khái nim v to ra và dùng li các b phn 136
3.5.2 Dùng gói phn mm 136
3.6 To ra tài liu thit k trong 137
3.6.1 T chc tài liu thit k trong 137
3.6.2 Các m cn lu ý khi to ra tài liu thit k trong 139
3.6.3 Kim m thit k 140
4 Thit k chng trình 140
4.1 Mc ích và nhim v ca thit k chng trình 144
4.1.1 Mc ích ca thit k chng trình 144
4.1.2 Nhim v thit k chng trình 145
4.2 Thit k có cu trúc cho chng trình 148
4.2.1 Th tc thit k có cu trúc 148
4.2.2 Các k thut phân hoch mô un n hình 151
4.2.3 Tiêu chí cho vic phân hoch mô un 160
4.2.4 Phân hoch chng trình 171
4.3 To ra c t mô un và c t kim th 173
4.3.1 To ra c t mô un 173
4.3.2 To ra c t kim th 175
4.4 To ra tài liu thit k chng trình 177
4.4.1 To ra tài liu thit k chng trình và ni dung 177
4.4.2 Nhng m cn lu ý khi to ra tài liu thit k chng trình 179
4.4.3 Hp kim m thit k 179
5 Thc hin chng trình 183
5.1 Lp trình 184
5.1.1 Mô thc lp trình 184
5.1.2 Phong cách lp trình 185
5.1.3 Dùng b x lí ngôn ng 186
5.1.4 Môi trng lp trình 187
5.2 Kim th 189
5.2.1 Tng quan v kim th 189
5.2.2 Kim thn v 190
5.2.3 Kim th tích hp 190
5.2.4 Kim th h thng 195
5.2.5 Các kim th khác 197
5.2.6 K hoch và nhim v kim th 197
6 Cp nht vn hành và phát trin h thng 204
6.1 Thit k chng trình 205
6.1.1 Thit k chng trình hng i tng 205
1 u trúc d liu
c ích ca chng
Vic chn cu trúc d liu thích hp nht và th tc mô
d liu là mu cht to ra chng trình hiu qu,
hiu.
Chng này mô t các cu trúc d liu a dng bn cn
m c xem nh bc u tiên hc lp trình.
• Hiu cách phân loi các cu trúc d liu a dng
‚ Hiu các kiu d liu c s thông dng nht và
ng d liu
ƒ Hiu các c trng và c ch ca cu trúc d liu
ng vn c dùng gii quyt các bài toán
c bit, cng nh cách dùng cu trúc d liu c s
cho vic cài t chng trình
2 Chng 1 Cu trúc d liu
1.1 u trúc d liu là gì?
p các d liu cùng mt loi c máy tính x lí c gi là "kiu d liu." Trong giai n
thit k chng trình, cách thc d liu nên c biu din và lp trình trong máy tính phi
c xem xét cn thn, có th chn c kiu d liu thích hp nht. Mt kiu d liu
c biu din và lp trình c gi là "cu trúc d liu."
Hình 1-1-1 ch ra phân lp v các cu trúc d liu.
Hình 1-1-1 Phân lp v các cu trúc d liu
u trúc d liu c s có thc biu din trong hu ht tt c các ngôn ng lp trình. Cu
trúc d liu hng vn là cu trúc d liu có thc dùng mt cách có hiu qu gii
quyt nhng vn chuyên dng. Có mt s cu trúc d liu hng vn mà không th
c biu din trong ngôn ng lp trình. Trong trng hp ó, cu trúc d liu c sc
dùng.
u trúc
liu
u trúc d
liu hng
n
(To ra t
u trúc d
liu c s)
u trúc danh sách
Ngn xp
Hàng i
u trúc cây
m
Kiu d liu
s
Kiu con tr
Kiu n
Kiu nguyên
Kiu thc
Kiu kí t
Kiu logic
Kiu lit kê
Kiu b phn
Kiu có
u trúc
Kiu mng
Kiu bn ghi
u trúc d
liu c s
Kiu d liu
tru tng
1.2 Cu trúc d liu c s 3
1.2 u trúc d liu c s
1.2.1 Kiu d liu c s
Kiu d liu c s là tp các d liu riêng l và thng c dùng to ra chng trình. Nó
c phân loi thành các kiu n và con tr.
(1) Kiu n
Kiu n là kiu d liu c s nht. Khi dùng kiu n cho lp trình, kiu d liu thng
c khai báo theo qui tc cú pháp ca ngôn ng.
• Kiu nguyên
Kiu nguyên biu din cho s nguyên, và c biu din bên trong máy tính nh s nh
phân theo s du phy tnh, không có ch s có ngha sau du chm thp phân. Giá tr ti a
hay ti thiu ca kiu nguyên là n v ca d liu mà máy tính có th x lí vào mt lúc, và
nó c xác nh bi chiu dài t.
‚ Kiu s thc
Kiu s thc biu din cho s thc. Nó c dùng biu din cho s du phy tnh và du
phy ng.
ƒ Kiu kí t
Kiu kí t biu din cho ch cái, s và các kí hiu nh các kí t. Mt mã kí tc biu
din nh s nh phân trong máy tính.
„ Kiu logic
Kiu logic c dùng thc hin các phép toán logic nh các phép toán AND, OR và
NOT.
… Kiu lit kê
Kiu lit kê c nh ngha nh kiu d liu kê ra tt c các giá tr có th ca bin. Trong
trng hp kiu lit kê, có th k tên kiu s nguyên.
† Kiu b phn
Kiu b phn c dùng xác nh mt tp con các giá tr nguyên thu bng cách hn ch
các kiu d liu hin có. Kiu d liu có các gii hn trên và di nh các ràng buc c
i là kiu min b phn.
(2) Kiu con tr
Kiu con tr có a chc cp trong n v b nh chính. Nó c dùng tham chiu ti
các bin, các bn ghi tp hay các hàm. Nó c dùng cho Pascal và C nhng không dùng cho
FORTRAN và COBOL.
4 Chng 1 Cu trúc d liu
Hình 1-2-1 Hình nh v kiu con tr
1.2.2 Kiu có cu trúc
u trúc d liu có cha mt cu trúc d liu c s hay bt kì kiu d liu c xác nh nào
nh phn t ca nó (d liu), c gi là kiu có cu trúc. Kiu có cu trúc c phân loi
thành kiu mng và kiu bn ghi.
(1) Kiu mng
ng c gi là bng. Kiu mng là d liu có cu trúc có cha d liu thuc cùng kiu và
kích c. Tng d liu cá nhân c gi là mt phn t mng, phn t bng hay phn t. Cách
ng c mô t hoc cách d liu c b trí có thay i tu theo ngôn ng lp trình c
dùng.
• Mng mt chiu
ng mt chiu có cu trúc d liu mà d liu c sp thành mng theo mt hàng. xác
nh mt phn t trong mng này, trc ht a vào du ngoc tròn m ( hay du ngoc
vuông [ sau tên ca mng, ri a vào ch s và du ngoc tròn óng ) hay du ngoc vuông
óng ]. Ch s ch ra s th t tính tnh ca mng, ni phn t xác nh ó c nh v.
ng "A" có s phn tc kí hiu là "i" c biu din là A (i).
Hình 1-2-2 Mng mt chiu
Th 1 th 2 th 3
…
th I
…
Phn t Phn t Phn t
…
Phn t
…
A(1) A(2) A(3)
…
A(I)
…
‚ Mng hai chiu
t cu trúc d liu trong ó d liu c sp hàng theo c hai chiu ngang và ng c
i là mng hai chiu. D liu theo chiu ng c gi là ct và d liu theo chiu ngang
c gi là hàng. xác nh phn t nào ó trong mng này, hai ch s tr nên cn thit:
t ch s th t theo chiu ng (trên hàng nào) ni phn t xác nh ó c nh v và
ch s kia ch ra s th t nào theo chiu ngang (trong ct nào) mà nó c nh v. Chng
n, mng "A" c nh v hàng "i" và ct "j" có thc din t là A (i, j).
a ch ca bin "b" liu
Bin kiu con tr
Bin "b"
1.2 Cu trúc d liu c s 5
Hình 1-2-3 Mng hai chiu (vi ba hàng và hai ct)
t 1
Hàng 1 A(1, 1) A(1, 2)
A(2, 1) A(2, 2)
A(3, 1) A(3, 2)
Khi mng hai chiu c lu gi trong n v b nh chính, nó ly dng ca mng mt chiu.
ng hai chiu c v trong Hình 1-2-3 ly dng ca mng mt chiu có sáu phn t. Nh
c v trong Hình 1-2-4, d liu c lu gi theo kiu tun t hoc theo chiu ca hàng
hoc theo chiu ca ct. Chiu theo ó d liu c lu gi thay i tùy theo trình biên dch
a ngôn ng lp trình c dùng. Nói chung, d liu c lu gi theo chiu ng khi
Fortran c dùng và theo chiu ngang khi COBOL c dùng.
Hình 1-2-4 Cách d liu ca mng hai chiu c lu gi trong n v b nh chính
A(1,1) A(1,2)
A(2,1) A(2,2)
A(3,1) A(3,2)
ƒ Mng ba chiu
ng ba chiu có cu trúc d liu nhiu hn mng hai chiu. Nó có cu trúc ba chiu cha các
t phng, các hàng và ct cng nh các phn t. Bng vic xây dng mng ba chiu trong
ng hai chiu, có th x lí mng ba chiu theo cùng cách nh mng hai chiu.
ng 2 chiu
nh chính
A(1,1)
A(1,2)
A(2,1)
A(2,2)
A(3,1)
A(3,2)
A(1,1)
A(2,1)
A(3,1)
A(1,2)
A(2,2)
A(3,2)
liu c D liu c
u tr lu tr
theo hàng theo ct
6 Chng 1 Cu trúc d liu
Hình 1-2-5 Xây dng mng ba chiu thành mng hai chiu
ng nhiu chiu nh các mng bn, nm hay nhiu chiu cng có thc nh ngha.
Tuy nhiên, có th có nhng gii hn nào ó v s chiu, tùy theo kiu ca ngôn ng lp trình
hay trình biên dch.
ng có thc phân loi thành mng tnh và mng ng theo phng pháp c dùng
sit cht mt min.
- Mng tnh: Mng mà vùng c yêu cu do chng trình xác nh
- Mng ng: Mng mà vùng c yêu cu sc xác nh ra sau khi ch sc
dùng cho vic to mng c cung cp qua mt biu thc và biu
thc ó c tính trong khi thc hin chng trình
(2) Kiu bn ghi
c du d liu kiu có cu trúc là cao cp hn trong vic d tham chiu và thc hin thao tác
trên các phn t, nó cng có nhc m ch nó ch có th gii quyt d liu thuc cùng mt
kiu. Do ó, d liu có cha các d liu vi kiu khác nhau phi ly dng ca d liu kiu bn
ghi. Kiu bn ghi này cng còn c gi là kiu cu trúc.
Hình 1-2-6 Kiu bn ghi
Hình 1-2-6 ch ra cu trúc d liu ca kiu bn ghi. Mt bn ghi cha s hiu sinh viên (kiu
nguyên), tên (kiu kí t) và m (kiu nguyên). Mt d liu kiu bn ghi cha mt tp các
n ghi có cùng nh dng này. Mc du d liu kiu bn ghi mt chiu có thc gii quyt
A(1,1,1) A(1,1,2)
A(1,2,1) A(2,2,2)
A(1,3,1) A(1,3,2)
A(1,1,1) A(1,1,2)
A(1,2,1) A(1,2,2)
A(1,3,1) A(1,3,2)
A(2,1,1) A(2,1,2)
A(2,1,1) A(2,1,2)
A(2,2,1) A(2,2,2)
A(2,3,1) A(2,3,2)
t
t phng
Hàng
t phng
th hai
t phng
th nht
Tên m S Tên m
sinh viên sinh viên
n ghi (d liu v sinh viên)
Kiu nguyên
Kiu kí t
(kiu xâu chui)
Kiu sp xp
1.2 Cu trúc d liu c s 7
theo cùng cách nh mng mt chiu, tng d liu vn phi c t tên nhn din vì tng
phn t cha nhiu d liu.
1.2.3 Kiu d liu tru tng
liu cha cu trúc d liu nào ó và kiu ca các phép toán c gi là kiu d liu tru
ng. truy nhp vào kiu d liu này, bn không cn bit v cu trúc bên trong ca nó. Tt
các d liu u c che du ngoi tr d liu bn truy nhp tham chiu, thêm vào hay
xoá i. u này c gi là che giu thông tin. Che giu thông tin hoc che giu d liu
c kiu d liu c gi là bao bc d liu.
Hình 1-2-7 Kiu d liu tru tng
(Các phép toán +
u trúc d liu)
Chng trình
t qu
liu <Cu trúc d liu tru tng>
8 Chng 1 Cu trúc d liu
1.3 u trúc d liu hng vn
Các cu trúc d liu hng vn khác nhau có thc trù tính bng vic dùng các kiu
ng, kiu con tr và các cu trúc d liu c s khác.
1.3.1 u trúc danh sách
Không ging kiu d liu c s gii quyt cho tng d liu riêng l, cu trúc danh sách cho
phép d liu c móc ni ln nhau và gii quyt c mt cc. D liu c b trí theo cu trúc
danh sách này c gi là mt danh sách.
(1) Cu trúc danh sách và các ô
ng vic dùng ch s cho tng phn t trong mng, có th truy nhp nhanh chóng vào bt kì
phn t nào. Tng t nh vy, vic thay i d liu có thc thc hin d dàng. Nu bn
chèn mt d liu vào âu ó trong mng, bn phi dch chuyn toàn b tng d liu sau ó lùi
i mt v trí. Nu bn xoá mt d liu trong mng, tng t, bn phi dch chuyn toàn b
ng d liu sau d liu b xoá ó nhích lên mt v trí.
Hình 1-3-1 Chèn thêm mt phn t mng
Không ging nh cu trúc kiu mng, cu trúc danh sách cho phép phn t d liu ca cùng
kiu c sp hàng tun t. Kim mng òi hi rng vic b trí logic cho các phn t là ging
t nh vic b trí vt lí ca chúng trong b nh chính. Trong trng hp ca cu trúc danh
sách, vic b trí logic không sánh ht nh vic b trí vt lí.
Danh sách cha các ô và mi ô bao gm nhng phn t sau:
- Phn d liu cha phn t d liu
- Phn con tr cha a ch
Do ó, phn d liu ca ô có cùng cu trúc d liu nh cu trúc d liu ca d liu c lu
gi và phn con tr ca ô có cu trúc d liu kiu con tr. u này ngha là các ô biu din
cho d liu (cu trúc) kiu bn ghi cha các phn t có cu trúc d liu khác nhau. Danh sách
cha a ch ô trong phn con tr và ô này c móc ni sang ô kia qua con tr.
Arai Ueki Endou Okada
trí mng c chèn
Trc khi chèn
Sau khi chèn
Arai Inoue Ueki Endou Okada
i d liu c dch v phía sau
Inoue
u t
c chèn
1.3 Cu trúc d liu hng vn 9
Hình 1-3-2 Cu trúc danh sách
(2) Chèn d liu vào danh sách
chèn d liu vào danh sách, mi u bn cn làm là thay th các con tr ti d liu i
trc và i sau d liu c chèn vào ó. Bi vì bn không phi dch chuyn các phn t nh
trng hp d liu kiu mng, nên bn có th chèn thêm d liu mt cách d dàng và nhanh
chóng. (Xem Hình 1-3-3.)
Hình 1-3-3 Chèn d liu vào danh sách
(3) Xoá d liu khi danh sách
xoá d liu khi danh sách, mi u bn cn phi làm là thay th các con tr nh khi bn
chèn d liu vào danh sách. Ô cha d liu (Inoue) vn còn trong vùng b nh nh rác sau khi
liu ã b xoá, nhc v trong Hình 1-3-4.
Hình 1-3-4 Xoá d liu khi danh sách
c du cu trúc danh sách cho phép d liu c chèn thêm hay c xoá i ch bng cách
thay th các con tr, nó có nhc m là bn phi ln theo tng con tr mt tu nu bn
mun truy nhp vào d liu c bit.
(4) Kiu cu trúc danh sách
Các cu trúc danh sách tiêu biu bao gm:
- Danh sách mt chiu
- Danh sách hai chiu
- Danh sách vòng.
i vì nhng danh sách này c biu din di dng tuyn thng, nên nói chung chúng c
i là danh sách tuyn tính.
• Danh sách mt chiu
Danh sách mt chiu cng còn c gi là danh sách mt hng. Phn con tr ca ô cha
Phn d liu Phn con tr Phn d liu Phn con tr
InoueArai
Ueki
Phn d liu Phn con tr
Arai
Arai
Inoue
Ueki Endou
Endou Ueki
Ô c chèn
i d liu c chèn
Trc khi chèn
Sau khi chèn
Phn d liu Phn con tr
Inoue Endou Ueki Arai
Inoue Arai
Ueki Endou
Ô b xóa
Sau khi
xóa
Trc
khi xóa
10 Chng 1 Cu trúc d liu
a ch ca ô mà trong ó d liu tip c lu gi. Bng vic ln theo nhng a ch này
ng ô mt, bn có th thc hin vic duyt d liu.
Hình 1-3-5 Danh sách mt chiu
Con tr th nht c gi là gc hay u. Bi vì phn con tr ca ô cui không có bt kì a
ch nào trong ó d liu có thc lu gi, nên NULL (giá tr s là không) hay 0 c
chèn thêm vào phn này.
‚ Danh sách hai chiu
Danh sách hai chiu có hai phn con tr ( và ) cha a ch các ô nhc v trong
Hình 1-3-6.
Hình 1-3-6 Danh sách hai chiu
Phn con tr và uc v trong Hình 1-3-6 cha a ch ca ô k tip và a ch ca ô
ng trc tng ng. a ch ca ô cui cùng c cha trong con truôi. Trong trng
p danh sách hai chiu, d liu có thc ln theo t ô u hoc uôi.
ƒ Danh sách vòng
Danh sách hai chiu cha NULL ô u tiên c gi là danh sách vòng. Phn con tr ca
ô th nht này và phn con tr cha NULL ca ô cui cùng cha a ch ô khác, do vy d
liu có dng cái vòng. D liu có thc duyt theo cùng cách nh trong danh sách hai
chiu.
Hình 1-3-7 Danh sách vòng
1.3.2 Ngn xp
Ngn xp là cu trúc d liu c thit k da trên mng mt chiu. Phn t cui cùng c
u gi sc c ra trc ht. Nó c so sánh vi trò chi ném vòng.
Arai Inoue Wada NULL
u
Ô
Arai Inoue Wada
NULL
NULL
uôi
u
Arai Inoue Wada
u
trí uôi
trí u
1.3 Cu trúc d liu hng vn 11
Hình 1-3-8 Trò chi ném vòng
Trò chi ném vòng c chi bng cách ném các vòng mu theo th t, lc, vàng và lam
a vào d liu). Chúng c ly ra tng cái mt (a ra d liu) theo th to li vic ném
vào, tc là lam, vàng, lc và . Tc là vòng lam c ném vào cui cùng sc ly ra u
tiên.
Kiu cu trúc d liu này mà có thc so sánh vi trò chi ném vòng c gi là ngn xp.
thng này còn có thut ng là h thng vào-sau-ra-trc (LIFO). Vic lu tr d liu trong
ngn xp c gi là "n vào (PUSH)" và vic ly d liu ra t ngn xp c gi là "bt ra
(POP)." Bin u khin vic n vào và bt ra c gi là con tr ngn xp.
n d liu vào ngn xp, t con tr ngn xp "sp" là +1 và lu gi d liu trong phn t
ng c vit là "sp." làm bt ra d liu t ngn xp, hãy ly d liu ã c lu gi
trong mng c ch bi "sp" và t con tr ngn xp là sp-1.
Hình 1-3-9 Cu trúc ngn xp
1.3.3 Hàng i
Hàng i là cu trúc d liu da trên mng mt chiu. D liu c lu giu tiên c c
ra u tiên. Nó c so sánh vi hàng ngi ang i trc máy tr tin ca ngân hàng.
Hình 1-3-10 Hàng i
u trúc d liu cho phép khách hàng c phc v trên c sn trc phc v trc c
i là hàng i. H thng này c gi là h thng (FIFO). Hai con tr ch ra u và uôi ca
hàng i là cn cho vic kim soát hàng i. Con tr ch ra u và uôi ca hàng i c
liu D
liu C
liu B
liu A
Ngn xp (4)
Ngn xp (3)
Ngn xp (2)
Ngn xp (1)
liu ly ra liu nhp vào
4
Con tr ngn xp sp
ra
POP PUSH
sp - 1 sp + 1
12 Chng 1 Cu trúc d liu
biu din nh bin u và bin uôi tng ng. (Xem Hình 1-3-11.)
Hình 1-3-11 Cu trúc hàng i
<Th tc vn hành hàng i>
1. lu gi d liu vào hàng i (enqueue), t bin truôi tng thêm 1 và ct gi d
liu.
2. ly ra d liu t hàng i (dequeue), ly d liu ra và t bin tru tng lên 1.
1.3.4 u trúc cây
u trúc cây là mt trong nhng cu trúc d liu rt hu dng vì nó có th kim soát d liu
phc tp tt hn các cu trúc d liu kiu mng hay danh sách.
i vì nó có cu trúc phân cp nh t chc ca công ti hay cây gia ình, nên nó thích hp cho
kiu làm vic bao gm phân loi tng bc.
Hình 1-3-12 S t chc
c du tng ô c sp theo th t tuyn tính trong cu trúc danh sách, d liu c sp
trong khi nó phân nhánh trong cu trúc cây.
u trúc cây bao gm các phn tc v di ây:
- Nút: Tng ng vi d liu
- Nhánh: Ni nút này vi nút khác
- Gc: Nút cp cao nht, không có cha m
- Con: Nút r nhánh ra di mt nút khác
- Cha m: D liu gc trc khi nó chia nhánh
- Lá: Nút cp thp nht không có con
Hình 1-3-13 v ra cu trúc cây
Hình 1-3-13 Cu trúc cây
liu A D liu B D liu C D liu D
(1) (2) (3) (4) (5) (6)
p xp
Hàng i
Con tru Con tr cui
ng thng
Qun lý
hành chính
Qun lý
nhà máy
Qun lý
bán hàng
Qun lý b phn
hành chính
Qun lý b phn
toán
Qun lý b phn
bán hàng th 1
Qun lý b phn
bán hàng th 2
Qun lý b phn k
hoch và bán hàng
Qun lý b phn
qun lý cht lng
Qun lý b phn
n phm
Qun lý b phn
Mua bán
A
B C
D E
G
F
H
Lá
Nhánh
Nút
c
. A là cha nút C
. Nút D và E là con nút C.
1.3 Cu trúc d liu hng vn 13
(1) Cây nh phân
u s nhánh ch ra t mt nút là "n" hay ít hn, tc là nu s con là 0 cho ti "n", mt cu
trúc cây nh vy c gi là cây N ngôi. Cây N-ngôi có 2 nhánh (n=2), tc là cây N ngôi
không có con, có mt hay hai con, c gi là cây nh phân, thng là cu trúc d liu thng
dùng nht. Mt khác, cu trúc cây có ba hay nhiu nhánh (n>2) c gi là cây nhiu nhánh.
Cây nh phân bao gm mt phn d liu và hai phn con tr. Con tr trái ch ra v trí ca nút
kéo dài sang bên trái và các nhánh ch ra trong khi phn con tr phi ch ra v trí ca nút kéo
dài sang bên phi và các nhánh ch ra.
Hình 1-3-14 Cu trúc cây nh phân
Phn con tr trái Phn d liu Phn con tr phi
Cây nh phân có cu trúc phân cp cha m - con, nhc v trong Hình 1-3-15.
Hình 1-3-15 Cu trúc cây nh phân c s
<Cách thc hin vic duyt d liu cây nh phân>
duyt d liu c bit trong d liu cây nh phân, phi ln theo tng nút mt. Có ba
phng pháp thc hin duyt d liu cây nh phân. Vì khó gii thích bng li nên hãy kim li
Hình 1-3-16 và xem cách d liu c duyt bng vic dùng tng phng pháp.
Hình 1-3-16 Cách thc hin duyt d liu cây nh phân
- Th t gc trc (Pre-order): Vi gc là m bt u, nút bên trái ca mi nút c
duyt qua theo cách tun t.
- Th t gc gia (Mid-order): Vi lá ti áy bên trái làm m bt u, ri duyt qua nút
cha nó và tip ó duyt qua phn còn li ca nút ó theo cách tun t.
- Th t gc sau (Post order): Vi lá ti áy bên trái làm m bt u, phn bên phi mi
nút c duyt qua theo cách tun t ri mi n nút cha ca nó.
(2) Cây nh phân hoàn chnh
u cây nh phân c xây dng theo cách s các nhánh t gc ti tng lá dc theo mt
nhánh là bng hoc sai khác mt so vi s các nhánh t gc ti tng lá dc theo nhánh khác
(hoc nu chiu cao t gc ti tng lá là bng hay sai khác mt vi chiu cao t gc ti tng
lá thuc vào nhánh khác), thì cây ó c gi là cây nh phân hoàn chnh. Hình 1-3-17 v ra
cây nh phân hoàn chnh có mi nút.
Cha
Con
Con
14 Chng 1 Cu trúc d liu
Hình 1-3-17 Cây nh phân hoàn chnh
(3) Cây tìm kim nh phân
Cây tìm kim nh phân c dùng nh mt bin th ca cây nh phân. Trong trng hp ca
cây tìm kim nh phân, con cháu bên trái là nh hn cha m và con cháu bên phi là ln hn
cha m.
Thut toán cây tìm kim nh phân là nh sau:
1. Gc là m vic tìm kim bt u.
2. D liu cây nh phân c so sánh vi d liu cn tìm.
3. Nu d liu cây nh phân = d liu cn tìm, vic tìm là thành công (c hoàn tt).
4. Nu d liu cây nh phân > d liu cn tìm, thì các nút bên trái ca cây nh phân c tìm
và so sánh.
5. Nu d liu cây nh phân < d liu cn tìm, thì các nút bên phi ca cây nh phân c
tìm và so sánh.
6. Nu không tìm thy con nào, vic tìm kim là không thành công (không tìm thy d liu).
Hình 1-3-18 Thc hin vic tìm kim v d liu trong cây tìm kim nh phân
(4) Cây cân bng
u d liu c thêm vào hay b xoá i trong cu trúc cây, thì các lá ngu nhiên phát trin và
tính hiu qu ca phép toán s gim i. Cu trúc cây có kh nng t t chc li chính nó c
i là cây cân bng. Cây cân bng i din là B-cây và ng (heap).
• B-cây
B-cây là phiên bn c phát trin thêm na ca cây nh phân:
- Lá cui b bi và mi nút u có s các nút c xác nh là "m."
- Mi nút u có s ti a d liu c xác nh là "m-1."
- Tt c các lá u trên cùng mt mc.
- D liu c cha trong tng nút c b trí trong hàng i.
i vì nhng c trng trên có th làm tng b nh và tính hiu qu tính toán, nên tên
"B-cây" ngha là cây cân bng tt.
1
3
2 7
6 8 10
954
1
2 7
3 6 8 10
4 5 9
<Cây nh phân hoàn chnh> <Cu trúc d liu>
15
2
8 21
10 28
13
1) 15>10
2) 8<10
3) 10=10
1.3 Cu trúc d liu hng vn 15
a. c trng ca B-cây
- tng vic s dng vùng b nh, s con tr mà mi nút có c t là m/2 hoc
nhiu hn và là m hoc ít hn. S con tr theo mt ng tuy vy c t là 2 hoc
nhiu hn.
- Mi lúc d liu b xoá hay c b sung thêm, vic ch ra và ghép li c thc hin
ng cho s các phn t ca mt nút có th tr thành m/2 hay nhiu hn hoc m
hay ít hn. u này cho phép lá bao gi cng c duy trì trên cùng mc.
- Vic tìm kim bt u t gc.
- Vic thêm vào hay xoá i d liu bt u t lá.
Hình 1-3-19 ch ra B-cây b nm vi các phn t7, 6, 10, 2, 5, 12, 4, 9, 8, 11, 1, 3.
Hình 1-3-19 B-cây b nm
b. Xoá d liu
Hình 1-3-20 v ra trng hp d liu "4" b xoá khi B-cây c v trong Hình 1-3-19.
u mt mình "4" b xoá i, thì s các phn t b xoá ca mt nút tr thành mt và các
yêu cu ca B-cây không thc áp ng.
Hình 1-3-20 B-cây sai
Nút tó "4" b xoá i c gp vào mt nút k hoc bên phi hoc bên trái. Bi vì
các con tr ca cha m cng phi c t chc li, nên "6" c chuyn sang nút cp thp
n và tng nút có thc t chc li, nhc v trong Hình 1-3-21.
Hình 1-3-21 B-cây úng
‚ng
Cây nh phân hoàn chnh có mi quan h kích c nào ó gia nút cha m và nút con c
i là ng (heap). ng khác vi cây nh phân chng không có mi quan h kích
thc nào ó gia các anh em.
3 6 9
7 8
10 11 12
4 5
1 2
3 6 9
7 8
10 11 12
5
1 2
3 9
1 2
5 6 7 8
10 11 12
16 Chng 1 Cu trúc d liu
Hình 1-3-22 Ví d vng
i vì ng có cu trúc ca cây nh phân hoàn chnh, nên nó là mt loi cây cân bng, t
chc c. Trong trng hp ca ng, giá tr ti a (hay giá tr ti thiu) ca tt c các d
liu c ghi li trong gc. Bng vic dùng c trng này, d liu có thc sp xp bng
vic ly ra d liu ti gc theo cách tun t.
Hình 1-3-23 Sp xp d liu dùng ng
9
87
6
53
41
9
87
3
56
41
ng ây không phi là ng
i quan h v kích c
trong hình ch nht chm
là khác nhau
6
4 5
1
3 2
6
5
4 2
1
3
5
3
1 2
3
1 2
4
4
3 2
1
4
3
1.3 Cu trúc d liu hng vn 17
1.3.5 m
m là cách dùng mt cu trúc d liu kiu mng. Vi vic dùng bm, bn có th truy nhp
trc tip vào d liu c bit bng vic dùng mt khoá mà không phi truy nhp ln lt vào
liu c ghi.
(1) Chuyn i sang a ch bm
chuyn mt khoá sang a ch bm (ch s), ngi ta dùng mt hàm bm. Hàm bm tiêu
biu là:
- Phng pháp chia
- Phng pháp ng kí
- Phng pháp i c s.
• Phng pháp chia
Khoá c chia theo mt giá tr nào ó (mt s nguyên t gn nht vi s phn t mng
thng c dùng) và s dc dùng làm a ch (ch s) ca khoá.
Ví d Khoá: 1234 và s phn t mng : 100
1234÷97 (s nguyên t gn 100 nht) = 12 70 : a ch (ch s)
‚ Phng pháp ng kí
Khoá c phân tách theo mt qui tc nào ó và tng c dùng làm a ch (ch s) ca
khoá.
Ví d Khoá: 1234
1234 c phân tách thành 12 và 34 và c hai s này c ly tng.
12 + 34 = 46 : a ch (ch s)
ƒ Phng pháp chuyn c s
Khoá thng c biu din theo s h thp phân, Khoá này c chuyn thành c s khác
i thp phân (chng hn c s ba), và kt quc dùng làm a ch (ch s) ca khoá.
Ví d Khoá bn ghi: 1234
1 × 3
3
+ 2 × 3
2
+ 3 × 3
1
+ 4 × 3
0
= 27 + 18 + 9 + 4
= 58 : a ch (ch s)
∗ Giá tr ca tng ch s theo h c s 3 là 3 hay nh hn. Tuy nhiên trong trng hp
này s kin này không cn c tính ti.
(2) ng ngha
Khi mt khoá c chuyn thành a ch bng vic dùng hàm bm, các khoá khác nhau có th
c chuyn vào cùng mt a ch. u này c gi là ng ngha (hay ng ) (xem Hình
1-3-24). Mt bn ghi có th dùng a chã chuyn i c gi là bn ghi nhà còn bn ghi
không th dùng c nó sc gi là bn ghi ng ngha.
18 Chng 1 Cu trúc d liu
Hình 1-3-24 Xut hin ng ngha
gii quyt sng ngha, mt phng pháp c bit hay phng pháp dây chuyn c
dùng:
• Phng pháp tun t
ng vic dùng phng pháp tun t, bn ghi ng ngha c lu gi trong không gian t
do c nh v gn a ch mong mun. Có kh nng là sng ngha li có th xut hin
theo phn ng dây chuyn.
‚ Phng pháp dây chuyn
i vic dùng phng pháp dây chuyn, mt vùng b nh tách bit c thit lp và các
n ghi ng ngha c lu gi trong vùng này. Trong trng hp này, cn cung cp mt
con tr ch ra a ch ni các bn ghi ng ngha c ct gi.
n ghi có thc s
ng vi khóa 234
(Bn ghi nhà)
39
40
41
u khóa c chuyn thành 97 s dng phép chia
Khóa bn ghi: 234
234 ÷ 97 = 240
Khóa bn ghi: 525 X
525 ÷ 97 = 540 ng ngha
Bài tp 19
Bài tp
Q1 Khi lu gi mng hai chiu "a" có mi hàng và mi ct trong không gian b
nh liên tc theo hàng, a ch ni lu gi [5, 6] là gì? Trong câu hi này, a ch
c biu din theo s thp phân.
a. 145 b. 185 c. 190 d. 208 e. 212
Q2 Hình di ây là danh sách mt chiu. Tokyo ng u trong danh sách này và
con tr cha a ch ca d liu c nêu di ây. Nagoya ng cui ca danh
sách và con tr cha 0. Hãy chn mt cách úng a thêm Shizuoka vào a ch
150 gia Atami và Hamamatsu.
Con tru a ch liu Con tr
10 10 Tokyo 50
30 Nagoya 0
50 Shin Yokohama 90
70 Hamamatsu 30
90 Atami 70
150 Shizuoka
a. Con tr cho Shizuoka c t là 50 và con tr cho Hamamatsu c t là 150
b. Con tr cho Shizuoka c t là 70 và con tr cho Atami c t là 150
c. Con tr cho Shizuoka c t là 90 và con tr cho Hamamatsu c t là 150
d. Con tr cho Shizuoka c t là 150 và con tr cho Atami c t là 90
Q3 Cu trúc d liu thích hp cho thao tác FIFO (vào trc ra trc) là gì?
a. Cây nh phân b. Hàng i c. Ngn xp d. ng
Q4 Hai thao tác ngn xp c nh ngha nh sau:
PUSH n: D liu (nguyên "n") c y vào ngn xp.
POP: D liu c bt ra khi ngn xp.
u thao tác ngn xp c thc hin trên ngn xp rng theo th tc c nêu di ây, thì
có th thu c kt qu gì?
PUSH 1 → PUSH 5 → POP → PUSH 7 → PUSH 6 → PUSH 4 →POP → POP → PUSH 3
a b C d e
1 3 3 3 6
7 4 4 7 4
3 5 6 1 3
a ch
100
101
102
103
a [1, 1]
a [1, 1]
20 Chng 1 Cu trúc d liu
Q5 Hình 2 là biu din mng cho cây nh phân c v trong Hình 1. Giá tr nào nên
c t vào ch "a"?
Ch s Giá tr
Con tr 1 Con tr 2
1 200 3 2
2 220 0 0
3 180 5
a
4 190 0 0
5 150 6 0
6 130 0 0
Hình 1 Cây nh phân
Hình 2
Biu din mng cho cây nh phân
a. 2 b. 3 c. 4 d. 5
Q6 Khi phn t 12 b xoá khi cây tìm kim nh phân c v di ây, phn t nào
nên c chuyn ti m phn tã b xoá t chc li cây tìm kim nh phân?
a. 9 b. 10 c. 13 d. 14
Q7 Nu hai hay ít hn hai nhánh ch ra t tng nút ca mt cây, thì cây nh vy c
i là cây nh phân. Cây nh phân bao gm mt nút, mt cây trái và mt cây phi.
Có ba phng pháp thc hin tìm kim trên cây này:
(1) Th t gc trc: Vic tìm kim c thc hin theo th t ca nút, cây trái ri n cây
phi.
(2) Th t gc gia: Vic tìm kim c thc hin theo th t ca cây trái, nút và cây phi.
(3) Th t gc sau: Vic tìm kim c thc hin theo th t cây trái, cây phi và nút.
u vic tìm kim c thc hin bng vic dùng phng pháp th t gc sau, thì kt qu
nào trong các kt qu sau có th là cái ra xem nh giá tr ca nút?
a. abchidefjgk b. abechidfjgk c. hcibdajfegk d. hicdbjfkgea
b e
f gc d
ih j k
a
9
4 8
7
12
2 5
31
10
14
6
11
13
15
200
220
180
150
190
130
Bài tp 21
Q8 Cây nh phân c v di ây có thc biu din bng vic dùng biu thc s
c. Biu thc nào là úng?
a. A + B × C + (D + E) ÷ F b. A + B × C - (D + E) ÷ F
c. A + B × C - D + E ÷ F d. A× B + C + (D - E) ÷ F
e. A × B + C - D + E ÷ F
Q9 Xét ti vic lu gi d liu bng cách dùng B-cây, hãy chn câu chú thích úng t
nhng câu sau:
a. Chia ra và gp li các nút cho phép chiu sâu phân cp tr thành nh nhau.
b. Nhn din v trí ni d liu c lu gi bng vic dùng mt hàm nào ó và giá tr khoá.
c. Ch có th truy nhp tun t ti d liu u và d liu tip ó.
d. Có danh mc và mt thành viên. Thành viên là tp c t chc tun t.
Q10 Có mt ng vi giá tr ca nút cha m nh hn giá tr ca nút con. chèn thêm
liu vào trong ng này, bn có th thêm mt phn t vào phn sau nht và lp
i vic trao i cha m vi con cái khi phn t này nh hn cha m. Khi phn t 7
c thêm vào v trí * ca ng tip, phn t nào s vào v trí A?
a. 7 b. 9 c. 11 d. 24 e. 25
Q11 Mt s có nm ch s (a
1
a
2
a
3
a
4
a
5
) phi c lu gi trong mt mng bng vic
dùng phng pháp bm. Nu hàm bm c xác nh nh mod (a
1
+a
2
+a
3
+a
4
+a
5
,
13) và nu s có nm ch sc lu gi trong mt phn t mng v trí sánh vi
giá tr bm ã c tính, thì ti v trí ó 54321 sc t vào âu trong mng
c v di ây? ây, giá tr mod (x, 13) là phn d khi ly x chia cho 13.
trí Mng
0
1
2
⋅⋅⋅
11
12
9
11 14
28
19
29 34
24
25
*
A
-
+
÷
F
+
XA
CB D
E
22 Chng 1 Cu trúc d liu
a. 1 b. 2 c. 7 d. 11
Q12 Nm d liu vi các giá tr khoá c phân bu và ngu nhiên trong phm vi t
1 ti 1,000,000 phi c ng kí vào bng bm kích c 10. Xác sut xp x cho
ng xy ra là gì? ây, phn d thu c khi mt giá tr khoá c chia theo
kích c ca bng bm c dùng nh giá tr bm.
a. 0.2 b. 0.5 c. 0.7 d. 0.9
2 Thut toán
c ích ca chng
Các c s ca vic lp trình là thit k thut toán.
Trong thit k cu trúc logic ca chng trình, u
quan trng là dùng thut toán thích hp nht. Tng t
nh vy, trong vic chn chng trình t th vin,
thut toán nào c dùng là mt trong nhng tiêu
chun quan trng nht chn chng trình thích hp
nht.
Chng này mô t cho các c s ca thit k thut toán
và các thut toán tiêu biu.
• Hiu các c s ca thut toán, nhnh ngha thut
toán, thit k, mi quan h vi cu trúc d liu,
phng pháp biu din v.v
‚ Hiu c trng và ý ngha ca các thut toán tìm
kim, sp xp, x lí kí t và x lí tp tiêu biu.