You are on page 1of 159

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng

Su Tm Bi : daihoc.com.vn 2
Li ni u




Sch ny trnh by cc cu trc d liu (CTDL) v thut ton. Cc kin thc
v CTDL v thut ton ng vai tr quan trng trong vic o to c nhn tin hc.
Sch ny c hnh thnh trn c s cc bi ging v CTDL v thut ton m ti
c nhiu nm ti khoa Ton-C-Tin hc v khoa Cng ngh thng tin i hc
khoa hc t nhin, i hc quc gia H ni. Sch c vit ch yu lm ti liu
tham kho cho sinh vin cc Khoa Cng ngh thng tin, nhng n cng rt b ch
cho cc c gi khc cn c hiu bit y hn v CTDL v thut ton.
Chng ti m t cc CTDL v cc thut ton trong ngn ng Pascal, v
Pascal l ngn ng c nhiu ngi bit n v l ngn ng c s dng nhiu
trnh by thut ton trong sch bo.
Sch ny gm hai phn. Phn 1 ni v cc CTDL, phn 2 ni v thut ton.
Ni dung ca phn 1 gm cc chng sau y. Chng 1 trnh by cc khi nim
c bn v thut ton v phn tch thut ton. Chng 2 trnh by cc khi nim
CTDL, m hnh d liu, kiu d liu tru tng (DLTT). Chng 3 trnh by cc
m hnh d liu, danh sch v cc phng php ci t danh sch (bi mng v bi
CTDL danh sch lin kt). Hai kiu DLTT c bit quan trng l hng v ngn xp
(stack) cng c xt trong chng ny. Chng ny cng trnh by mt s ng
dng ca danh sch, hng, ngn xp trong thit k thut ton. Chng 4 trnh by
m hnh d liu cy, cc phng php ci t cy, cy nh phn, cy tm kim nh
phn v cy cn bng. Chng 5 ni v m hnh d liu tp hp, cc phng php
ci t tp hp, t in v ci t t in bi bng bm, hng u tin v ci t
hng u tin bi heap. Chng 6 cp n phng php ci t cc dng bng
khc nhau. Cc CTDL b nh ngoi (file bm, file ch s, B-cy) c trnh by
trong chng 7.

Tc gi
PTS inh Mnh Tng.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 3
mc lc



Chng I: Thut ton v phn tch thut ton 5
1.1. Thut ton 5
1.1.1. Khi nim thut ton. 5
1.1.2. Biu din thut ton. 7
1.1.3. Cc vn lin quan n thut ton. 8
1.2. Phn tch thut ton 9
1.2.1. Tnh hiu qu ca thut ton. 9
1.2.2. Ti sao li cn thut ton c hiu qu. 10
1.2.3. nh gi thi gian thc hin thut ton nh th no. 11
1.2.4. K hiu ln v nh gi thi gian thc hin
thut ton bng k hiu ln. 12
1.2.5. Cc qui tc nh gi thi gian thc hin thut ton. 14
1.2.6. Phn tch mt s thut ton. 17
Chng II: Kiu d liu, cu trc d liu v m hnh d liu. 20
2.1. Biu din d liu. 20
2.2. Kiu d liu v cu trc d liu. 21
2.3. H kiu ca ngn ng Pascal. 23
2.4. M hnh d liu v kiu d liu tru tng. 27
Chng III: Danh sch 32
3.1. Danh sch. 32
3.2. Ci t danh sch bi mng. 34
3.3. Tm kim trn danh sch. 37
3.3.1. Vn tm kim. 37
3.3.2. Tm kim tun t. 38
3.3.3. Tm kim nh phn. 39
3.4. Cu trc d liu danh sch lin kt. 41
3.4.1. Danh sch lin kt. 41
3.4.2. Cc php ton trn danh sch lin kt. 42
3.4.3. So snh hai phng php. 47
3.5. Cc dng danh sch lin kt khc. 47
3.5.1. Danh sch vng trn. 47
3.5.2. Danh sch hai lin kt. 51
3.6. ng dng danh sch. 53
3.7. Stack. 57
3.7.1. Stack. 57
3.7.2. Ci t stack bi mng. 58
3.7.3. Ci t stack bi danh sch lin kt. 60
3.8. Gi tr ca mt biu thc. 63
3.9. Hng. 68
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 4
3.9.1. Hng. 68
3.9.2. Ci t hng bi mng. 68
3.9.3. Ci t hng bi mng vng trn. 71
3.9.4. Ci t hng bi danh sch lin kt. 73
Chng IV: Cy. 76
4.1. Cy v cc khi nim v cy. 76
4.2. Cc php ton trn cy. 79
4.2.1. Cc php ton c bn trn cy. 79
4.2.2. i qua cy(Dit cy). 80
4.3. Ci t cy. 84
4.3.1. Biu din cy bng danh sch cc con ca mi nh. 84
4.3.2. Biu din cy bng con trng v em
lin k ca mi nh. 90
4.3.3. Biu din cy bi cha ca mi nh. 92
4.4. Cy nh phn. 93
4.5. Cy tm kim nh phn. 99
4.6. Thi gian thc hin cc php ton trn cy tm kim nh phn. 106
4.7. Cy cn bng. 109
4.8. Thi gian thc hin cc php ton trn cy cn bng. 120
Chng V: Tp hp. 122
5.1. Tp hp v cc php ton tp hp. 122
5.2. Ci t tp hp. 125
5.2.1. Ci t tp hp bi vecto bit. 125
5.2.2. Ci t tp hp bi danh sch. 126
5.3. T in. 131
5.4. Cu trc d liu bng bm. Ci t t in bi bng bm. 131
5.4.1. Bng bm m. 132
5.4.2. Bng bm ng.
136
5.5. Phn tch v nh gi cc phng php bm. 142
5.6. Hng u tin. 145
5.7. Heap v ci t hng u tin bi heap. 146
Chng VI: Bng. 154
6.1. Kiu d liu tru tng bng. 154
6.2. Ci t bng. 155
6.3. Bng ch nht. 157
6.3.1. Bng tam gic v bng rng lc. 158
6.3.2. Bng tha tht. 160
6.4. Tr chi i sng. 162
Chng VII: Cc cu trc d liu b nh ngoi. 172
7.1. M hnh t chc d liu b nh ngoi. 172
7.2. File bm.
174
7.3. File c ch s. 175
7.4. B-cy. 178
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 5

Chng I
Thut ton v phn tch thut ton


1.1. Thut ton.
1.1.1. Khi nim thut ton.
Thut ton (algorithm) l mt trong nhng khi nim quan trng nht trong tin
hc. Thut ng thut ton xut pht t nh ton hc A rp Abu Ja'far Mohammed ibn
Musa al Khowarizmi (khong nm 825). Tuy nhin lc by gi v trong nhiu th k sau,
n khng mang ni dung nh ngy nay chng ta quan nim. Thut ton ni ting nht, c
t thi c Hy lp l thut ton Euclid, thut ton tm c chung ln nht ca hai s
nguyn. C th m t thut ton ny nh sau :
Thut ton Euclid.
Input : m, n nguyn dng
Output : g, c chung ln nht ca m v n
Phng php :
Bc 1 : Tm r, phn d ca php chia m cho n
Bc 2 : Nu r = O, th g n (gn gi tr ca n cho g) v dng li. Trong trng
hp ngc li (r = 0), th m n, n r v quay li bc 1.
Chng ta c th quan nim cc bc cn thc hin lm mt mn n, c m
t trong cc sch dy ch bin mn n, l mt thut ton. Cng c th xem cc bc cn
tin hnh gp chi bng giy, c trnh by trong sch dy gp chi bng giy,
l thut ton. Phng php thc hin php cng, nhn cc s nguyn, chng ta hc
cp I cng l cc thut ton.
Trong sch ny chng ta ch cn n nh ngha khng hnh thc v thut ton :
Thut ton l mt dy hu hn cc bc, mi bc m t chnh xc cc php ton
hoc hnh ng cn thc hin, gii quyt mt s vn .
(T im Oxford Dictionary nh ngha, Algorithm: set of well - defined rules for
solving a problem in a finite number of steps.)
nh ngha ny, tt nhin, cn cha ng nhiu iu cha r rng. hiu y
ngha ca khi nim thut ton, chng ta nu ra 5 c trng sau y ca thut ton
(Xem D.E. Knuth [1968]. The Art of Computer Programming, vol. I. Fundamental
Algorithms).
1. Input. Mi thut ton cn c mt s (c th bng khng) d liu vo (input).
l cc gi tr cn a vo khi thut ton bt u lm vic. Cc d liu ny cn c
ly t cc tp hp gi tr c th no . Chng hn, trong thut ton Euclid trn, m v n l
cc d liu vo ly t tp cc s nguyn dng.
2. Output. Mi thut ton cn c mt hoc nhiu d liu ra (output). l cc gi
tr c quan h hon ton xc nh vi cc d liu vo v l kt qu ca s thc hin thut
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 6
ton. Trong thut ton Euclid c mt d liu ra, l g, khi thc hin n bc 2 v phi
dng li (trng hp r = 0), gi tr ca g l c chung ln nht ca m v n.
3. Tnh xc nh. Mi bc ca thut ton cn phi c m t mt cch chnh
xc, ch c mt cch hiu duy nht. Hin nhin, y l mt i hi rt quan trng. Bi v,
nu mt bc c th hiu theo nhiu cch khc nhau, th cng mt d liu vo, nhng
ngi thc hin thut ton khc nhau c th dn n cc kt qu khc nhau. Nu ta m t
thut ton bng ngn ng thng thng, khng c g m bo ngi c hiu ng ca
ngi vit thut ton. m bo i hi ny, thut ton cn c m t trong cc ngn
ng lp trnh (ngn ng my, hp ng hoc ngn ng bc cao nh Pascal, Fortran, C, ...).
Trong cc ngn ng ny, cc mnh c to thnh theo cc qui tc c php nghim
ngt v ch c mt ngha duy nht.
4. Tnh kh thi. Tt c cc php ton c mt trong cc bc ca thut ton phi
n gin. iu c ngha l, cc php ton phi sao cho, t nht v nguyn tc c th
thc hin c bi con ngi ch bng giy trng v bt ch trong mt khong thi gian
hu hn. Chng hn trong thut ton Euclid, ta ch cn thc hin cc php chia cc s
nguyn, cc php gn v cc php so snh bit r = 0 hay r = 0.
5. Tnh dng. Vi mi b d liu vo tho mn cc iu kin ca d liu vo (tc
l c ly ra t cc tp gi tr ca cc d liu vo), thut ton phi dng li sau mt s
hu hn bc thc hin. Chng hn, thut ton Euclid tho mn iu kin ny. Bi v gi
tr ca r lun nh hn n (khi thc hin bc 1), nu r = 0 th gi tr ca n bc 2 l gi
tr ca r bc trc, ta c n > r = n
1
> r
1
= n
2
> r
2
... Dy s nguyn dng gim dn
cn phi kt thc 0, do sau mt s bc no gi tr ca r phi bng 0, thut ton
dng.
Vi mt vn t ra, c th c mt hoc nhiu thut ton gii. Mt vn c
thut ton gii gi l vn gii c (bng thut ton). Chng hn, vn tm nghim
ca h phng trnh tuyn tnh l vn gii c. Mt vn khng tn ti thut ton
gii gi l vn khng gii c (bng thut ton). Mt trong nhng thnh tu xut sc
nht ca ton hc th k 20 l tm ra nhng vn khng gii c bng thut ton.
Trn y chng ta trnh by nh ngha khng hnh thc v thut ton. C th
xc nh khi nim thut ton mt cch chnh xc bng cch s dng cc h hnh thc.
C nhiu h hnh thc m t thut ton : my Turing, h thut ton Markp, vn phm
Chomsky dng 0, ... Song vn ny khng thuc phm vi nhng vn m chng ta
quan tm. i vi chng ta, ch s hiu bit trc quan, khng hnh thc v khi nim
thut ton l .
1.1.2. Biu din thut ton.
C nhiu phng php biu din thut ton. C th biu din thut ton bng
danh sch cc bc, cc bc c din t bng ngn ng thng thng v cc k hiu
ton hc. C th biu din thut ton bng s khi. Tuy nhin, nh ni, m bo
tnh xc nh ca thut ton, thut ton cn c vit trong cc ngn ng lp trnh. Mt
chng trnh l s biu din ca mt thut ton trong ngn ng lp trnh chn. c
d dng cc phn tip theo, c gi cn lm quen vi ngn ng lp trnh Pascal. l
ngn ng thng c chn trnh by cc thut ton trong sch bo.
Trong sch ny chng ta s trnh by cc thut ton bi cc th tc hoc hm
trong ngn ng ta Pascal. Ni l ta Pascal, bi v trong nhiu trng hp, cho ngn
gn, chng ta khng hon ton tun theo cc qui nh ca Pascal. Ngoi ra, c trng
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 7
hp, chng ta x dng c cc k hiu ton hc v cc mnh trong ngn ng t nhin
(ting Anh hoc ting Vit). Sau y l mt s v d.
V d 1 : Thut ton kim tra s nguyn n(n > 2) c l s nguyn t hay khng.


function NGTO (n : integer) : boolean ;
var a : integer ;
begin NGTO : = true ;
a : = 2 ;
while a <= sqrt (n) do
if n mod a = 0 then NGTO : = false
else a : = a +1 ;
end ;


V d 2 : Bi ton thp H Ni. C ba cc A, B, C. Lc u, cc A c n a c
lng vo theo th t nh dn t thp ln cao. i hi phi chuyn n a t cc A sang cc
B, c quyn s dng cc C lm v tr trung gian, nhng khng c php t a ln
ln trn a nh.
chuyn n a t cc A sang cc B, ta thc hin th tc sau : u tin l chuyn
n - 1 a bn trn t cc A sang cc C, sau chuyn a ln nht t cc A sang cc B.
n y, ch cn cuyn n - 1 a t cc C sang cc B. Vic chuyn n-1 a t cc ny
sang cc kia c thc hin bng cch p dng qui th tc trn.
Procedure MOVE (n, A, B, C) ;
{th tc chuyn n a t cc A sang cc B}
begin
if n=1 then chuyn mt a t cc A sang cc B
else
begin
MOVE (n-1, A, C, B) ;
Chuyn mt a t cc A sang cc B ;
MOVE (n-1, C, B, A) ;
end
end ;
A B C




GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 8



1.1.3. Cc vn lin quan n thut ton.
Thit k thut ton.
gii mt bi ton trn MTT, iu trc tin l chng ta phi c thut ton.
Mt cu hi t ra l, lm th no tm ra thut ton cho mt bi ton t ra ? Lp
cc bi ton c t ra t cc ngnh khoa hc k thut t cc lnh vc hot ng ca con
ng l ht sc phong ph v a dng. Cc thut ton gii cc lp bi ton khc nhau
cng rt khc nhau. Tuy nhin, c mt s k thut thit k thut ton chung nh chia--
tr (divide-and-conquer), phng php tham lam (greedy method), qui hoch ng
(dynamic programming), ... Vic nm c cc chin lc thit k thut ton ny l ht
sc cn thit, n gip cho bn d tm ra cc thut ton mi cho cc bi ton ca bn. Cc
ti ny s c cp n trong tp II ca sch ny.
Tnh ng n ca thut ton.
Khi mt thut ton c lm ra, ta cn phi chng minh rng, thut ton khi oc
thc hin s cho ta kt qu ng vi mi d liu vo hp l. iu ny gi l chng minh
tnh ng n ca thut ton. Vic chng minh mt thut ton ng n l mt cng vic
khng d dng. Trong nhiu trng hp, n i hi ta phi c trnh v kh nng t duy
ton hc tt.
Sau y ta s ch ra rng, khi thc hin thut ton Euclid, g s l c chung ln
nht ca hai s nguyn dng m v n bt k. Tht vy khi thc hin bc 1, ta c m = qn
+ r, trong q l s nguyn no . Nu r = 0 th n l c ca m v hin nhin n (do
g) l c chung ln nht ca m v n. Nu r = 0, th mt c chung bt k ca m v n
cng l c chung ca n v r (v r = m - qn). Ngc li mt c chung bt k ca n v r
cng l c chung ca m v n (v m = qn + r). Do c chung ln nht ca n v r cng
l c chung ln nht ca m v n. V vy, khi thc hin lp li bc 1 vi s thay i gi
tr ca m bi n gi tr ca n bi r (cc php gn m , nr bc 2) cho ti khi r = 0, ta
s nhn c gi tr ca g l c chung ln nht ca cc gi tr m v n ban u.
Phn tch thut ton.
Gi s i vi mt bi ton no chng ta c mt s thut ton gii. Mt cu
hi mi xut hin l, chng ta cn chn thut ton no trong s cc thut ton p
dng. Vic phn tch thut ton, nh gi phc tp ca n l ni dung ca phn sau.

1.2. Phn tch thut ton.
1.2.1. Tnh hiu qu ca thut ton.
Khi gii mt vn , chng ta cn chn trong s cc thut ton, mt thut ton m
chng ta cho l "tt" nht. Vy ta cn la chn thut ton da trn c s no ? Thng
thng ta da trn hai tiu chun sau y :
1. Thut ton n gin, d hiu, d ci t (d vit chng trnh)
2. Thut ton s dng tit kim nht cc ngun ti nguyn ca my tnh, v c
bit, chy nhanh nht c th c.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 9
Khi ta vit mt chng trnh ch s dng mt s t ln, v ci gi ca thi gian
vit chng trnh vt xa ci gi ca chy chong trnh th tiu chun (1) l quan trng
nht. Nhng c trng hp ta cn vit cc chng trnh (hoc th tc, hm) s dng
nhiu ln, cho nhiu ngi s dng, khi gi ca thi gian chy chng trnh s vt xa
gi vit n. Chng hn, cc th tc sp xp, tm kim c s dng rt nhiu ln, bi rt
nhiu ngi trong cc bi ton khc nhau. Trong trng hp ny ta cn da trn tiu
chun (2). Ta s ci t thut ton c th rt phc tp, min l chng trnh nhn c
chy nhanh hn cc chng trnh khc.
Tiu chun (2) c xem l tnh hiu qu ca thut ton. Tnh hiu qu ca thut
ton bao gm hai nhn t c bn.
1. Dung lng khng gian nh cn thit lu gi cc d liu vo, cc kt qu
tnh ton trung gian v cc kt qu ca thut ton.
2. Thi gian cn thit thc hin thut ton (ta gi l thi gian chy).
Chng ta s ch quan tm n thi gian thc hin thut ton. V vy, khi ni n
nh gi phc tp ca thut ton, c ngha l ta ni n nh gia thi gian thc hin.
Mt thut ton c hiu qu c xem l thut ton c thi gian chy t hn cc thut ton
khc.
1.2.2. Ti sao li cn thut ton c hiu qu.
K thut my tnh tin b rt nhanh, ngy nay cc my tnh ln c th t tc d
tnh ton hng trm triu php tnh mt giy. Vy th c b cng phi tiu tn thi gian
thit k cc thut ton c hiu qu khng ? Mt s v d sau y s tr li cho cu hi
ny.
V d 1 : Tnh nh thc.
Gi s M l mt ma trn vung cp n :


M
a a a
a a a
a a a
n
n
n n nn
=

(
(
(
(
11 12 1
21 22 2
1 2
...
...
. . . .
...


nh thc ca ma trn M k hiu l det(M) c xc nh qui nh sau :
Nu n = 1, det(M) = a
11
. Nu n >1, ta gi M
ij
l ma trn con cp n -1, nhn c
t ma trn M bng cch loi b dng th i v ct th j, v


( )
det( ) ( ) det M a M
j
j
n
j j
=
+
=

1
1
1
1 1
D dng thy rng, nu ta tnh nh thc trc tip da vo cng thc qui ny,
cn thc hin n! php nhn. Mt con s khng l vi n khng ly g lm ln. Ngay c vi
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 10
tc ca my tnh ln hin i, tnh nh thc ca ma trn cp n = 25, cng cn hng
triu nm !
Mt thut ton c in khc, l thut ton Gauss - Jordan thut ton ny tnh
nh thc cp n trong thi gian n
3
.
tnh nh thc cp n = 100 bng thut ton ny trn my tnh ln ta ch cn
n 1 giy.
V d 2 : Bi ton thp H Ni.
Trong v d 2, mc 1.1 ta a ra mt thut ton chuyn n a t cc A sang
cc B. Ta th tnh xem, cn thc hin bao nhiu ln chuyn a t cc ny sang cc khc
(khng t a to ln trn a nh) chuyn c n a t cc A sang cc B. Gi s
l F(n). T thut ton, ta c :
F(1) = 1,
F(n) = 2F(n-1) + 1 vi n > 1.
vi n = 1, 2, 3 ta c F(1) = 1, F(2) = 3, F(3) = 7.
Bng cch qui np, ta chng minh c F(n) = 2
n
- 1.
Vi n = 64, ta c F(64) = 2
64
-1 ln chuyn. Gi s mi ln chuyn mt a t cc
ny sang cc khc, cn 1 giy. Khi thc hin 2
64
-1 ln chuyn, ta cn 5 x 10
11
nm.
Nu tui ca v tr l 10 t nm, ta cn 50 ln tui ca v tr chuyn 64 a !.
i vi mt vn c th c nhiu thut ton, trong s c th thut ton ny
hiu qu hn (chy nhanh hn) thut ton kia. Tuy nhin, cng c nhng vn khng
tn ti thut ton hiu qu, tc l c thut ton, song thi gian thc hin n l qu ln,
trong thc t khng th thc hin c, d l trn cc my tnh ln hin i nht.
1.2.3. nh gi thi gian thc hin thut ton nh th no ?
C hai cch tip cn nh gi thi gian thc hin ca mt thut ton.Trong
phng php th nghim, chng ta vit chng trnh v cho chy chng trnh vi cc d
liu vo khc nhau trn mt my tnh no . Thi gian chy chng trnh ph thuc vo
cc nhn t chnh sau y :
1. Cc d liu vo
2. Chng trnh dch chuyn chng trnh ngun thnh m my.
3. Tc thc hin cc php ton ca my tnh c s dng chy chng
trnh.
V thi gian chy chng trnh ph thuc vo nhiu nhn t, nn ta khng th
biu din chnh xc thi gian chy l bao nhiu n v thi gian chun, chng hn n l
bao nhiu giy.
Trong phng php l thuyt ( l phng php c s dng trong sch ny), ta
s coi thi gian thc hin thut ton nh l hm s ca c d liu vo. C ca d liu vo
l mt tham s c trng cho d liu vo, n c nh hng quyt nh n thi gian thc
hin chng trnh. Ci m chng ta chn lm c ca d liu vo ph thuc vo cc thut
ton c th. i vi cc thut ton sp xp mng, c ca d liu l s thnh phn ca
mng. i vi thut ton gii h n phng trnh tuyn tnh vi n n, ta chn n l c.
Thng thng c ca d liu vo l mt s nguyn dng n. Ta s s dng hm s T(n),
trong n l c d liu vo, biu din thi gian thc hin ca mt thut ton.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 11
Thi gian thc hin thut ton T(n) ni chung khng ch ph thuc vo c ca d
liu vo, m cn ph thuc vo d liu vo c bit. Chng hn, ta xt bi ton xc nh
mt i tng a c mt trong danh sch n phn t (a
1
, a
2
, ... a
n
) hay khng. Thut ton
y l, so snh a vi tng phn t ca danh sch i t u n cui danh sch, khi gp
phn t a
i
u tin a
i
= a th dng li, hoc i n ht danh sch m khng gp a
i
no
bng a, trong trng hp ny a khng c trong danh sch. Cc d liu vo l a v danh
sch (a
1
, a
2
, ..., a
n
) (c th biu din danh sch bng mng, chng hn). C ca d liu
vo l n. Nu a
1
= a ch cn mt php so snh. Nu a
1
=a, a
2
= a, cn 2 php so snh. Cn
nu a
i
= a, i = 1, ..., n-1 v a
n
= a, hoc a khng c trong danh sch, ta cn n php so
snh. Nu xem thi gian thc hin T(n) l s php ton so snh, ta c T(n) <= n, trong
trng hp xu nht T(n) = n. Trong cc trng hp nh th, ta ni n thi gian thc
hin thut ton trong trng hp xu nht.
Ngoi ra, ta cn s dng khi nim thi gian thc hin trung bnh. l thi gian
trung bnh T
tb
(n) trn tt c cc d liu vo c c n. Ni chung thi gian thc hin trung
bnh kh xc nh hn thi gian thc hin trong trng hp xu nht.
Chng ta c th xc nh thi gian thc hin T(n) l s php ton s cp cn phi
tin hnh khi thc hin thut ton. Cc php ton s cp l cc php ton m thi gian
thc hin b chn trn bi mt hng s ch ph thuc vo cch ci t c s dng (ngn
ng lp trnh, my tnh ...). Chng hn cc php ton s hc +, - , *, /, cc php ton so
snh = , < >, <, <= , > , > = l cc php ton s cp. Php ton so snh hai xu k t
khng th xem l php ton s cp, v thi gian thc hin n ph thuc vo di ca
xu.
1.2.4 K hiu ln v nh gi thi gian thc hin thut ton bng k hiu
ln.
Khi nh gi thi gian thc hin bng phng php ton hc, chng ta s b qua
nhn t ph thuc vo cch ci t ch tp trung vo xc nh ln ca thi gian thc
hin T(n). K hiu ton hc ln c s dng m t ln ca hm T(n).
Gi s n l s nguyn khng m, T(n) v f(n) l cc hm thc khng m. Ta vit
T(n) = 0(f(n)) (c : T(n) l ln ca f(n)), nu v ch nu tn ti cc hng s dng c v
n
o
sao cho T(n) s c f(n), vi mi n > n
o
.
Nu mt thut ton c thi gian thc hin T(n) = 0(f(n)), chng ta s ni rng
thut ton c thi gian thc hin cp f(n). T nh ngha k hiu ln, ta c th xem rng
hm f(n) l cn trn ca T(n).
V d : Gi s T(n) = 3n
2
+ 5n + 4. Ta c
3n
2
+ 5n + 4 <= 3n
2
+ 5n
2

+ 4n
2
= 12n
2
, vi mi n > 1.
Vy T(n) = 0(n
2
). Trong trng hp ny ta ni thut ton c thi gian thc hin
cp n
2
, hoc gn hn, thut ton c thi gian thc hin bnh phng.
D dng thy rng, nu T(n) = 0(f(n)) v f(n) = 0(f
1
(n)) , th T(n)=0(f
1
(n)). Tht
vy, v T(n) l ln ca f(n) v f(n) l ln ca f
1
(n), do tn ti cc hng s c
o
, n
o
, c
1
,
n
1
sao cho T(n) s c
o
f(n) vi mi n > n
o
v f(n) sc
1
f
1
(n) vi mi n > n
1
. T ta c T(n) s
c
o
c
1
f
1
(n) vi mi n > max(n
o
,n
1
).
Khi biu din cp ca thi gian thc hin thut ton bi hm f(n), chng ta s
chn f(n) l hm s nh nht, n gin nht c th c sao cho T(n) = 0(f(n)). Thng
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 12
thng f(n) l cc hm s sau y : f(n) = 1 ; f(n)=logn; f(n)=n ; f(n) = nlogn ; f(n) = n
2
,
n
3
, ... v f(n) = 2
n
.
Nu T(n) = 0(1) iu ny c ngha l thi gian thc hin b chn trn bi mt
hng s no , trong trng hp ny ta ni thut ton c thi gian thc hin hng.
Nu T(n) =0(n), tc l bt u t mt n
o
no tr i ta c T(n)<=cn vi mt
hng s c no , th ta ni thut ton c thi gian thc hin tuyn tnh.
Bng sau y cho ta cc cp thi gian thc hin thut ton c s dng rng ri
nht v tn gi thng thng ca chng.

K hiu ln Tn gi thng thng
0(1) hng
0 (logn) logarit
0(n) tuyn tnh
0(n logn) nlogn
0(n
2
) bnh phng
0(n
3
) lp phng
0(2
n
) m

Danh sch trn sp xp theo th t tng dn ca cp thi gian thc hin.
thy r s khc nhau ca cc cp thi gian thc hin thut ton, ta xt v d
sau. Gi s i vi mt vn no , ta c hai thut ton gii A v B. Thut ton A c
thi gian thc hin T
A
(n) = 0(n
2
), cn thut ton B c thi gian thc hin T
B
(n) =
0(nlogn). Vi n = 1024, thut ton A i hi khong 1048.576 php ton s cp, cn
thut ton B i hi khong 10.240 php ton s cp. Nu cn mt micr-giy cho mt
php ton s cp th thut ton A cn khong 1,05 giy, trong khi thut ton B ch cn
khong 0,01 giy. Nu n = 1024 x 2, th thut ton A i hi khong 4,2 giy, trong khi
thut ton B ch i hi khong 0,02 giy. Vi n cng ln th thi gian thc hin thut
ton B cng t hn so vi thi gian thc hin thut ton A. V vy, nu mt vn no
c mt thut ton gii vi thi gian thc hin cp n
2
, bn tm ra thut ton mi vi thi
gian thc hin cp nlogn, th l mt kt qu rt c ngha.
Nhng thut ton c thi gian thc hin cp n
k
, vi k l s nguyn no > 1,
c gi l cc thut ton c thi gian thc hin a thc.
1.2.5 Cc qui tc nh gi thi gian thc hin thut ton.
Sau y chng ta a ra mt qui tc cn thit v ln nh gi thi gian thc
hin mt thut ton.
Qui tc tng : Nu T
1
(n) = 0(f
1
(n) v T
2
(n) = 0(f
2
(n) th
T
1
(n) + T
2
(n) = 0(max(f
1
(n), f
2
(n))).
Tht vy, v T
1
(n), T
2
(n) l ln ca f
1
(n), f
2
(n) tng ng do tn ti hng s
c
1
, c
2
, n
1
, n
2
sao cho T
1
(n) s c
1
f
1
(n) vi mi n > n
1
v T
2
(n) s c
2
f
2
(n) vi mi n > n
2.
. t
n
o
= max(n1, n2). Khi vi mi n > n
o
, ta c T
1
(n) + T
2
(n) s (c
1
+ c
2
) max (f
1
(n), f
2
(n)).
Qui tc ny thng c p dng nh sau. Gi s thut ton ca ta c phn
thnh ba phn tun t. Phn mt c thi gian thc hin T
1
(n) c nh gi l 0(1), phn
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 13
hai c thi gian T
2
(n) l 0(n
2
), phn ba c thi gian T
3
(n) l 0(n). Khi thi gian thc
hin thut ton T(n) = T
1
(n) + T
2
(n) + T
3
(n) s l 0(n
2
), v n
2
= max (1,n
2
,n).
Trong sch bo quc t cc thut ton thng c trnh by di dng cc th
tc hoc hm trong ngn ng ta Pascal. nh gi thi gian thc hin thut ton, ta
cn bit cch nh gi thi gian thc hin cc cu lnh ca Pascal. Trc ht, chng ta
hy xc nh cc cu lnh trong Pascal. Cc cu lnh trong Pascal c nh ngha qui
nh sau :
1. Cc php gn, c, vit, goto l cu lnh. Cc lnh ny c gi l cc lnh
n.
2. Nu S
1
, S
2
,..., S
n
l cu lnh th
begin S
1
, S
2
, ..., Sn end
l cu lnh. Lnh ny c gi l lnh hp thnh (hoc khi).
3. Nu S
1
v S
2
l cc cu lnh v E l biu thc logic th
if E then S
1
else S
2

l cu lnh, v
if E then S
1

l cu lnh. Cc lnh ny c gi l lnh if.
4. Nu S
1
, S
2
, ..., S
n+1
l cc cu lnh, E l biu thc c kiu th t m c, v v
1
, v
2
,...v
n

l cc gi tr cng kiu vi E th
case E of
v
1
: S
1
;
v
2
: S
2
;
. . . . . . .
v
n
: S
n
;
[else Sn+1]
end
l cu lnh. Lnh ny c gi l lnh case
5. Nu S l cu lnh v E l biu thc logie th
while E do S
l cu lnh. Lnh ny c gi l lnh while.
6. Nu S
1
, S
2
, ..., S
n
l cc cu lnh, v E l biu thc logic th
repeat S
1
, S
2
, ..., S
n
until E
l cu lnh. Lnh ny c gi l lnh repeat.
7. Vi S l cu lnh, E
1
v E
2
l cc biu cng mt kiu th t m c, th
for i : = E
1
to E
2
do S
l cu lnh, v
for i : = E
2
downto E
1
do S
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 14
l cu lnh. Cc cu lnh ny c gi l lnh for.
Nh nh ngha qui ca cc lnh, chng ta c th phn tch mt chng trnh
xut pht t cc lnh n, ri tng bc nh gi cc lnh phc tp hn, cui cng nh
gi c thi gian thc hin chng trnh.
Gi s rng, cc lnh gn khng cha cc li gi hm. Khi nh gi thi
gian thc hin mt chng trnh, ta c th p dng phng php qui sau y :
1. Thi gian thc hin cc lnh n : gn, c, vit, goto l 0(1).
2. Lnh hp thnh. Thi gian thc hin lnh hp thnh c xc nh bi lut
tng.
3. Lnh if. Gi s thi gian thc hin cc lnh S
1
, S
2
l 0(f
1
(n)) v 0(f
2
(n)) tng
ng. Khi thi gian thc hin lnh if l 0(max(f
1
(n), f
2
(n))).
4. Lnh case. c nh gi nh lnh if.
5. Lnh while. Gi s thi gian thc hin lnh S (thn ca lnh while) l 0(f(n)).
Gi s g(n) l s ti a cc ln thc hin lnh S, khi thc hin lnh while. Khi thi
gian thc hin lnh while l 0(f(n)g(n).
6. Lnh repeat. Gi s thi gian thc hin khi begin S
1
, S
2
, ... S
n
end l 0(f(n)).
Gi s g(n) l s ti a cc ln lp. Khi thi gian thc hin lnh repeat l 0(f(n)g(n)).
7. Lnh for. c nh gi tng t lnh while v repeat.
Nu lnh gn c cha cc li gi hm, th thi gian thc hin n khng th xem l
0(1) c, v khi thi gian thc hin lnh gn cn ph thuc vo thi gian thc hin
cc hm c trong lnh gn. Vic nh gi thi gian thc hin cc th tc (hoc hm)
khng qui c tin hnh bng cch p dng cc qui tc trn. Vic nh gi thi gian
thc hin cc th tc (hoc hm) quy s kh khn hn nhiu.
nh gi th tc (hoc hm) qui.
Trc ht chng ta xt mt v d c th. Ta s nh gi thi gian thc hin ca
hm qui sau (hm ny tnh n!).
function fact(n : integer) : integer ;
begin
if n <=1 then fact : =1
else fact : = n * fac(n-1)
end ;
Trong hm ny c ca d liu vo l n. Gi s thi gian thc hin hm l T(n).
Vi n=1, ch cn thc hin lnh gn fact : = 1, do T(1) = 0(1). Vi n > 1, cn thc
hin lnh gn fact : = n*fact(n-1). Do , thi gian T(n) l 0(1) ( thc hin php nhn
v php gn) cng vi T(n-1) ( thc hin li gi qui fact(n-1). Tm li, ta c quan
h qui sau :
T(1) = 0(1) ;
T(n) = 0(1) + T(n-1).
Thay cc 0(1) bi cc hng no , ta nhn c quan h qui sau
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 15
T(1) = C
1

T(n) = C
2
+ T(n-1)
gii phng trnh qui, tm T(n), chng ta p dng phng php th lp. Ta
c phng trnh qui
T(m) = C
2
+ T(m-1), vi m > 1
Thay m ln lt bi 2,3,..., n - 1, n, ta nhn c cc quan h sau.
T(2) = C
2
+ T(1)
T(3) = C
2
+ T(2)
...............................
T(n-1) = C
2
+ T(n-2)
T(n) = C
2
+ T(n-1)
Bng cc php th lin tip, ta nhn c
T(n) = (n-1)C
2
+ T(1)
hay T(n) = (n-1) C
2
+ C
1
, trong C
1
v C
2
l cc hng no . Do , T(n)=0(n).
T v d trn, ta suy ra phng php tng qut sau y nh gi thi gian thc
hin th tc (hm) qui. n gin, ta gi thit rng cc th tc (hm) l qui trc
tip. iu c ngha l cc th tc (hm) ch cha cc li gi qui n chnh n
(khng qua mt th tc (hm) khc no c). Gi s thi gian thc hin th tc l T(n), vi
n l c d liu vo. Khi thi gian thc hin cc li gi qui th tc s l T(m), vi m
< n. nh gi thi gian T(n
0
), vi n
0
l c d liu vo nh nht c th c (trong v d
trn, l T(1). Sau nh gi thn ca th tc theo cc qui tc 1-7, ta s nhn c
quan h qui sau y.
T(n) = F(T(m
1
), T(m
2
), ..., T(m
k
))
trong m
1
, m
2
, ...,m
k
< n. Gii phng trnh qui ny, ta s nhn c s nh gi ca
T(n). Tuy nhin, cn bit rng, vic gii phng trnh qui, trong nhiu trng hp, l
rt kh khn, khng n gin nh trong v d trnh by.
1.2.6. Phn tch mt s thut ton.
Sau y chng ta s p dng cc phng php trnh by phn tch phc
tp ca mt s thut ton.
V d 1 : Phn tch thut ton Euclid. Chng ta biu din thut ton Euclid bi
hm sau.
function Euclid (m, n : integer) : integer ;
var r : integer ;
begin
(1) r : = m mod n ;
(2) while r < > 0 do
begin
(3) m : = n ;
(4) n : = r ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 16
(5) r : = m mod n ;
end ;
(6) Euclid : = n ;
end ;
Thi gian thc hin thut ton ph thuc vo s nh nht trong hai s m v n. Gi
s n > n > 0, do c ca d liu vo l n. Cc lnh (1) v (6) c thi gian thc hin l
0(1). V vy thi gian thc hin thut ton l thi gian thc hin lnh while ta nh gi
thi gian thc hin lnh while (2). Thn ca lnh ny, l khi gm ba lnh (3), (4) v (5).
Mi lnh c thi gian thc hin l 0(1), do khi c thi gian thc hin l 0(1). Cn
phi nh gi s ln nht cc ln thc hin lp khi.
Ta c :
m = n.q
1
+ r
1
, 0 s r
1
< n
n = r
1
q
2
+ r
2
, 0 s r
2
< r
1

Nu r
1
s n/2 th r
2
< r
1
s n/2, do r
2
< n/2. Nu r
1
> n/2 th q
2
= 1, tc l n = r
1
+ r
2

, do
r
2
< n/2. Tm li, ta lun c r
2
< n/2
Nh vy, c hai ln thc hin khi th phn d r gim i mt na ca n. Gi k l
s nguyn ln nht sao cho 2
k
s n. S ln lp khi ti a l 2k+1s2log
2
n+1. Do thi
gian thc hin lnh while l 0(log
2
n). cng l thi gian thc hin thut ton.
V d 2. Dy s Fibonacci c xc nh mt cch qui nh sau :
f
o
= 0 ;
f
1
= 1 ;
f
n
= f
n-1
+ f
n-2
vi n > 2
Cc thnh phn u tin ca dy l 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Dy ny c
nhiu p dng trong ton hc, tin hc v l thuyt tr chi.
Thut ton qui :
function Fibo1 (n : integer) : integer ;
begin
if n <= 2 then Fibo1 : = n
else Fibo1 : = Fibo1(n-1) + Fibo1(n-2)
end ;
C th nh gi c hm ny c thi gian thc hin l 0(|
n
), vi |=(1+ 5 )/2.
Tc l, thut ton Fibo1 c thi gian thc hin m, n khng c ngha thc tin vi n
ln. Sau y l mt thut ton khc, c thi gian thc hin ch l 0(n).
funciton Fibo2 (n: integer) : integer ;
var i, j, k : integer
begin
(1) i : = 1 ;
(2) j : = 0 ;
(3) for k : = 1 to n do
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 17
begin
j : = i + j ;
i : = j - i ;
end ;
(4) Fibo2 : = j ;
end ;
Ta phn tch hm Fibo2. Cc lnh gn (1) , (2) v (4) c thi gian thc hin 0(1).
Thn ca lnh for(3) c thi gian thc hin l 0(1), s ln lp l n. Do lnh for(3) c
thi gian thc hin l 0(n). Kt hp li, ta c thi gian thc hin hm Fibo2 l 0(n).
Vi n = 50, thut ton Fibo1 cn khong 20 ngy trn my tnh ln, trong khi
thut ton Fibo2 ch cn khong 1 micr giy. Vi n = 100, thi gian chy ca thut ton
Fibo1 l 10
9
nm ! cn thut ton Fibo2 ch cn khong 1,5 micro giy. Thut ton Fibo2
cha phi l thut ton hiu qu nht. Bn th tm mt thut ton hiu qu hn.






GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 18
Chng II
kiu d liu, cu trc d liu v
m hnh d liu

2.1. Biu din d liu.
Trong my tnh in t (MTT), cc d liu d c bn cht khc nhau nh th
no (s nguyn, s thc, hay xu k t, ...), u c biu din di dng nh phn. Mi
d liu c biu din di dng mt dy cc s nh phn 0 hoc 1. V mt k thut y
l cch biu din thch hp nht, v cc gi tr 0 v 1 d dng c m ho bi cc phn
t vt l ch c hai trng thi. Chng ta s khng quan tm n cch biu din ny ca d
liu, cng nh cc cch tin hnh cc thao tc, cc php ton trn cc d liu c biu
din di dng nh phn.
Cch biu din nh phn ca d liu rt khng thun tin i vi con ngi. Vic
xut hin cc ngn ng lp trnh bc cao (FORTRAN, BASIC, PASSCAL, C ...) gii
phng con ngi khi nhng kh khn khi lm vic vi cch biu din trong my ca d
liu. Trong cc ngn ng lp trnh bc cao, cc d liu, hiu theo mt ngha no , l s
tru tng ho cc tnh cht ca cc i tng trong th gii hin thc. Ni d liu l s
tru tng ho t th gii hin thc, v ta b qua nhng nhn t, tnh cht m ta cho l
khng c bn, ch gi li nhng tnh cht c trng cho cc i tng thuc phm vi bi
ton ang xt. Chng hn, v tr ca mt i tng trong thc tin, c c trng bi cp
s thc (x,y) ( l to o -cc ca mt im trong mt phng). Do , trong ngn
ng Pascal, v tr mt i tng c biu din bi bn ghi gm hai trng tng ng vi
honh v tung ca mt im. Trong ton hc c cc khi nim biu din c trng
v mt s lng v cc quan h ca cc i tng trong th gii hin thc, l cc khi
nim s nguyn, s thc, s phc, dy, ma trn, ... Trn c s cc khi nim ton hc
ny, ngi ta a vo trong cc ngn ng lp trnh bc cao cc d liu kiu nguyn,
thc, phc, mng, bn ghi, ... Tuy nhin do tnh a dng ca cc bi ton cn x l bng
MTT, ch s dng cc kiu d liu c sn trong cc ngn ng lp trnh bc cao l cha
m t cc bi ton. Chng ta phi cn n cc cu trc d liu. l cc d liu
phc tp, c xy dng nn t cc d liu c, n gin hn bng cc phng php
lin kt no .
gii quyt mt bi ton bng MTT, ta cn xy dng m hnh d liu m t
bi ton. l s tru tng ho cc c trng ca cc i tng thuc phm vi vn
m ta quan tm, cc mi quan h gia cc i tng . Dng lm cc m hnh d liu
trong tin hc, chng ta s s dng cc m hnh ton hc nh danh sch, cy, tp hp, nh
x, quan h, th, ... M hnh d liu s c biu din bi cc cu trc d liu. Thng
thng mt m hnh d liu c th c biu hin bi nhiu cu trc d liu khc nhau.
Tu tng ng dng, ta s chn cu trc d liu no m cc thao tc cn thc hin l hiu
qu nht c th c.

2.2. Kiu d liu v cu trc d liu.
Trong cc ngn ng lp trnh bc cao, cc d liu c phn lp thnh cc lp d
liu da vo bn cht ca d liu. Mi mt lp d liu c gi l mt kiu d liu. Nh
vy, mt kiu T l mt tp hp no , cc phn t ca tp c gi l cc gi tr ca
kiu. Chng hn, kiu integer l tp hp cc s nguyn, kiu char l mt tp hu hn cc
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 19
k hiu. Cc ngn ng lp trnh khc nhau c th c cc kiu d liu khc nhau. Fortran
c cc kiu d liu l integer, real, logical, complex v double complex. Cc kiu d liu
trong ngn ng C l int, float, char, con tr, struct..., Kiu d liu trong ngn ng Lisp
li l cc S-biu thc. Mt cch tng qut, mi ngn ng lp trnh c mt h kiu ca
ring mnh. H kiu ca mt ngn ng bao gm cc kiu d liu c s v cc phng
php cho php ta t cc kiu d liu c xy dng nn cc kiu d liu mi.
Khi ni n mt kiu d liu, chng ta cn phi cp n hai c trng sau y :
1. Tp hp cc gi tr thuc kiu. Chng hn, kiu integer trong ngn ng Pascal
gm tt c cc s nguyn c biu din bi hai byte, tc l gm cc s nguyn t -
32768 n + 32767. Trong cc ngn ng lp trnh bc cao mi hng, bin, biu thc hoc
hm cn phi c gn vi mt kiu d liu xc nh. Khi , mi bin (biu thc, hm)
ch c th nhn cc gi tr thuc kiu ca bin (biu thc, hm) .
V d , nu X l bin c kiu boolean trong Pascal (var X : boolean) th X ch c
th nhn mt trong hai gi tr true, false.
2. Vi mi kiu d liu, cn phi xc nh mt tp hp no cc php ton c
th thc hin c trn cc d liu ca kiu. Chng hn, vi kiu real, cc php ton c
th thc hin c l cc php ton s hc thng thng +, -, *, / , v cc php ton so
snh = , < >, < , < =, >, > =.
Thng thng trong mt h kiu ca mt ngn ng lp trnh s c mt s kiu d
liu c gi l kiu d liu n hay kiu d liu phn t (atomic).
Chng hn, trong ngn ng Pascal, cc kiu d liu integer, real, boolean , char
v cc kiu lit k c gi l cc kiu d liu n. S d gi l n, v cc gi tr ca cc
kiu ny c xem l cc n th n gin nht khng th phn tch thnh cc thnh
phn n gin hn c na.
Nh ni, khi gii quyt cc bi ton phc tp, ch s dng cc d liu n l
khng , ta phi cn n cc cu trc d liu. Mt cu trc d liu bao gm mt tp hp
no cc d liu thnh phn, cc d liu thnh phn ny c lin kt vi nhau bi mt
phng php no . Cc d liu thnh phn c th l d liu n, hoc cng c th l
mt cu trc d liu c xy dng. C th hnh dung mt cu trc d liu c to
nn t cc t bo (khi xy dng), mi t bo c th xem nh mt ci hp cha d liu
thnh phn.
Trong Pascal v trong nhiu ngn ng thng dng khc c mt cch n gin
nht lin kt cc t bo, l sp xp cc t bo cha cc d liu cng mt kiu thnh
mt dy. Khi ta c mt cu trc d liu c gi l mng (array). Nh vy, c th ni,
mt mng l mt cu trc d liu gm mt dy xc nh cc d liu thnh phn cng mt
kiu. Ta vn thng ni n mng cc s nguyn, mng cc s thc, mng cc bn ghi, ...
Mi mt d liu thnh phn ca mng c gn vi mt ch s t mt tp ch s no .
Ta c th truy cp n mt thnh phn no ca mng bng cch ch ra tn mng v ch
s ca thnh phn .
Mt phng php khc to nn cc cu trc d liu mi, l kt hp mt s t
bo (c th cha cc d liu c kiu khc nhau) thnh mt bn ghi (record). Cc t bo
thnh phn ca bn ghi c gi l cc trng ca bn ghi. Cc bn ghi n lt li c
s dng lm cc t bo to nn cc cu trc d liu khc. Chng hn, mt trong cc
cu trc d liu hay c s dng nht l mng cc bn ghi.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 20
Cn mt phng php quan trng na kin to cc cu trc d liu, l s
dng con tr. Trong phng php ny, mi t bo l mt bn ghi gm hai phn INFOR
v LINK, phn INFOR c th c mt hay nhiu trng d liu, cn phn LINK c th
cha mt hay nhiu con tr tr n cc t bo khc c quan h vi t bo . Chng hn,
ta c th ci t mt danh sch bi cu trc d liu danh sch lin kt, trong mi
thnh phn ca danh sch lin kt l bn ghi gm hai trng
type Cell = record
element : Item ;
next : ^Cell ;
end ;
y, trng element c kiu d liu Item, mt kiu d liu no ca cc phn
t ca danh sch. Trng next l con tr tr ti phn t tip theo trong danh sch. Cu
trc d liu danh sch lin kt biu din danh sch (a
1
, a
2
,...., a
n
) c th c biu din
nh trong hnh 2.1





Hnh 2.1 : cu trc d liu danh sch lin kt.
S dng con tr lin kt cc t bo l mt trong cc phng php kin to cc
cu trc d liu c p dng nhiu nht. Ngoi danh sch lin kt, ngi ta cn dng
cc con tr to ra cc cu trc d liu biu din cy, mt m hnh d liu quan trng
bc nht.
Trn y chng ta nu ba phng php chnh kin to cc cu trc d liu.
( y chng ta ch ni n cc cu trc d liu trong b nh trong, cc cu trc d liu
b nh ngoi nh file ch s, B-cy s c cp ring.)
Mt kiu d liu m cc gi tr thuc kiu khng phi l cc d liu n m l cc
cu trc d liu c gi l kiu d liu c cu trc. Trong ngn ng Pascal, cc kiu d
liu mng, bn ghi, tp hp, file u l cc kiu d liu c cu trc.

2.3 H kiu ca ngn ng Pascal.
Pascal l mt trong cc ngn ng c h kiu phong ph nht. H kiu ca Pascal
cha cc kiu c s, integer, real, boolean, char v cc quy tc, da vo ta c th xy
dng nn cc kiu phc tp hn t cc kiu c. T cc kiu c s v p dng cc quy
tc, ta c th xy dng nn mt tp hp v hn cc kiu. H kiu ca Pascal c th c
nh ngha nh quy nh sau :
A. Cc kiu c s
1. Kiu integer
2. Kiu real
a
1
a
2

a
n
.


GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 21
3. Kiu boolean
4. Kiu char
5. Kiu lit k
Gi s obj1, obj2,.... objn l cc i tng no . khi ta c th to nn kiu
lit k T bng cch lit k ra tt c cc i tng .


Ch . Tt c cc kiu n u l cc kiu c th t, tc l vi hai gi tr bt k a
v b thuc cng mt kiu, ta lun c a <= b hoc a > = b. tr kiu real, cc kiu cn li
u l kiu c th t m c.
6. Kiu on con




Trong min v max l cn di v cn trn ca khong ; min v max l cc gi
tr thuc cng mt kiu integer, char, hoc cc kiu lit k, ng thi min< max. Kiu T
gm tt c cc gi tr t min n max.
B. Cc quy tc quy.
Trong Pascal, chng ta c th to ra cc kiu mi bng cch s dng cc quy tc
sau.
7. Kiu array (mng)
Gi s T
0
l mt kiu cho, ta s gi T
0
l kiu thnh phn mng. Gi s I l
kiu on con hoc kiu lit k, ta s gi I l kiu ch s mng. Khi ta c th to nn
kiu mng T vi cc thnh phn ca mng l cc gi tr thuc T
0
v c ch s ho bi
tp hu hn, c th t I.



8. Kiu record (bn ghi)
Gi s T
1
, T
2
,... .T
n
l cc kiu cho, v F
1
, F
2
, ....F
n
l cc tn (tn trng). Khi
ta c th thnh lp mt kiu bn ghi T vi n trng, trng th i c tn l F
i
v cc gi
tr ca n c kiu T
i
vi i = 1, 2,...n.






type T = min . max

type T = array|I| of T
0

type T = (obj1, obj2,...objn)
type T = record
F
1
: T
1
;
F
2
: T
2
;
...........
F
n
: T
n
;
end
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 22


Mi gi tr ca kiu bn ghi T l mt b n gi tr (t
1
, t
2
, ....t
n
), trong t
i
thuc T
i

vi i = 1, 2,..., n.
9. Kiu con tr
Gi s T l mt kiu cho. Khi ta c th to nn kiu con tr T
p
.



Cc gi tr ca T
p
l a ch (v tr) trong b nh ca my tnh lu gi cc i
tng thuc kiu T. Chng ta s biu din mt con tr p (var p:^T) bi vng trn nh c
mi tn ch n i tng thuc kiu T (hnh 2.2)

p



Hnh 2.2 : Biu din con tr.
10. Kiu set (tp hp)
Gi s T
0
l mt kiu cho. T
0
phi l kiu c th t m c " nh", chng
hn kiu on con (gii hn ph thuc vo chng trnh dch). Khi d, ta c th xc nh
kiu tp T


Mi i tng ca kiu T s l mt tp con ca tp T
0
.
11. Kiu file (tp)
Gi s T
0
l mt kiu no (tr kiu file).
Khi ,


s xc nh mt kiu file vi cc phn t l cc i tng thuc kiu T
0

V d. Sau y l nh ngha mt s kiu d liu
type Color = (white, red, blue, yellow, green) ;
Intarr = array [1 ...10] of integer,
Rec = record
Infor : color
type T = set of T
0

type T = file of T
0


type Tp = ^ T
i tng thuc kiu T
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 23
ptr : ^Intarr ;
end ;
Recarr = array [1 ... 5] of Rec ;
Biu din hnh hc ca mt i tng thuc kiu Recarr c cho trong hnh 2.3.
1 2 3 10
1 red 9 0 9 . . . 13

2 yellow
1 2 3 10
3 red 5 21 9 . . . 37

4 blue
1 2 3 10
5 blue . . . . . .


Hnh 2.3 : Cu trc d liu Recarr.

Cc php ton trong h kiu Pascal
Nh ni vi mi kiu d liu ta ch c th thc hin mt s php ton nht
nh trn cc d liu ca kiu. Ta khng th p dng mt php ton trn cc d liu thuc
kiu ny cho cc d liu c kiu khc. Ta c th phn tp hp cc php ton trn cc kiu
d liu ca Pascal thnh hai lp sau :
A. Cc php ton truy cp n cc thnh phn ca mt i tng d liu, chng
hn truy cp n cc thnh phn ca mt mng, n cc trng ca mt bn ghi.
Gi s A l mt mng vi tp ch s I, khi A[i] cho php ta truy cp n thnh
phn th i ca mng. Cn nu X l mt bn ghi th vic truy cp n trng F ca n
c thc hin bi php ton X.F.

B. Cc php ton kt hp d liu.
Pascal c mt tp hp phong ph cc php ton kt hp mt hoc nhiu d liu
cho thnh mt d liu mi. Sau y l mt s nhm cc php ton chnh.
1. Cc php ton s hc. l cc php ton + , -, * , / trn cc s thc ; cc php
ton +, - *, /, div, mod trn cc s nguyn.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 24
2. Cc php ton so snh. Trn cc i tng thuc cc kiu c th t ( l cc
kiu c s v kiu tp), ta c th thc hin cc php ton so snh =, < >, <, <=, >, >=.
Cn lu rng, kt qu ca cc php ton ny l mt gi tr kiu boolaen (tc l true
hoc false).
3. Cc php ton logic. l cc php ton and, or, not c thc hin trn hai
gi tr false v truc ca kiu boolean.
4. Cc php ton tp hp. Cc php ton hp, giao, hiu ca cc tp hp trong
pascal c biu din bi +, *, - tng ng. Vic kim tra mt i tng x c l phn t
ca tp A hay khng c thc hin bi php ton x in A. Kt qu ca php ton ny l
mt gi boolean.

2.4. M hnh d liu v kiu d liu tru tng.
gii quyt mt vn trn MTT thng thng chng ta cn phi qua mt s
giai on chnh sau y :
1. t bi ton
2. Xy dng m hnh
3. Thit k thut ton v phn tch thut ton
4. Vit chng trnh
5. Th nghim.
Chng ta s khng i su phn tch tng giai on. Chng ta ch mun lm sng
t vai tr ca m hnh d liu trong vic thit k chng trnh. Xt v d sau.
V d. Mt ngi giao hng, hng ngy anh ta phi chuyn hng t mt thnh ph
n mt s thnh ph khc ri li quay v thnh ph xut pht. Vn ca anh ta l lm
th no c c mt hnh trnh ch qua mi thnh ph mt ln vi ng i ngn nht c
th c.
Chng ta th gip ngi giao hng m t chnh xc bi ton. Trc ht, ta cn tr
li cu hi, nhng thng tin bit trong bi ton ngi giao hng l g ? l tn ca
cc thnh ph anh ta phi gh qua v di cc con ng c th c gia hai thnh ph.
Chng ta cn tm ci g ? Mt hnh trnh m ngi giao hng mong mun l mt danh
sch cc thnh ph A
1
,A
2
...A
n+1
(gi s c n thnh ph), trong cc A
1
(i=1,2,...,n+1)
u khc nhau, tr A
n+1
= A
1
.
Vi mt vn t ra t thc tin, ta c th m t chnh xc vn hoc cc
b phn ca n (vn con) bi mt m hnh ton hc no . Chng hn, m hnh ton
hc thch hp nht m t bi ton ngi giao hng l th. Cc nh ca th l cc
thnh ph, cc cnh ca th l cc ng ni hai thnh ph. Trng s ca cc cnh l
di cc ng ni hai thnh ph. Trong thut ng ca l thuyt th, danh sch cc
thnh ph biu din hnh trnh ca ngi giao hng, l mt chu trnh qua tt c cc nh
ca th. Nh vy, bi ton ngi giao hng c qui v bi ton trong l thuyt th.
Tm mt chu trnh xut pht t mt nh qua tt c cc nh cn li vi di ngn nht.
Bi ton ngi giao hng l mt trong cc bi ton tr thnh kinh in. N d
m hnh ho, song cng rt kh gii. Chng ta s quay li bi ton ny.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 25
Cn lu rng, tm ra cu trc ton hc thch hp vi mt bi ton cho,
chng ta phi phn tch k bi ton tm ra cu tr li cho cc cu hi sau.
Cc thng tin quan trng ca bi ton c th biu din bi cc i tng ton hc
no ?
C cc mi quan h no gia cc i tng ?
Cc kt qu phi tm ca bi ton c th biu din bi cc khi nim ton hc
no.
Sau khi c m hnh ton hc m t bi ton, mt cu hi t ra l, ta phi lm
vic vi m hnh nh th no tm ra li gii ca bi ton ? Chng ta s thit k thut
ton thng qua cc hnh ng, cc php ton thc hin trn cc i tng ca m hnh.
Mt m hnh ton hc cng vi cc php ton c th thc hin trn cc i tng
ca m hnh c gi l m hnh d liu. Chng hn, trong m hnh d liu th, trong
s rt nhiu cc php ton, ta c th k ra mt s php ton sau : tm cc nh k ca mi
nh, xc nh ng i ngn nht ni hai nh bt k, tm cc thnh phn lin thng, tm
cc nh treo,.. V mt ton hc, danh sch l mt dy hu hn n phn t (a
1
, a
2
, ..., a
n
).
Trong m hnh d liu danh sch, chng ta cng c th thc hin mt tp hp rt a dng
cc php ton, chng hn nh, xc nh di ca danh sch, xen mt phn t mi vo
danh sch, loi mt phn t no khi danh sch, sp xp li danh sch theo mt trt t
no , gp hai danh sch thnh mt danh sch.
Tr li bi ton ngi giao hng. C nhiu thut ton gii bi ton ny. Chng
hn, ta c th gii bng phng php vt cn : gi s c n thnh ph, khi mi hnh
trnh l mt hon v ca n-1 thnh ph (tr thnh ph xut pht), thnh lp (n-1)! hon v,
tnh di ca hnh trnh ng vi mi hon v v so snh, ta s tm c hnh trnh ngn
nht. Ta cng c th gii bi ton bng phng php qui hoch ng (Phng php ny
s c trnh by tp 2 ca sch ny). Sau y ta a ra mt thut ton n gin. Thut
ton ny tm ra rt nhanh nghim "gn ng", trong trng hp c ng i ni hai thnh
ph bt k. Gi s G l mt th (Graph), V l tp hp cc nh (Node), E l tp hp
cc cnh ca n. Gi s c(u,v) l di (nguyn dng) ca cnh (u,v). Hnh trnh
(Tour) ca ngi giao hng c th xem nh mt tp hp no cc cnh. Cost l di
ca hnh trnh. Thut ton c biu din bi th tc Salesperson.

procedure Salespersen (G : Graph ; var Tour : set of E ;
var cost : integer) ;
var v, w : Node
U : set of V ;
begin
Tour : = [ ] ;
Cost : = 0 ;
v : = v
o
; {v
o
- nh xut pht}
U : = V - [v
o
] ;
while U < > [ ] do
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 26
begin
Chn (v, w) l cnh ngn nht vi w thuc U ;
Tour : = Tour + [(v, w)] ;
Cost : = Cost + c (v,w) ;
v : = w ;
U : = U - [w] ;
end ;
Tour : = Tour + [(v,v
o
)] ;
Cost : = Cost + c(v,v
o
) ;
end;

Thut ton Salesperson c xy dng trn c s m hnh d liu th v m
hnh d liu tp hp. N cha cc thao tc trn th, cc php ton tp hp. T tng
ca thut ton nh sau. Xut pht t Tour l tp rng. Gi s ta xy dng c ng i
t nh xut pht v
0
ti nh v. Bc tip theo, ta s thm vo Tour cnh (v,w), l cnh
ngn nht t v ti cc nh w khng nm trn ng i t v
0
ti v. c c chng
trnh, chng ta phi biu din th, tp hp bi cc cu trc d liu. Sau vit cc th
tc (hoc hm) thc hin cc thao tc, cc php ton trn th, tp hp c trong thut
ton.
Tm li, qu trnh gii mt bi ton c th quy v hai giai on k tip nh sau
1. Xy dng cc m hnh d liu m t bi ton. Thit k thut ton bng cch s
dng cc thao tc, cc php ton trn cc m hnh d liu.
2. Biu din cc m hnh d liu bi cc cu trc d liu. Vi cc cu trc d liu
la chn, cc php ton trn cc m hnh d liu c th hin bi cc th tc (hm)
trong ngn ng lp trnh no .
Ton hc cung cp cho Tin hc rt nhiu cu trc ton hc c th dng lm m
hnh d liu. Chng hn, cc khi nim ton hc nh dy, tp hp, nh x, cy, th,
quan h, na nhm, nhm, otomat,...Trong cc chng sau chng ta s ln lt nghin
cu mt s m hnh d liu quan trng nht, c s dng thng xuyn trong cc thut
ton. l cc m hnh d liu danh sch, cy, tp hp. Vi mi m hnh d liu chng
ta nghin cu cc cch ci t n bi cc cu trc d liu khc nhau. Trong mi cch ci
t, mt s php ton trn m hnh c th c thc hin d dng, nhng cc php ton
khc c th li khng thun tin. Vic la chn cu trc d liu no biu din m hnh
ph thuc vo tng p dng.
Nh ni, vi mi m hnh d liu, chng ta c th thc hin mt tp hp cc
php ton rt a dng, phong ph. Song trong nhiu p dng, chng ta ch s dng m
hnh vi mt s xc nh cc php ton no . Khi chng ta s c mt kiu d liu
tru tng.
Nh vy, mt kiu d liu tru tng (abstract data type) l mt m hnh d liu
c xt cng vi mt s xc nh cc php ton no . Chng hn, cc tp hp ch xt
vi cc php ton : thm mt phn t vo mt tp cho, loi mt phn t khi mt tp
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 27
hp cho, tm xem mt phn t cho c nm trong mt tp hp hay khng, lp thnh
kiu d liu tru tng (KDLTT) t in (dictionnaire).
Cn KDLTT hng (hng i) l m hnh d liu danh sch cng vi hai php ton
chnh l : thm mt phn t mi vo mt u danh sch, v loi mt phn t mt u
khc ca danh sch. Chng ta s nghin cu k mt s kiu d liu tru tng quan trng
nht : hng, ngn xp (stack), t in, hng u tin. Vi mi KDLTT, cc cu trc d liu
biu din n s c nghin cu. Chng ta cng s nh gi hiu qu ca cc php
ton trong tng cch ci t.


GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 28
Chng 3
danh sch

Trong chng ny, chng ta s nghin cu danh sch, mt trong cc m hnh d
liu quan trng nht, c s dng thng xuyn trong cc thut ton. Cc phng php
khc nhau ci t danh sch s c xt. Chng ta s phn tch hiu qu ca cc php
ton trn danh sch trong mi cch ci t. Hai kiu d liu tru tng c bit quan
trng l stack (ngn xp) v hng (hng i) s c nghin cu. Chng ta cng s trnh
by mt s ng dng ca danh sch.

3.1. Danh sch.
cng mt lp cc i tng no . Chng hn, ta c th V mt ton hc, danh sch
l mt dy hu hn cc phn t thuc ni n danh sch cc sinh vin ca mt lp, danh
sch cc s nguyn no , danh sch cc bo xut bn hng ngy th , ...
Gi s L l danh sch c n (n > 0) phn t
L = (a
1
, a
2
, ..., a
n
)
Ta gi s n l di ca ca danh sch. Nu n >1 th a
1
c gi l phn t u
tin ca danh sch, cn a
n
l phn t cui cng ca danh sch. Nu n = 0 tc danh sch
khng c phn t no, th danh sch c gi l rng.
Mt tnh cht quan trng ca danh sch l cc phn t ca n c sp tuyn tnh
: nu n > 1 th phn t a
i
"i trc" phn t a
i+1
hay "i su" phn t a
i
vi i = 1,2, ..., n-1.
Ta s ni a
i
(i = 1,2, ..., n) l phn t v tr th i ca danh sch.
Cn ch rng, mt i tng c th xut hin nhiu ln trong mt danh sch.
Chng hn nh trong danh sch cc s ngy ca cc thng trong mt nm
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Danh sch con.
Nu L = (a
1
, a
2
, ..., a
n
) l mt danh sch v i, j l cc v tr, 1 s i s j s n th danh
sch L' = (b
1
, b
2
, ..., b
j-i+1
) trong b
1
= a
i
, b
2
= a
i+1
) ... b
j-i+1
=a
j
, Nh vy, danh sch con L'
gm tt c cc phn t t a
i
n a
j
ca danh sch L. Danh sch rng c xem l danh
sch con ca mt danh sch bt k.
Danh sch con bt k gm cc phn t bt u t phn t u tin ca danh sch
L c gi l phn u (prefix) ca danh sch L. Phn cui (postfix) ca danh sch L l
mt danh sch con bt k kt thc phn t cui cng ca danh sch L.
Dy con
Mt danh sch c to thnh bng cch loi b mt s (c th bng khng) phn
t ca danh sch L c gi l dy con ca danh sch L.
V d. Xt danh sch
L = (black, blue, green, cyan, red, brown, yellow)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 29
Khi danh sch (blue, green, cyan, red) l danh sch con ca L. Danh sch
(black, green, brown) l dy con ca L. Danh sch (black, blue, green) l phn u, cn
danh sch (red, brown, yellow) l phn cui ca danh sch L.
Cc php ton trn danh sch.
Chng ta trnh by khi nim ton hc danh sch. Khi m t mt m t mt
m hnh d liu, chng ta cn xc nh cc php ton c th thc hin trn m hnh ton
hc c dng lm c s cho m hnh d liu. C rt nhiu php ton trn danh sch.
Trong cc ng dng, thng thng chng ta ch s dng mt nhm cc php ton no .
Sau y l mt s php ton chnh trn danh sch.
Gi s L l mt danh sch (List), cc phn t ca n c kiu d liu Item no ,
p l mt v tr (position) trong danh sch. Cc php ton s c m t bi cc th tc
hoc hm.
1. Khi to danh sch rng
procedure Initialize (var L : List) ;
2. Xc nh di ca danh sch.
function Length (L : List) : integer
3. Loi phn t v tr th p ca danh sch
procedure Delete (p : position ; var L : List) ;
4. Xen phn t x vo danh sch sau v tr th p
procedure Insert After (p : position ; x : Item ; var L: List) ;
5. Xen phn t x vo danh sch trc v tr th p
procedure Insert Before (p : position ; x : Item ; var L:List) ;
6. Tm xem trong danh sch c cha phn t x hay khng ?
procedure Search (x : Item ; L : List : var found : boolean) ;
7. Kim tra danh sch c rng khng ?
function Empty (L : List) : boolean ;
8. Kim tra danh sch c y khng ?
function Full (L : List) : boolean ;
9. i qua dah sch. Trong nhiu p dng chng ta cn phi i qua danh sch, t
u n ht danh sch, v thc hin mt nhm hnh ng no vi mi phn t ca
danh sch.
procedure Traverse (var L : List) ;
10. Cc php ton khc. Cn c th k ra nhiu php ton khc. Chng hn truy
cp n phn t v tr th i ca danh sch ( tham kho hoc thay th), kt hp hai
danh sch thnh mt danh sch, phn tch mt danh sch thnh nhiu danh sch, ...
V d : Gi s L l danh sch L = (3,2,1,5). Khi , thc hin Delete (3,L) ta c
danh sch (3,2,5). Kt qu ca InsertBefor (1, 6, L) l danh sch (6, 3, 2, 1, 5).

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 30
3.2. Ci t danh sch bi mng.
Phng php t nhin nht ci t mt danh sch l s dng mng, trong
mi thnh phn ca mng s lu gi mt phn t no ca danh sch, v cc phn t k
nhau ca danh sch c lu gi trong cc thnh phn k nhau ca mng.
Gi s di ti a ca danh sch (maxlength) l mt s N no , cc phn t
ca danh sch c kiu d liu l Item. Item c th l cc kiu d liu n, hoc cc d
liu c cu trc, thng thng Item l bn ghi. Chng ta biu din danh sch (List) bi
bn ghi gm hai trng. Trng th nht l mng cc Item phn t th i ca danh sch
c lu gi trong thnh phn th i ca mng. Trng th hai ghi ch s ca thnh phn
mng lu gi phn t cui cng ca danh sch (xem hnh 3.1). Chng ta c cc khai bo
nh sau :
const maxlength = N ;
type List = record
element : array [1 ... maxlength]
of Item ;
count : 0 ... maxlength ;
end ;
var L : List ;


1 phn t th nht

2 phn t th hai
danh sch
.
.

Count phn t cui cng

.
.
. rng

maxlength


Hnh 3.1. Mng biu din danh sch
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 31

Trong cch ci t danh sch bi mng, cc php ton trn danh sch c thc
hin rt d dng. khi to mt danh sch rng, ch gn mt lnh gn :
L.count : = 0 ;
di ca danh sch l L.count. Danh sch y, nu L.count = maxlength.
Sau y l cc th tc thc hin cc php ton xen mt phn t mi vo danh sch
v loi mt phn t khi danh sch.


Th tc loi b.
procedure Delete (p : 1 ... maxlength ; var L : List ;
var OK : boolean) ;
var i : 1 ... maxlength ;
begin
OK : = false ;
with L do
if p < = count then
begin
i : = p;
while i < count do
begin
element [i] : = element [i + 1] ;
i: = i + 1
end ;
count : = count -1 ;
OK : = true ;
end ;
end ;

Th tc trn thc hin php loi b phn t v tr p khi danh sch. Php ton
ch c thc hin khi danh sch khng rng v p ch vo mt phn t trong danh sch.
Tham bin OK ghi li php ton c c thc hin thnh cng hay khng. Khi loi b,
chng ta phi dn cc phn t cc v tr p+1, p + 2, ... ln trn mt v tr.
Th tc xen vo.

procedure InsertBefore (p : 1 ... maxlength ; x : Item ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 32
var L : List ; var OK : boolean) ;
var i : 1... maxlength ;
begin
OK: = false ;
with L do
if (count < maxlength) and ( p <= count) then
begin
i: = count + 1 ;
while i > p do
begin
element[i]:= element[i-1] ;
i:=i-1 ;
end ;
element [p] : = x ;
count : = count + 1 ;
OK : = true ;
end ;
end ;

Th tc trn thc hin vic xen phn t mi x vo trc phn t v tr p trong
danh sch. Php ton ny ch c thc hin khi danh sch cha y (count < maxlength)
v p ch vo mt phn t trong danh sch (p <= count). Chng ta phi dn cc phn t
cc v tr p, p+1, ... xung di mt v tr ly ch cho x.
Nu n l di ca danh sch ; d dng thy rng, c hai php ton loi b v xen
vo c thc hin trong thi gian O(n).
Vic tm kim trong danh sch l mt php ton c s dng thng xuyn
trong cc ng dng. Chng ta s xt ring php ton ny trong mc sau.
Nhn xt v phng php biu din danh sch bi mng.
Chng ta ci t danh sch bi mng, tc l dng mng lu gi cc phn t
ca danh sch. Do tnh cht ca mng, phng php ny cho php ta truy cp trc tip
n phn t v tr bt k trong danh sch. Cc php ton khc u c thc hin rt d
dng. Tuy nhin phng php ny khng thun tin thc hin php ton xen vo v
loi b. Nh ch ra trn, mi ln cn xen phn t mi vo danh sch v tr p (hoc
loi b phn t v tr p) ta phi y xung di (hoc ln trn) mt v tr tt c cc phn
t i sau phn t th p. Nhng hn ch ch yu ca cch ci t ny l khng gian nh
c nh ginh lu gi cc phn t ca danh sch. Khng gian nh ny b quy nh bi
c ca mng. Do danh sch khng th pht trin qu c ca mng, php ton xen vo
s khng c thc hin khi mng y.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 33
3.3. Tm kim trn danh sch.
3.3.1. Vn tm kim.
Tm kim thng tin l mt trong cc vn quan trng nht trong tin hc. Cho
trc mt s in thoi, chng ta cn tm bit ngi c s in thoi , a ch ca anh
ta, v nhng thng tin khc gn vi s in thoi . Thng thng cc thng tin v mt
i tng c biu din di dng mt bn ghi, cc thuc tnh ca i tng l cc
trng ca bn ghi. Trong bi ton tm kim, chng ta s tin hnh tm kim cc i
tng da trn mt s thuc tnh bit v i tng, chng ta s gi cc thuc tnh ny
l kho. Nh vy, kho ca bn ghi c hiu l mt hoc mt s trng no ca bn
ghi. Vi mt gi tr cho trc ca kho, c th c nhiu bn ghi c kho . Cng c th
xy ra, khng c bn ghi no c gi tr kho cho.
Thi gian tm kim ph thuc vo cch chng ta t chc thng tin v phng php
tm kim c s dng. Chng ta c th t chc cc i tng tm kim di dng
danh sch, hoc cy tm kim nh phn,...Vi mi cch ci t (Chng hn, c th ci t
danh sch bi mng, hoc danh sch lin kt), chng ta s c phng php tm kim thch
hp.
Ngi ta phn bit hai loi tm kim : tm kim trong v tm kim ngoi. Nu
khi lng thng tin ln cn lu gi di dng cc file b nh ngoi, nh a t hoc
bng t, th s tm kim c gi l tm kim ngoi. Trong trng hp thng tin c lu
gi b nh trong, ta ni n tm kim trong. Trong chng ny v cc chng sau,
chng ta ch cp tm kim trong.
Sau y chng ta s nghin cu cc phng php tm kim trn danh sch c
biu din bi mng.
3.3.2. Tm kim tun t.
Gi s keytype l kiu kho. Trong nhiu trng hp keytype l integer, real,
hoc string. Cc phn t ca danh sch c kiu Item - bn ghi c cha trng key kiu
keytype.
type keytype = .... ;
Item = record
key : keytype ;
|cc trng khc|
. . . . . .
end ;
List = record
element : array |1...max| of Item ;
count : 0 .. max ;
end ;

Tm kim tun t (hay tm kim tuyn tnh) l phng php tm kim n gin
nht : xut pht t u danh sch, chng ta tun t i trn danh sch cho ti khi tm ra
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 34
phn t c kho cho th dng li, hoc i n ht danh sch m khng tm thy. Ta c
th tc tm kim sau.

procedure SeqSearch (var L : List ; x : keytype ;
var found : boolean ; var p : 1..max) ;
begin
found : = false ;
p : = 1 ;
with L do
while (not found) and ( p <= count) do
if element |p| . key = x then found : = true
else p : = p + 1 ;
end ;

Th tc trn tm xem trong danh sch L c cha phn t vi kho l x hay
khng. Nu c th gi tr ca tham bin found l true. Trong trng hp c, bin p s ghi
li v tr ca phn t u tin c kho l x.
Phn tch tm kim tun t.
Gi s di ca danh sch l n (count = n). D dng thy rng, thi gian thc
hin tm kim tun t l thi gian thc hin lnh while. Mi ln lp cn thc hin php so
snh kho x vi kho ca mt phn t trong danh sch, s ln nht cc ln lp l n, do
thi gian tm kim tun t l 0 (n).

3.3.3. Tm kim nh phn.
Gi s L l mt danh sch c di n v c biu din bi mng, cc phn t
ca n c kiu Item c m t nh trong mc 3.3.2. Gi s kiu ca kho keytype l
kiu c th t, tc l vi hai gi tr bt k ca n v
1
v v
2
, ta lun lun c v
1
s v
2
, hoc v
1
>
v
2
; trong s l mt quan h th t no c xc nh trn keytype. Gi s cc phn
t ca danh sch L c sp xp theo th t kho khng gim :
L. element |1|. key s L. element |2|.key s ...
s L. element |n|.key
Trong trng hp ny, chng ta c th p dng phng php tm kim khc, hiu
qu hn phng php tm kim tun t. l k thut tm kim nh phn. T tng ca
tm kim nh phn nh sau : u tin ta so snh kho x vi kha ca phn t gia danh
sch, tc phn t v tr m=(1+n)/2
1
. Nu chng bng nhau x = L.element [m].key, ta

1
. K hiu a ch phn nguyn ca a, tc l s nguyn ln nht nh hn hoc bng a ;
chng hn 5 = 5, 5.2 = 5 cn a ( ch s nguyn nh nht ln hn hoc bng chng
hn 6.3 ( = 7, 6 ( = 6.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 35
tm thy. Nu x < L.element [m].key, ta tip tc tm kim trong na u danh sch t
v tr 1 n v tr m-1. Cn nu x > L.element [m].key, ta tip tc tm kim trong na cui
danh sch t v tr m + 1 n v tr n. Nu n mt thi im no , ta phi tm x trong
mt danh sch con rng, th iu c ngha l trong danh sch khng c phn t no
vi kho x.
Chng ta c th m t phng php tm kim nh phn bi th tc sau :
procedure BinarySearch (var L : List ; x : key type ;
var found : boolean ; p : 1 ... max) ;
var mid , bottom, top : integer ;
begin
(1) found : = false ;
(2) bottom : = 1,
(3) top : = L.count ;
(4) while (not found) and (bottom <= top) do
begin
(5) mid : = (bottom + top) div 2 ;
(6) if x = L. element [mid].key then
found : = true
else if x < L.element [mid].
top : = mid - 1 key then
else
bottom : = mid + 1 ;
end ;
(7) p : = mid ;
end ;

Trong th tc trn, ta a vo hai bin bottom v top ghi li v tr u v v
tr cui ca danh sch con m ta cn tip tc tm kim. Bin mid ghi li v tr gia ca
mi danh sch con. Qu trnh tm kim c thc hin bi vng lp while. Mi ln lp
kho x c so snh vi kho ca phn t gia danh sch. Nu bng nhau, found : =
true v dng li. Nu x nh hn, ta tip tc tm na u ca danh sch con ang xt (t
li top : = mid -1 ). Nu x ln hn, ta s tm tip na cui danh sch (t li bottom
:=mid + 1).
Phn tch tm kim nh phn.
Trc quan, ta thy ngay tm kim nh phn hiu qu hn tm kim tun t, bi v
trong tm kim tun t ta phi ln lt xt tng phn t ca danh sch, bt u t phn t
u tin cho ti khi pht hin ra phn t cn tm hoc khng. Cn trong tm kim nh
phn, mi bc ta ch cn xt phn t gia danh sch, nu cha pht hin ra ta li xt
tip phn t gia na u hoc na cui danh sch. Sau y, ta nh gi thi gian thc
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 36
hin tm kim nh phn. Gi s di danh sch l n. Thi gian thc hin cc lnh (1) -
(3) v (7) l 0(1). V vy thi gian thc hin th tc l thi gian thc hin lnh while (4).
Thn ca lnh lp ny (cc lnh (4) v (5) c thi gian thc hin l 0(1). Gi t l s ln
lp ti a cn thc hin. Sau mi ln lp di ca danh sch gim i mt na, t iu
kin bottom s top, ta suy ra t l s nguyn dng ln nht sao cho 2t s n, tc l t s log
2
n.
Nh vy, thi gian tm kim nh phn trong mt danh sch c n phn t l 0(log
2
n), trong
khi thi gian tm kim tun t l 0(n).

3.3. Cu trc d liu danh sch lin kt.
3.3.1. Danh sch lin kt.
Trong mc ny chng ta s biu din danh sch bi cu trc d liu khc, l
danh sch lin kt. Trong cch ci t ny, danh sch lin kt c to nn t cc t bo
mi t bo l mt bn ghi gm hai trng, trng infor "cha" phn t ca danh sch,
trng next l con tr tr n phn t i sau trong danh sch. Chng ta s s dng con tr
head tr ti u danh sch. Nh vy mt danh sch (a
1
, a
2
, ...a
n
) c th biu din bi cu
trc d liu danh sch lin kt c minh ho trong hnh 3.2.

head

a
1
a
2
... a
n
-

Hnh 3.2. Danh sch lin kt biu din danh sch (a
1
, a
2
, ...a
n
)
Mt danh sch lin kt c hon ton xc nh bi con tr head tr ti u danh
sch, do , ta c th khai bo nh sau.
type pointer = ^ cell
cell = record
infor : Item ;
next : pointer
end ;
var head : pointer ;
Ch : Khng nn nhm ln danh sch v danh sch lin kt. Danh sch v danh
sch lin kt l hai khi nim hon ton khc nhau. Danh sch l mt m hnh d liu, n
c th c ci t bi cc cu trc d liu khc nhau. Cn danh sch lin kt l mt cu
trc d liu, y n c s dng biu din danh sch.

3.3.2. Cc php ton trn danh sch lin kt.
Sau y chng ta s xt xem cc php ton trn danh sch c thc hin nh th
no khi m danh sch c ci t bi danh sch lin kt.
iu kin mt danh sch lin kt rng l
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 37
head = nil
Do , mun khi to mt danh sch rng, ta ch cn lnh gn :
head : = nil
Danh sch lin kt ch y khi khng cn khng gian nh cp pht cho cc
thnh phn mi ca danh sch. Chng ta s gi thit iu ny khng xy ra, tc l danh
sch lin kt khng khi no y. Do php ton xen mt phn t mi vo danh sch s
lun lun c thc hin.
Php ton xen vo.
Gi s Q l mt con tr tr vo mt thnh phn ca danh sch lin kt, v trong
trng hp danh sch rng (head = nil) th Q = nil. Chng ta cn xen mt thnh phn mi
vi infor l x vo sau thnh phn ca danh sch c tr bi Q. Php ton ny c thc
hin bi th tc sau :

procedure InsertAfter (x : Item ; Q : pointer ; var head : pointer) ;
var P : pointer ;
begin
new (P) ;
P^ . infor : = x ;
if head = nil then
begin
P^. next : = nil ;
head : = P ;
end else
begin
P^. next : = Q^. next ;
Q^. next : = P ;
end ;
end ;

Cc hnh ng trong th tc InsertAfter c minh ho trong hnh3.3
Gi s by gi ta cn xen thnh phn mi vi infor l x vo trc thnh phn ca
danh sch c tr bi Q. Php ton ny (InsertBefore) phc tp hn. Kh khn y l,
nu Q khng l thnh phn u tin ca danh sch (tc l Q = head) th ta khng nh v
c thnh phn i trc thnh phn Q kt ni vi thnh phn s c xen vo. C th
gii quyt kh khn ny bng cch, u tin ta vn xen thnh phn mi vo sau thnh
phn Q, sau trao i gi tr cha trong phn infor gia thnh phn mi v thnh phn
Q.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 38
procedure InsertBefore (x : Item l Q : pointer ; var head : pointer) ;
var P : pointer ;
begin
new (P) ;
if Q = head then
begin
P^. infor : = x ;
P^. next : = Q ;
head : = P
end else
begin
P^.next : = Q^. next ;
Q^.next : = P ;
P^.infor : = Q^.infor ;
Q^.infor : = x ;
end ;
end ;

Q

X




P

Hnh 3.3. Xen thnh phn mi vo danh sch sau Q.

Php ton loi b.
Gi s ta c mt danh sch lin kt khng rng (head = nil) Q l mt con tr tr
vo mt thnh phn trong danh sch. Gi s ta cn loi b thnh phn Q khi danh sch.
y ta cng gp kh khn nh khi mun xen mt thnh phn mi vo trc thnh phn
Q. Do , ta cn a vo mt con tr R i trc con tr Q mt bc, tc l nu Q khng
phi l thnh phn u tin, th Q = R^.next. Khi php ton loi b thnh phn Q khi
danh sch c thc hin rt d dng. Ta c th tc sau :
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 39

procedure Delete (Q,R : pointer ; var head : pointer ; var x : Item),
begin
x : = Q^.Infor ;
if Q = head then head : = Q^.next
else R^.next : = Q^.next ;
end ;

Hnh 3.4. Minh ho cc thao tc trong th tc Delete.

R Q

..... X X ......



Hnh 3.4. Xo thnh phn Q khi danh sch.

Php ton tm kim.
i vi danh sch lin kt, ta ch c th p dng phng php tm kim tun t.
Cho d danh sch c sp xp theo th t khng tng (hoc khng gim) ca kho
tm kim, ta cng khng th p dng c phng php tm kim nh phn. L do l, ta
khng d dng xc nh c thnh phn gia ca danh sch lin kt.
Gi s chng ta cn tm trong danh sch thnh phn vi infor l x cho trc.
Trong th tc tm kim sau y, ta s cho con tr P chy t u danh sch, ln lt qua
cc thnh phn ca danh sch v dng li thnh phn vi infor = x. Bin found c s
dng ghi li s tm kim thnh cng hay khng.

procedure Search (x : Item ; head : pointer ; var P : pointer
var found : boolean) ;
begin
P : = head ;
found : = false ;
while (P < > nil ) and (not found) do
if P^.infor = x then found : = true
else P : = P^.next
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 40
end ;

Thng thng ta cn tm kim thc hin cc thao tc khc vi danh sch.
Chng hn, ta cn loi b khi danh sch thnh phn vi infor = x hoc xen mt thnh
phn mi vo trc (hoc sau) thnh phn vi infor = x. Mun th, trc ht ta phi tm
trong danh sch thnh phn vi infor l x cho trc. cho php loi b v xen vo c
th thc hin d dng, ta a vo th tc tm kim hai con tr i cch nhau mt bc.
Con tr Q tr vo thnh phn cn tm, cn R tr vo thnh phn i trc. Ta c th tc
sau :

procedure Search (x : Item ; head : pointer ; var Q, R : pointer ;
var found : boolean) ;
begin
R : = nil ;
Q : = head ;
found : = false :
while (Q < > nil) and (not found) do
if Q^.infor = x then found : = true
else begin
R:=Q ;
Q : = Q^. next ;
end ;
end ;

Php ton i qua danh sch.
Trong nhiu p dng, ta phi i qua danh sch, 'thm' tt c cc thnh phn ca
danh sch. Vi mi thnh phn, ta cn thc hin mt s php ton no vi cc d liu
cha trong phn infor. Cc php ton ny, gi s c m t trong th tc Visit. Ta c
th tc sau.

procedure traverse (var head : pointer) ;
var P : pointer ;
begin
P : = head ;
while P < > nil do
begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 41
Visit (P^) ;
P : = P^. next
end ;
end ;

3.3.3. So snh hai phng php.
Chng ta trnh by hai phng php ci t danh sch : ci t danh sch bi
mng v ci t danh sch bi danh sch lin kt. Mt cu hi t ra l, phng php no
tt hn ? Chng ta ch c th ni rng, mi phng php u c u im v hn ch, vic
la chn phng php no, mng hay danh sch lin kt biu din danh sch, tu
thuc vo tng p dng. Sau y l cc nhn xt so snh hai phng php.
1. Khi biu din danh sch bi mng, chng ta phi c lng di ti a ca
danh sch khai bo c ca mng. S xy ra lng ph b nh khi danh sch cn nh.
Nhng trong thi gian chy chng trnh, nu php ton xen vo c thc hin thng
xuyn, s c kh nng dn n danh sch y. Trong khi nu biu din danh sch bi
danh sch lin kt, ta ch cn mt lng khng gian nh cn thit cho cc phn t hin c
ca danh sch. Vi cch biu din ny, s khng xy ra tnh trng danh sch y, tr khi
khng gian nh cp pht khng cn na. Tuy nhin n cng tiu tn b nh cho cc
con tr mi t bo.
2. Trong cch biu din danh sch bi mng, cc php ton truy cp n mi phn
t ca danh sch, xc nh di ca danh sch... c thc hin trong thi gian hng.
Trong khi cc php ton xen vo v loi b i hi thi gian t l vi di ca danh
sch. i vi danh sch lin kt, cc php ton xen vo v loi b li c thc hin
trong thi gian hng, cn cc php ton khc li cn thi gian tuyn tnh. Do , trong p
dng ca mnh, ta cn xt xem php ton no trn danh sch c s dng nhiu nht,
la chn phng php biu din cho thch hp.

3.4. Cc dng danh sch lin kt khc.
3.4.1. Danh sch vng trn.
Danh sch lin kt vng trn (gi tt l danh sch vng trn) l danh sch m con
tr ca thnh phn cui cng ca danh sch khng bng nil m tr n thnh phn u
tin ca danh sch, to thnh mt vng trn (xem hnh 3.5). c im ca danh sch
vng trn l cc thnh phn trong danh sch u bnh ng, mi thnh phn u c thnh
phn i sau. Xut pht t mt thnh phn bt k ta c th truy cp n thnh phn bt k
khc trong danh sch.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 42
basic







Hnh 3.5. Danh sch vng trn

T bo to nn danh sch vng trn c cu trc nh trong danh sch lin kt.
Chng ta s dng mt con tr basic tr ti mt thnh phn bt k trong danh sch.

type pointer = ^Cell ;
Cell = record
infor : Item ;
next : pointer ;
end ;
var basic : pointer ;
Trong cc p dng, chng ta thng s dng danh sch vng trn c dng nh
trong hnh 3.5. , ta phn bit mt thnh phn bn phi (c tr bi basic) v mt
thnh phn bn tri ca danh sch (c tr bi basic^.next). i vi danh sch vng
trn, ta thng s dng ba php ton quan trng nht sau y :
1.Xen vo bn tri danh sch (Insertleft) mt thnh phn mi
2. Xen vo bn phi danh sch (InsertRight) mt thnh phn mi.
3. Loi b thnh phn bn tri danh sch (DeletLeft).
Sau y ta s m t cc th tc thc hin cc php ton trn. Vic xen vo bn tri
danh sch mt thnh phn mi vi infor l x c thc hin bi th tc sau :

procedure InsertLeft (var basic : pointer ; x : Item ) ;
var P : pointer ;
begin
new (P) :
P^. infor : =x ;
if basic = nil then
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 43
begin
basic : = P ;
basic^.next : = basic
end ;
else begin
P^.next : = basic^.next ;
basic^.next : = P
end ;
end ;

Vic xen vo bn phi danh sch c tin hnh nh sau. Ta thm thnh phn mi
vo bn tri, sau cho con tr basic tr vo thnh phn mi c thm vo ny.

procedure InsertRight (var basic : pointer ; x : Item) ;
begin
InsertLeft (basic, x) ;
basic : = basic^.next ;
end ;

Sau y l th tc loi b thnh phn bn tri danh sch, tham bin x ghi li cc
thng tin ca thnh phn b loi b.

procedure DeleteLeft (var basic : pointer ; var x :Item) ;
var P : pointer ;
begin
if basic < > nil then
begin
P : = basic^.next ;
x : = P^.infor ;
if basic^. next = basic then basic : = nil
else basic^.next : = P^.next :
dispose (P)
end ;
end ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 44

Mt iu c bit na ca danh sch vng trn l ch, ta c th s dng n nh
mt stack (vi cc php ton InsertLeft v DeleteLeft), hoc c th s dng n nh mt
hng (vi cc php ton InsertRight v DeleteLeft). Stack v hng s c nghin cu k
trong cc mc sau.
i vi danh sch vng trn, mt s php ton khc trn danh sch c thc
hin rt d dng. Chng hn, ni hai danh sch vng trn base1 v base2 thnh mt
danh sch base1, ta ch cn trao i cc con tr base1^.next v base2.next.
Trong nhiu p dng, thun tin cho cc thao tc vi danh sch vng trn, ta
a thm vo danh sch mt thnh phn c bit (c gi l u ca danh sch). u
danh sch cha cc gi tr c bit phn bit vi cc thnh phn khc ca danh sch
(xem hnh 3.6). Mt u im ca danh sch vng trn c u, l n khng bao gi rng.
head





Hnh 3.6. Danh sch vng trn c u.
Trong mc 3.5, chng ta s a ra mt ng dng ca danh sch vng trn c u,
n c s dng biu din cc a thc.
3.4.2. Danh sch hai lin kt.
Khi lm vic vi danh sch, c nhng x l trn mi thnh phn ca danh sch li
lin quan n c thnh phn i trc v thnh phn i sau. Trong cc trng hp nh th,
thun tin, ngi ta a vo mi thnh phn ca danh sch hai con tr : nextleft tr
n thnh phn bn tri v nextright tr n thnh phn bn phi. Khi chng ta c mt
danh sch hai lin kt. Chng ta cn n hai con tr : left tr n thnh phn ngoi cng
bn tri v righ tr n thnh phn ngoi cng bn bn phi danh sch (xem hnh 3.7).
Ta c th khai bo cu trc d liu danh sch hai lin kt nh sau :
type pointer = ^Cell ;
Cell = record
infor : Item ;
nextleft, nextright : pointer ;
end ;
List = record
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 45
left, right : pointer ;
end ;

left right

. . . .
Hnh 3.7. Danh sch hai lin kt.

Vic ci t danh sch hai lin kt, tt nhin tiu tn nhiu b nh hn danh sch
mt lin kt. Song b li, danh sch hai lin kt c nhng u im m danh sch mt lin
kt khng c: khi xem xt mt danh sch hai lin kt ta c th tin ln trc hoc li li
sau.
Cc php ton trn danh sch hai lin kt c thc hin d dng hn danh sch
mt lin kt. Chng hn, khi thc hin php ton loi b, vi danh sch mt lin kt, ta
khng th thc hin c nu khng bit thnh phn i trc thnh phn cn loi b.
Trong khi , ta c th tin hnh d dng php loi b trn danh sch hai lin kt. Hnh
3.8 minh ho cc thao tc loi b thnh phn P trong danh sch hai lin kt. Ta ch cn
thc hin cc php gn sau.
Q : = P^. nextleft ;
Q^ nextright : = P^. nextright ;
Q : = P^. nextright ;
Q^. nextleft : = P^. nextleft ;
dispose (P) ;

P





Hnh 3.8 loi thnh phn P ca danh sch hai lin kt.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 46
Bn c c th t mnh vit cc th tc thc hin cc php ton trn danh sch hai
lin kt (bi tp).
Trong cc ng dng, ngi ta a dng cc danh sch hai lin kt vng trn c u
(xem hnh 3.9). Vi danh sch loi ny, ta c tt c cc u im ca danh sch vng trn
v danh sch hai lin kt.
head




Hnh 3.9 Danh sch hai lin kt vng trn
3.5 ng dng danh sch:
Cc php tnh s hc trn a thc
Trong mc ny ta s xt cc php tnh s hc (cng, tr, nhn, chia) a thc mt
n. Cc a thc mt n l cc biu thc dng
3x
5
- x
3
+ 5x
2
+ 6 (1)
Mi hng thc ca a thc c c trng bi h s (coef) v s m ca x (exp).
Gi s cc hng thc trong a thc c sp xp theo th t gim dn ca s m, nh
trong a thc (1). R rng ta c th nhn nhn a thc nh mt danh sch tuyn tnh cc
hng thc. Khi ta thc hin cc php ton trn cc a thc ta s nhn c cc a thc c
bc khng th on trc c. (bc ca a thc l s m cao nht ca cc hng thc
trong a thc). Ngay c vi cc a thc c bc xc nh th s cc hng thc ca n cng
bin i rt nhiu t mt a thc ny n mt a thc khc. Do phng php tt nht
l biu din a thc di dng mt danh sch lin kt. Thnh phn ca danh sch ny l
bn ghi gm ba trng : coef ch h s, exp ch s m ca x v con tr tr ti thnh
phn i sau. Ta c th m t cu trc d liu biu din mt hng thc ca a thc nh sau
:
type pointer = ^Term ;
Term = record
coef : real ;
exp : integer ;
next : pointer
end ;

V nhng u im ca danh sch vng trn c u (khng phi kim tra danh
sch rng, mi thnh phn u c thnh phn i sau), ta s chn danh sch vng trn c
u biu din a thc. Vi cch chn ny vic thc hin cc php ton a thc s rt
gn. u ca danh sch l thnh phn c bit c exp = -1. Chng hn, hnh 3.10 minh
ho danh sch biu din a thc (1)
P
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 47




Hnh 3.10 Cu trc d liu biu din a thc (1)
Sau y ta s xt php cng a thc P vi a thc Q. Con tr P (Q) tr n u
danh sch vng trn biu din a thc P (Q). thc hin php cng a thc P vi a
thc Q, ta s gi nguyn danh sch P v thay i danh sch Q (xen vo, loi b hay thay
i trng coef) n tr thnh danh sch biu din tng ca hai a thc. Mt con tr P1
chy trn danh sch P, hai con tr Q1, Q2 chy cch nhau mt bc (Q2 = Q1^. Next)
trn danh sch Q. So snh s m ca P1 vi s m ca Q2. C ba kh nng
1. Nu P1^ exp > Q2^ exp th ta xen thnh phn P1 vo danh sch Q trc thnh
phn Q2. Cho P1 chy ti thnh phn sau trong danh sch.
2. Nu P1^ exp = Q2^ exp th ta thm P1^. coef vo Q2^. coef. Sau khi thm Q2^.
coef = 0 th ta loi b thnh phn Q2 khi danh sch Q. Sau ta cho P1 v Q1, Q2 chy
ti cc thnh phn tip theo trong danh sch P v Q.
3. Nu P1^. exp < Q2^ exp th ta cho Q1, Q2 chy ln mt bc.
Qu trnh trn s lp li cho ti khi P1 hoc Q2 i ht danh sch. Trong trng
hp Q2 i ht danh sch Q cn P1 cn gia danh sch P th chuyn cc thnh phn cn
li ca danh sch P vo danh sch Q. Ta c chng trnh sau.

program Add Poly ;
type pointer = ^ Term ;
Term = record
coef : real ;
exp : integer ;
next : pointer ;
end ;
var P, P1 : pointer ;
Q, Q1, Q2

: pointer ;
procedure Read Poly (var P : pointer) ;
{ To ra danh sch vng trn biu din a thc}
var P1, P2 : pointer ;
Traloi : char ;
begin
new (P) ;
P1^. coef : = 0 ;
3
5
-1
3
5
2
6
0
0
-1
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 48
P1^. exp : = -1; {To ra u danh sch}
P1 : = P ;
readln (Traloi) ;
while Traloi = ' C ' do
begin
new (P2) ;
readln (P2^. coef, P2^. exp) ;
P1^. next : = P2 ;
P1 : = P2 ;
readln (traloi)
end ;
P1^. next : P ;
end ;

procedure Insert (P1: pointer ; var Q1, Q2 ; pointer) ;
{Xen thnh phn P1^ vo gia hai thnh phn Q1^, Q2^ trong
danh sch Q}
begin
P1^. next: = Q2 ;
Q1^. next : = P1 ; Q1; = P1
end ;

procedure Delete (var Q1, Q2 : pointer) ;
{Xo thnh phn Q2^ khi danh sch Q, Q2 = Q1^. next}
begin
Q1^. next : = Q2^. next ;
Q2 : = Q1^. next
end ;

procedure WritePoly ( Q : pointer) ;
begin
Q : = Q1^. next ;
if Q^. exp = -1 then writeln ( 'Q = 0' )
else
while Q^. exp > -1 do
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 49
begin
Write (Q^. coef, X' |', Q^. exp) ;
Q : = Q^. next ;
if Q^. exp > -1 then write ('+')
end ;
end ;
begin {chng trnh chnh}
Read Poly (P) ;
Read Poly (Q) ;
P : = P^. next ;
Q1 : = Q ;
Q2 : = Q1^. next ;
while (P^. exp > -1) and ( Q2^. exp > -1) do
begin
if P^. exp > Q2^. exp then
begin
P1 : = P ;
P : = P^. next ;
Insert (P1, Q1, Q2)
end
else if P^. exp = Q2^. exp then
begin
Q2^. coef : = Q2^.coef + P^. coef ;
if Q2^. coef = 0 then Delete (Q1, Q2)
else begin
Q1 : = Q2 ;
Q2 : = Q1^. next ;
end ;
P : = P^. next
end
else begin
Q1 : = Q2 ;
Q2 : = Q1^. next
end
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 50
end ; { ht vng lp while. Nu Q2^. exp = -1 cn P^. exp > -1 th chuyn cc
hng thc cn li ca a thc P vo cui a thc Q}
while P^. exp > -1 do
begin
P1 : = P ;
P : = P^. next ;
Insert (P1, Q1, Q2)
end ;
WritePoly (Q) ;
end ;

3.6. Stack.
3.6.1. Stack.
Trong mc ny chng ta s xt stack, mt dng hn ch ca danh sch, trong
php ton xen mt phn t mi vo danh sch v loi b mt phn t khi danh sch, ch
c php thc hin mt u ca danh sch. u ny c gi l nh ca stack. Ta c
th hnh dung stack nh mt chng a, ta ch c th t thm a mi ln trn a trn
cng, hoc ly a trn cng ra khi chng. Nh vy chic a t vo chng sau cng,
khi ly ra s c ly ra u tin. V th, stack cn c gi l danh sch LIFO (vit tt
ca Last In First Out, ngha l, ci vo sau cng ra u tin).
Ni chung, vi mt m hnh d liu (chng hn, m hnh d liu danh sch, cy,
tp hp, ...), lp cc php ton c th thc hin trn m hnh rt a dng v phong ph.
Song trong cc ng dng ch c mt s nhm php ton c s dng thng xuyn. Khi
xt mt m hnh d liu vi mt tp hp xc nh cc php ton c php thc hin, ta
c mt kiu d liu tru tng (abstract data type). Nh vy stack l mt kiu d liu tru
tng da trn m hnh d liu danh sch, vi cc php ton sau y.
Gi s S l stack cc phn t ca n c kiu Item v x l mt phn t cng kiu
vi cc phn t ca stack.
1. Khi to stack rng (stack khng cha phn t no)
procedure Initialize (var S : stack)
2. Kim tra stack rng
function Emty (var S : stack) : boolean ;
Emty nhn gi tr true nu S rng v false nu S khng rng.
3. Kim tra stack y
function Full (var S : stack) : boolean ;
Full nhn gi tr true nu S y v false nu khng.
4.Thm mt phn t mi x vo nh ca stack
procedure Push (x : Item, var S : stack)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 51
5. Loi phn t nh ca stack v gn gi tr ca phn t ny cho x.
procedure Pop (var S : stack ; var x : Item) ;
Ch rng, php ton Push ch c thc hin nu stack khng y, cn php
ton Pop ch c thc hin nu stack khng rng.
V d : Nu S l stack, S = (a
1
, a
2
, ..., a
n
) v nh ca stack l u bn phi. Khi
thc hin Push (x, S) ta c S = (a
1
, ..., a
n
, x). Nu n > 1 th khi thc hin Pop (S, x) ta
c s = (a
1
, a
2
, ..., a
n-1
) v x = a
n
.
3.6.2. Ci t stack bi mng.
Chng ta c th s dng cc phng php ci t danh sch ci t stack.
Trc ht ta ci t stack bi mng.
Gi s di ti a ca stack l max, cc phn t ca stack c kiu d liu l
Item, nh ca stack c ch bi bin top. Khi stack S=(a
1
,a
2
,...a
n
) c biu din bi
mng nh trong hnh 3.11.

1
2


top

max
Hnh 3.11. Mng biu din stack.

Cu trc d liu biu din stack c th c khai bo nh sau :
const max = N ;
type Stack = record
top : 0 ... max ;
element : array [1 ... max] of Item ;
end ;
var S : Stack ;
Vi cch ci t ny, S l Stack rng, nu S. top = 0, v n s y nu S.top =
max.
Sau y l cc th tc v hm thc hin cc php ton trn Stack.

procedure Initialize ( S : Stack) ;
begin
S.top : = 0
a
1


a
2


a
n




GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 52
end ;

function Emty (var S : Stack) : boolean ;
begin
Emty : = (S.top = 0)
end ;

function Full (var S : Stack) : boolean ;
begin
Full : = (S.top = max)
end ;

procedure Push (x : Item ; var S : Stack ; var OK : boolean) ;
begin
with S do
if Full(S) then OK : = false
else begin
top : = top + 1
element [top] : = x ;
OK : = true
end ;
end ;

procedure Pop (var S : Stack ; var x : Item ; var OK : boolean)
begin
with S do
if Emty (S) then OK : = false
else begin
x : = element [top] ;
top : = top - 1 ;
OK : = true
end ;
end ;

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 53
Trong cc th tc Push v Pop, chng ta a vo tham bin OK ghi li tnh
trng khi thc hin php ton, n nhn gi tr true khi php ton thc hin thnh cng v
false nu tht bi.

3.6.3. Ci t stack bi danh sch lin kt.
Chng ta c th ci t stack bi danh sch lin kt nh chng ta lm i vi
danh sch. nh ca stack l u ca danh sch lin kt. Ta s dung con tr S tr n
nh stack. Hnh 3.12 minh ho danh sch lin kt biu din stack (a
1
, a
2
, ..., a
n
) vi nh
l a
n
.
S

...


Hnh 3.12
Ta c th khai bo cu trc d liu danh sch lin kt biu din stack nh sau :

type Stack = ^Cell
Cell = record
Infor : Item ;
next : Stack :
end ;
var S : Stack ;
Trong cch ci t ny, S l stack rng, nu S = nil. Chng ta gi thit rng, vic
cp pht b nh cho cc bin ng (th tc new trong Pascal) lun lun c thc hin.
Do hm Full lun lun c gi tr false, v php ton Push khng bao gi tht bi.
Sau y l cc th tc v hm thc hin cc php ton trn Stack c ci t bi
danh sch lin kt.

procedure Initialize (var S : Stack) ;
begin
S : = nil
end ;

function Emty (var S : Stack) : boolean ;
begin
if S = nil then Emty : = true
a
n
a
n-1


a
2

a
1 -

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 54
else Emty : = false
end ;

function Full (var S : stack) : boolean ;
begin
Full : = false
end ;

procedure Push (x : Item ; var S : Stack ; var OK : boolean),
var P : ^Cell ;
begin
new (P) ;
P^.infor : = x ;
P^.next : = S ;
S : = P ;
OK : = true
end ;
procedure Pop (var S : Stack ; var x: Item ; var OK : boolean) ;
var P : ^Cell ;
begin
if S = nil then OK : = false
else begin
P : = S ;
x : = S^.infor ;
S : = S^.next ;
OK : = true ;
dispose (P) ;
end ;
end ;
Cc thao tc thc hin cc php ton Push v Pop trn stack c minh ho trong
hnh 3.13a v 3.13b.

S
X
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 55

.




P (a) php ton Push


X

...

(b) Php ton Pop

Hnh 3.13. Cc php ton Push v Pop trn stack.


3.7. Gi tr ca mt biu thc
Trong mc ny, chng ta s trnh by mt ng dng ca stack : xc nh gi tr
ca mt biu thc.
Trong cc chng trnh ta thng vit cc lnh gn
X : = < biu thc >
trong , v phi l mt biu thc (s hc hoc logic). Khi thc hin chng trnh, gp
cc lnh gn, my tnh cn phi xc nh gi tr ca biu thc v gn kt qu cho bin X.
Do vn t ra l, lm th no thit k c thut ton xc nh gi tr ca biu thc.
Ta s xt cc biu thc s hc. Mt cch khng hnh thc, biu thc s hc l mt
dy cc ton hng (hng, bin hoc hm) ni vi nhau bi cc php ton s hc. Trong
cc biu thc c th cha cc du ngoc trn. n gin ta ch xt cc biu thc s hc
cha cc php ton hai ton hng +,-* v /. Khi tnh gi tr ca biu thc, cc php ton
trong ngoc c thc hin trc, ri n cc php ton * v / ,sau n cc php ton
+ v - . Trong cng mc u tin, cc php ton c thc hin t tri sang phi. Chng
hn, xt biu thc
5 + 8 / ( 3 + 1) * 3
Gi tr ca biu thc ny c tnh nh sau :
5 + 8/(3+1)*3 = 5+8/4 * 3 = 5+2 * 3 = 5+6 = 11
Sau y ta a ra thut ton xc nh gi tr ca mt biu thc s hc. Thut ton
ny gm hai giai on.

.

x


.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 56
1. Chuyn biu thc s hc thng thng (dng infix) sang biu thc s hc Ba
lan postfix.
2. Tnh gi tr ca biu thc s hc Balan postfix
Trc ht ta cn xc nh th no l biu thc s hc Balan postfix. Trong cch
vit thng thng, php ton c t gia hai ton hng, chnghn, a + b, a * b. Cn
trong cch bit Balan, php ton c t sau cc ton hng. Chng hn, cc biu thc a
+ b, a * b trong cch vit Balan c vit l ab +, ab *. Mt s v d khc.
Biu thc thng thng Biu thc Balan
a * b/ c ab * c /
a * (b + c) - d/e abc + * de / -
Cn lu rng, biu thc s hc Balan khng cha cc du ngoc, n ch gm cc
ton hng v cc du php ton.
Sau y ta s trnh by thut ton xc nh gi tr ca biu thc s hc Balan.
Trong thut ton ny, ta s s dng mt stack S lu gi cc ton hng v cc kt qu
tnh ton trung gian. Thut ton nh sau :
1. c ln lt cc thnh phn ca biu thc Balan t tri sang phi. Nu gp ton
hng th y n vo stack. Nu gp php ton, th rt hai ton hng nh stack ra v
thc hin php ton ny. Kt qu nhn c li y vo stack.
2. Lp li qu trnh trn cho ti khi ton b biu thc c c qua. Lc nh
ca stack cha gi tr cc biu thc.
Gi s E l biu thc s hc Balan no . Ta a thm vo cui biu thc k
hiu # nh du ht biu thc. Trong thut ton tnh gi tr ca biu thc E, ta s s
dng cc th tc sau.
Th tc Read (E, z). c mt thnh phn ca biu thc E v gn n cho z. u
c c chuyn sang phi mt v tr.
Th tc Push (x,S). y x vo nh stack S.
Th tc Pop(S,x). Loi phn t nh ca stack v gn n cho x.
Ta c th m t thut ton xc nh gi tr ca biu thc s hc Balan bi th tc
sau.

procedure Eval (E : biu thc) ;
begin
Read (E,z) ;
while z < > # do
begin
if z l ton hng then Push (z, S)
else begin
Pop (S,y) ; {Rt cc ton hng nh stack}
Pop (S,x) ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 57
w : = x z y; {Thc hin php ton z vi cc
ton hng x v y }
Push (w,s)
end ;
Read (E,z)
end ;
end ;
Sau y chng ta s thit k thut ton chuyn biu thc s hc thng thng sang
biu thc s hc Balan. Khc vi thut ton tnh gi tr ca biu thc s hc Balan, trong
thut ton ny, chng ta s s dng stack S lu cc du m ngoc (v cc du php
ton + , -, * v /. Ta a vo k hiu $ nh du y ca stack. Khi nh stack cha $,
c ngha l stack rng.
Trn tp hp cc k hiu $, , +, -, *, / ta xc nh hm Pri (hm u tin) nh sau
: Pri ($) < Pri ( ) < Pri (+) = Pri (-) < Pri (*) = Pri(/).
Gi s ta cn chuyn biu thc s hc thng thng E sang biu thc s hc Balan
E1. Ta thm vo bn phi biu thc E k hiu # nh du ht biu thc.
Thut ton gm cc bc sau :
1. c mt thnh phn ca biu thc E (c ln lt t tri sang phi) Gi s
thnh phn c c l x.
1.1. Nu x l ton hng th vit n vo bn phi biu thc E1.
1.2. Nu x l du m ngoc (th y n vo stack
1.3. Nu x l mt trong cc du php toan + , -, *, / th
a. Xt phn t y nh stack
b. Nu Fri (y) > Fri(x) th loi y khi stack, vit y vo bn phi
E1 v quay li bc a)
c. Nu Fri (y) < Fri(x) th y x vo stack
1.4. Nu x l du ng ngoc ) th
a. Xt phn t y nh ca stack
b. Nu y l du php ton th loi y khi stack, vit y vo bn
phi E1 v quay li a)
c. Nu y l du m ngoc (th loi n khi stack
2. Lp li bc 1 cho ti khi ton b biu thc E c c qua.
3. Loi phn t nh stack v vit n vo bn phi E1. Lp li bc ny cho ti
khi stack rng.
Trong thut ton ta s dng cc th tc sau.
Read (E,x). c mt thnh phn ca biu thc E v gn cho : x
Write (x,E1). Vit x vo bn phi biu thc Balan E1.
Push (x,S). y x vo stack
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 58
Pop (S,x). Loi phn t nh stack v gn cho x
Gi phn t nh ca stack l top
Chng ta m t thut ton chuyn biu thc s hc thng thng E sang biu thc
s hc Balan E1 bi th tc sau.

procedure Postfix (E: biu-thc ;var E1 : biu-thc) ;
begin
Push($,S) ;
Read (E,x) ;
while x < > # do
begin
if x l ton hng then Write (x,E1)
else if x = (then Push (x,S)
else if x = ) then
begin
while top < > (do
begin
Pop(S,y) ;
Write (y, E1)
end ;
Pop (S,y) ;
end
else begin
while Pri(top) >= Pri(x) do
begin
Pop (S,y) ;
Write (y, E1)
end ;
Push (x,S)
end ;
Read (E,x)
end ; { ht lnh while x < > # }
write (#, E1)
end ;

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 59
V d. Xt biu thc :
E = a * (b + c) - d #
Kt qu cc bc thc hin thut ton c cho trong bng sau :

Thnh phn trong biu thc E Stack Biu thc Balan E1
$
a $ a
* $* a
$* a
b $* ab
+ $*+ ab
c $*+ abc
$* abc+
$* abc+
- $ abc+*
$- abc +*
d $- abc+*d
# $ abc+*d-
abc + * d- #
3.7 Hng.
3.7.1. Hng.
Mt kiu d liu tru tng quan trng khc c xy dng trn c s m hnh d
liu danh sch l hng. Hng l mt danh sch vi hai php ton quan trng nht l thm
mt phn t mi vo mt u danh sch (u ny c gi l cui hng) v loi phn t
khi danh sch mt u khc (u ny gi l u hng). Trong i sng hng ngy, ta
thng xuyn gp hng. Chng hn, hng ngi ch i c phc v (ch mua v tu,
chng hn). Ngi ta ch c th i vo hng cui hng, ngi c phc v v ra khi
hng l ngi u hng tc l ai vo hng trc s c phc v trc. V vy, hng
cn c gi l danh sch FIFO (vit tt ca First In First Out, ngha l, ai vo u tin ra
u tin).
Sau y l tp hp y cc php ton m ta c th thc hin trn hng.
Gi s Q l mt hng cc i tng no c kiu d liu Item v x l mt phn
t cng kiu vi cc i tng ca hng.
1. Khi to hng rng.
procedure Initialize (var Q : Queue) ;
2. Kim tra hng rng
function Emty (var Q : Queue) : boolean ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 60
Emty nhn gi tr true nu Q rng v false nu khng
3. Kim tra hng y
function Full (var Q : Quen) : boolean ;
Full nhn gi tr true nu Q y v false nu khng
4. Thm mt phn t mi x vo cui hng
procedure AddQueue ( x : Item ; var Q : Queue) ;
5. Loi phn t u hng, gi tr ca phn t ny c lu vo x.
procedure DeleteQueue (var Q : Queue, var x : Item)

3.7.2. Ci t hng bi mng.
Ta c th biu din hng bi mng v s dng hai ch s front ch v tr u hng
v rear ch v tr cui hng.
C th khai bo cu trc d liu biu din hng nh sau
const max = N
type Queue = record
front, rear : 0 ... max ;
element : array [1 ... m] of Item ;
end ;
var Q : Queue ;
Hnh 3.14 minh ho mng biu din hng.
rng rng



max
front rear

Hnh 3.14. Mng biu din hng.

Trong cch ci t ny, hng rng nu rear = 0 v hng y nu rear = max.
Sau y l cc th tc v hm thc hin cc php ton trn hng

procedure Initialize (var Q : Queue) ;
begin
with Q do

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 61
begin
front : = 1 ;
rear : = 0 ;
end ;
end ;

function Emty (var Q : Queue) : boolean ;
begin
if Q.rear = 0 then Emty : = true
else Emty : = false
end ;
function Full (var Q : Queue) : boolean ;
begin
if Q.rear = max then Full : = true
else Full : = false
end ;

procudure AddQueue (x : Item ; var Q:Queue ; var OK : boolean) ;
begin
with Q do
if rear = max then OK : = false
else begin
rear := rear + 1
element [rear] : = x ;
OK : = true
end ;
end ;

procedure DeleteQueue (var Q : Queue ; var x : Item ;var OK : boolean) ;
begin
with Q do
if rear = 0 then OK : = false
else begin
x : = element [front] ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 62
if front = rear then
begin
front : = 1 ;
rear : = 0
end else front : = front + 1 ;
OK : = true
end ;
end ;
Phng php ci t hng bi mng vi hai ch s (front ch u hng, rear ch
cui hng) c yu im ln. Nu php loi b khng thng xuyn lm cho hng rng,
th cc ch s front v rear s tng lin tc, nhanh chng vt qu c ca mng. Hng s
tr thnh y, mc du cc v tr trng trong mng c th vn cn nhiu !
C th khc phc yu im trn bng cch sau. Ta ch s dng mt ch s rear
ch cui hng, cn phn t u hng lun lun c xem l thnh phn u tin ca
mng, tc l ta lun lun coi front = 1.
type Queue = record
rear : 0 ... max ;
element : array[1...max] of Item ;
end ;
Tuy nhin cch ci t ny li khng thun tin cho php ton loi phn t u
hng, bi v mi ln loi b ta phi dn tt c cc phn t cn li ca hng ln mt v tr.

3.7.3. Ci t hng bi mng vng trn.
Trong trng hp s phn t trong hng khng bao gi vt qu mt s c nh N
no , phng php tt nht l biu din hng bi mng vng trn. l mng vi ch
s chy trong min 1... max, vi mi i = 1,2,..., max - 1, thnh phn th i ca mng i
trc thnh phn th i + 1 cn thnh phn th max i trc thnh phn u tin, tc l
cc thnh phn ca mng c xp thnh vng trn (xem hnh 3.15)


front rear

;..
M


max-1
2 1 max
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 63

Hnh 3.15. Mng vng trn biu din hng.
Khi biu din hng bi mng vng trn, bit khi no hng y, khi no hng
rng ta cn a thm vo bin count m s phn t trong hng. Chng ta c khai bo
sau.
const max = N
type Queue = record
count : 0 .. max
front, rear : 0 .. max
element : array [1 .. max] of Item
end ;
var Q : Queue ;

Trong cch ci t ny, iu kin hng Q rng l Q.count = 0 v n y nu
Q.count = max.
Khi lm vic vi mng vng trn, ta cn lu rng, thnh phn u tin ca mng
i sau thnh phn th max. Sau y chng ta s vit cc th tc AddQueue v
DeleteQueue cc th tc khc ginh li cho bn c.
procedure AddQueue (x : Item ; var Q : Queue ; ok : boolean) ;
begin
with Q do
if count = max then ok : = false
else begin
if rear = max then rear : = 1
else rear : = rear + 1 ;
element [rear] : = x ;
count : = count + 1 ;
Ok : = true
end
end ;

procedure DeleteQueue (var Q : Queue ; var x : Item ; var Ok : boolean) ;
begin
with Q do
if count = 0 then Ok : = false
else begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 64
x : = element [front] ;
if front = rear then
begin
front : = 1 ;
rear : = 0
end else
if front = max then front : = 1
else front : = front + 1 ;
count : = count - 1 ;
Ok : = true ;
end`
end ;

3.7.4 Ci t hng bi danh sch lin kt.
Cng nh stack, hng c cu trc ton hc nh danh sch, nhng ch c php
thc hin c mt s php ton c bit. Do , ta cng c th s dng danh sch lin
kt biu din d hng. Ta cn a vo hai con tr, mt con tr tr n u hng mt
con tr tr n cui hng. Ta c th m t cu trc d liu danh sch lin kt biu din
hng nh sau.

type pointer = ^ Cell
Cell = record
infor : Item ;
next : pointer ;
end ;
Queue = record
front ;
rear : pointer ;
end ;
var Q : Queue ;
Hnh 3.16 minh ho mt hng c biu din bi danh sch lin kt.
front rear



Hnh 3.16 Danh sch lin kt biu din hng.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 65
Trong cch ci t ny, hng c xem l khng khi no y (ta gi thit l, lun
lun c khng gian nh cp pht cho cc thnh mi cn c a vo hng). iu
kin hng rng l Q.front = nil
Sau y l cc th tc v hm thc hin cc php ton trn hng.

procedure Initialize (var Q : Queue) ;
begin
Q. front : = nil
end ;

function Emty (var Q : queue) : boolean ;
begin
if Q.front = nil then Emty : true
else Emty : false
end ;

function Full (var Q : Queue ) boolean ;
begin
Full : = false
end ;

procedure AddQueue (x : Item; var Q : Queue ; var Ok : boolean)
var P : pointer ;
begin
new (P) ;
P^ . infor : = X ;
P^. next : = nil ;
with Q do
if front = nil then
begin
front : = P ;
rear : = P ;
end else
begin
rear^. next : = P ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 66
rear : = P
end ;
Ok : true
end ;
procedure DeleteQueue (var Q : Queue ; var x : Item ; var Ok : boolean);
var P : pointer ;
begin
with Q do
if front = nil then Ok : = false
else begin
P : = front ;
x : = front^.infor ;
front : = front^.next ;
Ok : = true ;
dispose (P)
end
end ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 67
Chng 4
c y
Trong chng ny chng ta s nghin cu m hnh d liu cy. Cy l mt cu
trc phn cp trn mt tp hp no cc i tng. Mt v d quen thuc v cy, l
cy th mc. Cy c s dng rng ri trong rt nhiu vn khc nhau. Chng hn, n
c p dng t chc thng tin trong cc h c s d liu, m t cu trc c php
ca cc chng trnh ngun khi xy dng cc chng trnh dch. Rt nhiu cc bi ton
m ta gp trong cc lnh vc khc nhau c quy v vic thc hin cc php ton trn
cy. Trong chng ny chng ta s trnh by nh ngha v cc khi nim c bn v cy.
Chng ta cng s xt cc phng php ci t cy v s thc hin cc php ton c bn
trn cy. Sau chng ta s nghin cu k mt dng cy c bit, l cy tm kim nh
phn.
4.1. Cy v cc khi nim v cy
Hnh 4.1 minh ho mt cy T. l mt tp hp T gm 11 phn t, T={a, b, c, d,
e, f, g, h, i, j, k}. Cc phn t ca T c gi l cc nh ca cy T. Tp T c cu trc nh
sau. Cc nh ca T c phn thnh cc lp khng ct nhau : lp th nht gm mt nh
duy nht a, nh ny gi l gc ca cy; lp th hai gm cc nh b, c ; lp th ba gm
cc nh d, e, f, g, h v lp cui cng gm cc nh i, j, k, mi nh thuc mt lp (tr
gc), c mt cung duy nht ni vi mt nh no thuc lp k trn. (Cung ny biu
din mi quan h no ).

a

b c



d e f g h


i j k

Hnh 4.1 Biu din hnh hc mt cy
Trong ton hc c nhiu cch nh ngha cy. y chng ta a ra nh ngha
quy v cy. nh ngha ny cho php ta xut pht t cc cy n gin nht ( cy ch c
mt nh) xy dng nn cc cy ln hn.
Cy (cy c gc) c xc nh quy nh sau.
1. Tp hp gm mt nh l cy. Cy ny c gc l nh duy nht ca n.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 68
2. Gi s T
1
, T
2
, ... , T
k
(k 1) l cc cy c gc tng ng l r
1
,r
2
...,r
k.
Cc cy T
i

(i = 1, 2,...k) , khng khng ct nhau tc l T
i
T
j
= | vi i = j. Gi s r l mt nh mi
khng thuc cc cy Ti (i = 1, 2,... , k). Khi , tp hp T gm nh r v tt c cc nh
ca cy T
i
(i = 1, 2, ... , k) lp thnh mt cy mi vi gc r. Cc cy T
i
(i = 1, 2, ... , k)
c gi l cy con ca gc r. Trong biu din hnh hc ca cy T, mi nh r
i
(i =1, 2, ...
,k) c cung ni vi gc r (xem hnh 4.2)

r


r
1
r
2
r
k


T
1
T
2
T
k



Hnh 4.2 Cy c gc r v cc cy con ca gc T
1
, T
2
, ... , T
k
.
Cha, con, ng i.
T nh ngha cy ta suy ra rng, mi nh ca cy l gc ca cc cy con ca n.
S cc cy con ca mt nh gi l bc ca nh . Cc nh c bc khng c gi l l
ca cy.
Nu nh b l gc ca mt cy con ca nh a th ta ni nh b l con ca nh a
v a l cha ca b. Nh vy, bc ca mt nh l s cc nh con ca n, cn l l nh
khng c con. Cc nh c t nht mt con c gi l nh trong. Cc nh ca cy hoc
l l hoc l nh trong.
Cc nh c cng mt cha c gi l anh em. Mt dy cc nh a
1
, a
2
, ... a
n
(n >
1), sao cho a
i
(i = 1, 2, ... , n-1) l cha ca a
i+1
c gi l ng i t a
1
n a
n
. di
ca ng i ny l n-1. Ta c nhn xt rng, lun lun tn ti mt ng i duy nht t
gc ti mt nh bt k trong cy.
Nu c mt ng i t nh a n nh b c di k > 1, th ta ni a l tin thn
ca b v b l hu th ca a.
V d. Trong cy hnh 4.1, nh c l cha ca nh f, g, h. Cc nh d, i, j, k v h
l l, cc nh cn li l nh trong. a, c, g, k l ng i c di 3 t a n k. nh b l
tin thn ca cc nh d, e, i, j.
Cy con.
T nh ngha cy ta c, mi nh a bt k ca cy T l gc ca mt cy no ,
ta gi cy ny l cy con ca cy T. N gm nh a v tt c cc nh l hu th ca a.
Chng hn, vi cy T trong hnh 4.1, T
1
= {c, f, g, h, k} l mt cy con
cao, mc.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 69
Trong mt cy, cao ca mt nh a l di ca ng i di nht t a n
mt l. cao ca gc c gi l cao ca cy. Mc ca nh a l di ca ng
i t gc n a. Nh vy gc c mc 0.
V d. Trong cy hnh 4.1, nh b c d cao l 2, cy c cao l 3. Cc nh b,
c c mc 1 ; cc nh d, e, f, g, h c mc 2, cn mc ca cc nh i, j, k l 3.
Cy c sp.
Trong mt cy, nu cc cy con ca mi nh c sp theo mt th t nht nh,
th cy c gi l cy c sp. Chng hn, hnh 4.3 minh ho hai cy c sp khc
nhau,

a a
=

b c c b


Hnh 4.3. Hai cy c sp khc nhau

Sau ny chng ta ch quan tm n cc cy c sp. Do khi ni n cy th
cn c hiu l cy c sp.
Gi s trong mt cy c sp T, nh a c cc con c sp theo th t : b
1
, b
2
,
..., b
k
(k > 1). Khi ta ni b
1
l con trng ca a, v b
i
l anh lin k ca b
i+1
(b
i+1
l em
lin k ca b
i
), i = 1,2, ..., k-1. Ta cn ni, vi i < j th b
i
bn tri b
j
(b
j
bn phi b
i
).
Quan h ny c m rng nh sau. Nu a bn tri b th mi hu th ca a bn tri
mi hu th ca b.
V d. Trong hnh 4.1, f l con trng ca c, v l anh lin k ca nh g. nh i
bn tri nh g.
Cy gn nhn.
Cy gn nhn l cy m mi nh ca n c gn vi mt gi tr (nhn) no .
Ni mt cch khc, cy gn nhn l mt cy cng vi mt nh x t tp hp cc nh ca
cy vo tp hp no cc gi tr (cc nhn). Chng ta c th xem nhn nh thng tin
lin kt vi mi nh ca cy. Nhn c th l cc d liu n nh s nguyn, s thc,
hoc cng c th l cc d liu phc tp nh bn ghi. Cn bit rng, cc nh khc nhau
ca cy c th c cng mt nhn.
Rng.
Mt rng F l mt danh sch cc cy :
F = (T
1
, T
2
, ..., T
n
)
trong T
i
(i = 1, ..., n) l cy (cy c sp)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 70
Chng ta c tng ng mt - mt gia tp hp cc cy v tp hp cc rng. Tht
vy, mt cy T vi gc r v cc cy con ca gc theo th t t tri sang phi l T
1
, T
2
, ...,
T
n
, T = (r, T
1
, T
2
, ..., T
n
) tng ng vi rng F = (T
1
, T
2
, ..., T
n
) v ngc li.

4.2. Cc php ton trn cy.
Trong mc 1 chng ta trnh by cu trc ton hc cy. c mt m hnh d
liu cy, ta cn phi xc nh cc php ton c th thc hin c trn cy. Cng nh vi
danh sch, cc php ton c th thc hin c trn cy rt a dng v phong ph. Trong
s , c mt s php ton c bn c s dng thng xuyn thc hin cc php ton
khc v thit k cc thut ton trn cy.
4. 2.1. Cc php ton c bn trn cy.
1. Tm cha ca mi nh.
Gi s x l nh bt k trong cy T. Hm Parent(x) xc nh cha ca nh x.
Trong trng hp nh x khng c cha (x l gc) th gi tr ca hm Parent (x) l mt k
hiu c bit no khc vi tt c cc nh ca cy, chng hn $. Nh vy nu parent
(x) = $ th x l gc ca cy.
2. Tm con bn tri ngoi cng (con trung) ca mi nh.
Hm EldestChild (x) cho ta con trng ca nh x. Trong trng hp x l l (x
khng c con) th EldestChild (x) = $.
3. Tm em lin k ca mi nh.
Hm NextSibling (x) xc nh em lin k ca nh x. Trong trng hp x khng
c em lin k (tc x l con ngoi cng bn phi ca mt nh no ) th NextSibling(x)
= $.
V d. Gi s T l cy cho trong hnh 4.1. Khi Parent(e) = b, Parent(a) = $,
EldestChild (c) = f, EldestChild (k) = $, NextSibling (g) = h, NextSibling (h) = $.
4.2.2. i qua cy (duyt cy).
Trong thc tin chng ta gp rt nhiu bi ton m vic gii quyt n c qui v
vic i qua cy (cn gi l duyt cy), "thm" tt c cc nh ca cy mt cch h thng.
C nhiu phng php i qua cy. Chng hn, ta c th i qua cy ln lt t mc
0, mc 1,... cho ti mc thp nht. Trong cng mt mc ta s thm cc nh t tri sang
phi. V d, vi cy trong hnh 4.1, danh sch cc nh ln lt c thm l (a, b, c, d, e,
f, g,h, i, j, k). l phng php i qua cy theo b rng.
Tuy nhin, ba phng php i qua cy theo cc h thng sau y l quan trng
nht : i qua cy theo th t Preorder, Inorder v Postorder. Danh sch cc nh ca cy
theo th t Preordor, Inorder, v Postorder (gi tt l danh sch Preorder, Inorder, v
Postorder) c xc nh qui nh sau :
1. Nu T l cy gm mt nh duy nht th cc danh sch Preordor, Inorder v
Postorder ch cha mt nh .
2. Nu T l cy c gc r v cc cy con ca gc l T
1
, T
2
, ..., T
k
(hnh 4.2) th
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 71
2a. Danh sch Preorder cc nh ca cy T bt u l r, theo sau l cc nh ca
cy con T
1
theo th t Preordor, ri n cc nh ca cy con T
2
theo th t Preorder, ...,
cui cng l cc nh ca cy con T
k
theo th t Preordor.
2b. Danh sch Inorder cc nh ca cy T bt u l cc nh ca cy con T
1
theo
th t Inordor, ri n gc r, theo sau l cc nh ca cc cy con T
2
, ... T
k
theo th t
Inordor.
2c. Danh sch Postorder cc nh ca cy T ln lt l cc nh ca cc cy con
T
1
, T
2
,...T
k
, theo th t Postorder sau cng l gc r.
V d, khi i qua cy trong hnh 4.1 theo th t Preordor ta c danh sch cc
nh l (a, b, d, e, i, j, c, f, g, k, h). Nu i qua cy theo th t Inorder, ta c danh sch (d,
b, i, e, j, a, f, c, k, g, h). Cn danh sch Postorder l (d, i, j, e, b, f, k, g, h, c, a).
Phng php i qua cy theo th t Preorder cn c gi l k thut i qua cy
theo su. l mt k thut quan trng thng c p dng tm kim nghim ca
cc bi ton. Gi l i qua cy theo su, bi v khi ta ang mt nh x no ca
cy (chng hn, nh b trong cy hnh 4.1), ta c gng i su xung nh cn cha c
thm ngoi cng bn tri chng no c th c (chng hn, nh d trong cy hnh 4.1)
thm nh . Nu tt c cc nh con ca x c thm (tc l t x khng th i su
xung c) ta quay ln tm n cha ca x. Ti y ta li c gng i su xung nh con
cha c thm. Chng hn, trong cy hnh 4.1, ta ang nh f, ti y khng th i
su xung, ta quay ln cha ca f l nh c. Ti c c th i su xung thm nh g, t g li
c th i su xung thm nh k. Qu trnh trn c tip tc cho ti khi no ton b cc
nh ca cy c thm.
i lp vi k thut i qua cy theo su l k thut i qua cy theo b rng m
chng ta trnh by. Trong k thut ny, khi ang thm nh x no ca cy, ta i
theo b ngang sang bn phi tm n em lin k ca x thm. Nu x l nh ngoi cng
bn phi, ta i xung mc sau thm nh ngoi cng bn tri, ri li tip tc i theo b
ngang sang bn phi.
Sau y chng ta s trnh by cc th tc i qua cy theo cc th t Preorder,
Inorder, Postorder v i qua cy theo b rng.
S dng cc php ton c bn trn cy v nh ngha qui ca th t Preorder,
chng ta d dng vit c th tc qui i qua cy theo th t Preorder. Trong th tc,
chng ta s s dng th tc Visit (x) (thm nh x) n c ci t tu theo tng ng
dng. Cc bin A, B trong th tc l cc nh (Node) ca cy.
procedure Preorder ( A : Node) ;
{Th tc qui i qua cy gc A theo th t Preorder}
var B : Node
begin
Visit (A) ;
B : = EldestChild (A)
while B < > $ do
begin
Preorder ( B) ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 72
B : = NexSibling (B)
end ;
end ;
Mt cch tng t, ta c th vit c cc th tc qui i qua cy theo th t
Inorder v Postorder.
procedure Inorder ( A : Node) ;
{Th tc qui i qua cy gc A theo th t Inorder }
var B : Node ;
begin
B := EldestChild (A) ;
if B < > $ then begin Inorder (B) : B : = NextSibling (B) end ;
Visit (A) ;
while B < > $ do
begin
Inorder (B) ;
B : = NextSibling (B)
end ;
end ;

procedure Postorder (A : Node) ;
{Th tc qui i qua cy gc A theo th t Postorder}
var B : Node ;
begin
B : = EldestChild (A) ;
while B < > $ do
begin
Postorder (B) ;
B : = NextSibling (B)
end ;
Visit (A)
end ;
Chng ta cng c th vit c cc th tc khng qui i qua cy theo cc th
t Preordor, Inorder v Postorder. Chng ta s vit mt trong ba th tc (cc th tc
khc ginh li cho c gi). T tng c bn ca thut ton khng qui i qua cy theo
th t Preorder l nh sau. Chng ta s s dng mt stack S lu gi cc nh ca cy.
Nu mt thi im no ta ang thm nh x th stack s lu gi ng i t gc
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 73
n x, gc y ca stack cn x nh stack. Chng hn, vi cy trong hnh 4.1, nu ta
ang thm nh i, th stack s lu (a, b, e, i) v i nh stack
procedure Preorder ( A : Node) ;
{Th tc khng qui i qua cy theo th t Preorder}
var B : Node ;
S : Stack ;
begin
Intealize (S) ; {khi to stack rng}
B : = A ;
while B < > $ do
begin
Visit (B) ;
Push (B, S) ; {y B vo stack}
B : = EldestChild (B)
end ;
while not Empty (S) do
begin
Pop (S,B) ;{loi phn t nh stack v gn cho B]
B : = NexSibling (B) ;
if B < > $ then
while B < > $ do
begin
Visit (B) ;
Push (B, S) ;
B : = EldestChild (B)
end ;
end ;
end ;

Sau y chng ta s trnh by thut ton i qua cy theo b rng, chng ta s s
dng hng Q lu gi cc nh theo th t c thm, u hng l nh ngoi cng
bn tri m ta cha thm cc con ca n, cn cui hng l nh ta ang thm. Chng
hn, vi cy trong hnh 4.1, nu ta ang thm nh i th trong hng s cha cc nh (f,
g, h, i) trong f u hng v i cui hng. Khi loi mt phn t u hng, chng ta
s ln lt thm cc con ca n (nu c) v khi thm nh no th a nh vo cui
hng. Chng ta c th tc sau

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 74
procedure BreadthTraverse ( A : Node) ;
{Th tc i qua cy gc A theo b rng }
var B : node ;
Q : Queue ;
begin
Initialize (Q) ; {khi to hng rng}
Visit (A) ;
Add (A, Q) ; {a gc A vo hng Q}
while not Empty (Q) do
begin
Delete (Q, B) ; {loi phn t u hng v gn cho B}
B : = EldestChild (B) ;
while B < > $ do
begin
Visit (B) ;
Add (B, Q) ;
B : = NextSibling (B)
end ;
end ;
end ;

4.3. Ci t cy.
Trong mc ny chng ta s trnh by cc phng php c bn ci t cy v
nghin cu kh nng thc hin cc php ton c bn trn cy trong mi cch ci t.
4.3.1. Biu din cy bng danh sch cc con ca mi nh. Phng php
thng dng biu din cy l, vi mi nh ca cy ta thnh lp mt danh sch cc nh
con ca n theo th t t tri sang phi.
1. Ci t bi mng.
Trong cch ci t ny, ta s s dng mt mng lu gi cc nh ca cy. Mi
thnh phn ca mng l mt t bo cha thng tin gn vi mi nh v danh sch cc
nh con ca n. Danh sch cc nh con ca mt nh c th biu din bi mng hoc
bi danh sch lin kt. Tuy nhin, v s con ca mi nh c th thay i nhiu, cho nn
ta s s dng danh sch lin kt. Nh vy mi t bo m t nh ca cy l mt bn ghi
gm hai trng : trng infor cha thng tin gn vi nh, trng Child l con tr ti
danh sch cc con ca nh . Gi s cc nh ca cy c nh s t 1 n N vi cch
ci t ny, ta c th khai bo cu trc d liu biu din cy nh sau :
const N = ... ; { N l s ln nht cc nh m cy c th c }
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 75
type pointer = ^ Member :
Member = record
id : 1..N ;
next : pointer
end ;
Node = record
infor : item ;
child : pointer
end ;
Tree = array [1 ... N] of Node ;

Trong khai bo trn, Member biu din cc thnh phn ca danh sch cc con,
cn Node biu din cc nh ca cy. Vi cch ci t ny, cu trc d liu biu din cy
trong hnh 4.4a c minh ho trong hnh 4.4b.
Ta c nhn xt rng, trong cch ci t ny, vi mi nh k ta xc nh ngay con
trng ca n. Chng hn, vi cy trong hnh 4.4b, con trng ca nh 3 l nh 6, con
trng ca nh 5 l 9, cn nh 6 khng c con. Php ton tm con trng EldestChild
(k) c th c m t bi hm sau.

function EldestChild ( k : 1 ...N ; T : Tree) : 0 ...N ;
var P : pointer ;
begin
if T[k] < > nil then
begin
P : = T[k]. child ;
EldestChild : = P^. id ;
end else EldestChild : = 0
end ;
Tuy nhin trong cch ci t ny, vic tm cha v em lin k ca mi nh li
khng n gin. Chng hn, tm cha ca nh k, ta phi duyt cc danh sch cc con
ca mi nh. Nu pht hin ra trong danh sch cc con ca nh m c cha k th Parent
(k) = m. Hm Parent (k) c xc nh nh sau :
function Parent (k : 1 ...N ; T : Tree) : 0 ...N ;
var P : pointer ;
i : 1 ... N ;
found : boolean ;
begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 76
i : = 1 ;
found : = false ;
while ( i < = N) and (not found) do
begin
P : = T[i].child ;
while (P < > nil) and (not found) do
if P^.id = k then
begin
Parent : = i :
found : = true ;
end else P : = P^.next ;
i: = i + 1
end ;
if not found then Parent : = 0 ;
end ;
Mt cch tng t (duyt cc danh sch cc con), ta cng c th tm c em lin
k ca mi nh. M t chi tit hm NextSibling c li xem nh bi tp.

A 1


B 2 C 3

D 4 E 5 F 6 G 7 H 8

I 9 K 10 M 11
(a)
infor child id next
1
2
3
4
5
6
7
A
B
C
D
E
F
G
H
I
K
M
2
4
6
9
11
3
5
7 8
10
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 77
8
9
10
11

(b)
Hnh 4.4 Cu trc d liu biu din cy

2. Ci t bi con tr.
Nu khng dng mng lu gi cc nh ca cy, ta c th s dng cc con tr
tr ti cc nh ca cy. Ti mi nh, ta s s dng mt danh sch cc con tr tr ti cc
con ca n, danh sch ny c ci t bi mng cc con tr. Mt con tr Root c s
dng tr ti gc ca cy. Ta c th khai bo cu trc d liu biu din cy trong cch
ci t ny nh sau.
const K = ..... ; {K l s ti a cc con ca mi nh}
type pointer = ^Node ;
Note = record
infor : item ;
child : array [1...K] of pointer
end ;
var Root : pointer ;

Vi cch ci t ny, cu trc d liu biu din cy trong hnh 4.4a c minh
ho trong hnh 4.5.

Root










A
-
B
-

C
E F
- - -
G
- -
H
- - -
D
- - -

I
- - -

K
- - -
M
- - -
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 78


Hnh 4.5 Cu trc d liu biu din cy

Gi s P l mt con tr tr ti mt nh no trong cy, ta s gi nh ny l
nh P. Sau y ta s xt xem cc php ton tm con trng ca n EldesChild (P), tm
cha ca n Parent (P) v tm em lin k NexSibling (P) c thc hin nh th no. D
dng thy rng, cng nh trong cch ci t bi mng, ta c th xc nh c ngay con
trng ca mt nh. Bn c t vit ly hm EldestChild. T tng ca thut ton tm
cha ca nh P cng khng c g khc trc, khi cy ci t bi mng, tc l ta cng phi
duyt cc nh con ca mi nh. Song trc kia, khi cc nh ca cy c lu trong
mng, vic i ln lt qua cc nh ca cy xt cc con ca n c thc hin rt d
dng. Cn y ta phi s dng mt hng (Queue) H lu cc nh c xt. u
tin hng cha gc Root ca cy. Ti mi thi im ta s loi nh Q u hng ra khi
hng v xt cc con ca n. Nu mt trong cc nh con ca Q l P th Parent (P) = Q,
trong trng hp ngc li ta s a cc nh con ca Q vo cui hng. Hm Parent c
xc nh nh sau.

function Parent (P : pointer ; Root : pointer) : pointer ;
var Q, R : pointer ;
H : Queue ;
found : boolean ;
begin
Initialize (H) ; {khi to hng rng H}
Addqueue (Root, H) ; {a Root vo hng}
found : = false ;
while (not Emty (H) and (not found) do
begin
DeleteQueue (H, Q) ; {Loi Q khi u hng}
i : = 0 ;
repeat
i : = i + 1 ;
R : = Q^. child [i] ;
if R < > nil then
if R = P then
begin
Parent : = Q
found : = true
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 79
end else AddQueue (R, H)
until found or (R = nil) or (i = N)
end ;
if not found then Parent : = nil
end ;

Mt cch hon ton tng t, ta c th vit c hm tm em lin k NextSibling.
4.3.2. Biu din cy bng con trng v em lin k ca mi nh.
Mt phng php thng dng khc biu din cy l, vi mi nh ca cy ta
ch ra con trng v em lin k ca n.
1. Ci t bi mng.
Gi s cc nh ca cy c nh s t 1 n N. Dng mng lu gi cc nh
ca cy, mi nh c biu din bi bn ghi gm ba trng, ngoi trng infor, cc
trng EldestChild v Nexsibling s lu con trng v em lin k ca mi nh. Ta c th
khai bo nh sau :
type Node = record
infor : item ;
EldestChild : 0...N ;
NextSibling : 0...N
end ;
Tree = array[1...N] of Node ;
Hnh 4.6 Minh ho cu trc d liu biu din cy trong hnh 4.4a.
Trong cch biu din ny, EldestChild v NexSibling c a vo lm cc
trng ca bn ghi biu din mi nh ca cy. Do , ta ch cn phi xt php ton tm
cha ca mi nh. Cng nh trc kia, tm cha ca mt nh k no , ta s ln lt i
qua cc nh ca cy, vi mi nh ta tm n cc con ca n, cho ti khi tm thy nh k.
C th ta c th m t hm Parent(k) nh sau :
function Parent (k : 1 ... N ; T : Tree) : 0 ... N ;
var i, j : 0 ... N ;
found : boolean ;
begin
i : = 1 ;
found : = false ;
while (i <=N) and (not found) do
begin
j : = T[i]. EldestChild ;
if j = k then begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 80
Parent : = i ;
found : = true
end
else begin
j : = T[j]. NextSibling ;
while (j < > 0) and (not found) do
if j = k then begin
Parent : = i ;
found : = true
end
else j : = T[j].NextSibling ;
end ;
i : = i+1
end ;
if not found then Parent : = 0
end ;
infor EldestChild NextSibling
1 A 2 0
2 B 4 3
3 C 6 0
4 D 0 5
5 E 9 0
6 F 0 7 Hnh 4.6
7 G 11 8
8 H 0 0
9 I 0 10
10 K 0 0
11 M 0 0

2. Ci t bi con tr.
Thay cho dng mng, ta c th s dng cc con tr ci t. Khi trong bn
ghi Node, cc trng EldestChild v NextSibling s l cc con tr. Cy s c biu din
bi cu trc sau.
type pointer = ^Node ;
Node = record
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 81
infor : item ;
EldestChild : pointer ;
NextSibling : pointer ;
end ;
var Root : pointer ;
Trong cch ci t ny, cy trong hnh 4.4a c biu din bi cu trc d liu
trong hnh 4.7.
Root













Hnh 4.7 Cu trc d liu biu din cy


c gi hy t vit ly th tc tm cha ca nh P, Parent (P), trong P l con
tr, trong cch ci t ny.
4.3.3. Biu din cy bi cha ca mi nh.
Trong mt s p dng, ngi ta cn c th s dng cch biu din cy n gin
sau y. Gi s cc nh ca cy c nh s t 1 n N. Da vo tnh cht, mi nh
ca cy (tr gc) u c mt cha, ta s dng mt mng A[1...N] biu din cy, trong
A[k] = m nu nh m l cha ca nh k. Trong trng hp cn quan tm n cc thng
tin gn vi mi nh, ta cn phi a vo mi thnh phn ca mng trng infor m t
thng tin mi nh. Cy c biu din bi cu trc sau.
const N = ... ;
type Node = record
infor : item ;
parent : 0 ...N ;
A
-

B C
-
D
-

E
-
-
F
-

G H
- -
I
-
K
- -
M
- -
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 82
end ;
Tree = array [1...N] of Node ;
var T : Tree ;
Hnh 4.8. minh ho cu trc d liu biu din cy trong hnh 4.4a.

infor parent
1 A 0
2 B 1
3 C 1
4 D 2
5 E 2
6 F 3
7 G 3
8 H 3
9 I 5
10 K 5
11 M 5

Hnh 4.8 minh ho cu trc d liu biu din cy trong hnh 4.4a.


4.4. Cy nh phn.
Bt u t mc ny chng ta s xt mt dng cy c bit : cy nh phn.
Cy nh phn l mt tp hp hu hn cc nh c xc nh qui nh sau.
1. Mt tp trng l cy nh phn
2. Gi s T
1
v T
2
l hai cy nh phn khng ct nhau (T
1
T
2
= |) v r l mt nh
mi khng thuc T
1
, T
2
. Khi ta c th thnh lp mt cy nh phn mi T vi gc r c
T
1
l cy con bn tri, T
2
l cy con bn phi ca gc. Cy nh phn T c biu din bi
hnh 4.9.

r



T
1
T
2

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 83


Hnh 4.9. Cy nh phn c gc r, cy con tri T
1
, cy con phi T
2
.
Cn lu rng, cy (cy c gc) v cy nh phn l hai khi nim khc nhau. Cy
khng bao gi trng, n lun lun cha t nht mt nh, mi nh c th khng c, c
th c mt hay nhiu cy con. Cn cy nh phn c th trng, mi nh ca n lun lun
c hai cy con c phn bit l cy con bn tri v cy con bn phi. Chng hn, hnh
4.10 minh ho hai cy nh phn khc nhau. Cy nh phn trong hnh 4.10a c cy con tri
ca gc gm mt nh, cn cy con phi trng. Cy nh phn trong hnh 4.10b c cy con
tri ca gc trng, cn cy con phi gm mt nh. Song y ta ch c mt cy : l
cy m gc ca n ch c mt cy con gm mt nh.





a) b)

Hnh 4.10. Hai cy nh phn khc nhau

T nh ngha cy nh phn, ta suy ra rng, mi nh ca cy nh phn ch c
nhiu nht l hai nh con, mt nh con bn tri ( l gc ca cy con tri) v mt nh
con bn phi ( l gc ca cy con phi).

1 A


2 B 3 C

4 D 5 E 6 F 7 G

8 H 9 I 10 J 11 K


Hnh 4.11. Mt cy nh phn

Ci t cy nh phn.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 84
Phng php t nhin nht biu din cy nh phn l ch ra nh con tri v
nh con phi ca mi nh.
Ta c th s dng mt mng lu gi cc nh ca cy nh phn. Mi nh ca
cy c biu din bi bn ghi gm ba trng : trng infor m t thng tin gn vi mi
nh, trung left ch nh con tri, trng right ch nh con phi. Gi s cc nh ca cy
c nh s t 1 n max, khi cu trc d liu biu din cy nh phn c khai bo
nh sau.

const max = N ;
type Node = record
infor : Item ;
left : 0 ... max ;
right : 0 ... max
end ;
Tree = array [1... max] of Node ;



Hnh 4.12 minh ho cu trc d liu biu din cy nh phn trong hnh 4.11.
infor left right
1 A 2 3
2 B 4 5
3 C 6 7
4 D 0 8
5 E 9 10
6 f 0 0
7 g 11 0
8 H 0 0
9 I 0 0
10 J 0 0
11 J 0 0
12 K 0 0
Hnh 4.12 Cu trc d liu biu din cy

Ngoi cch ci t cy nh phn bi mng, chng ta cn c th s dng con tr
ci t cy nh phn. Trong cch ny mi bn ghi biu din mt nh ca cy cha hai
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 85
con tr : con tr left tr ti nh con tri, con tr right tr ti nh con phi. Tc l ta c
khai bo sau.
type Pointer = ^ Node ;
Node = record
infor : Item ;
left : Pointer ;
right : Pointer ;
end ;
var Root : Pointer ;
Bin con tr Root tr ti gc ca cy. Vi cch ci t ny, cu trc d liu biu
din cy nh phn trong hnh 4.11 c minh ho bi hnh 4.13.
T nay v sau chng ta s ch s dng cch biu din bng con tr ca cy nh
phn. Cc php ton i vi cy nh phn sau ny u c th hin trong cch biu din
bng con tr.
Root












Hnh 4.13 Cu trc d liu biu din cy

i qua cy nh phn.
Cng nh i vi cy, trong nhiu p dng ta cn phi i qua cy nh phn, thm
tt c cc nh ca cy mt cch h thng, vi mi nh ca cy ta cn thc hin mt
nhm hnh ng no c m t trong th tc Visit. Chng ta thng i qua cy nh
phn theo mt trong ba th t Preorder, Inorder v Portorder. Sau y l th tc quy i
qua cy theo th t Preorder.
procedure Preorder (Root : Pointer) ;
begin
A


B C

D
-

E

-
F
- -

G
-
I
-
J
- -
K
- -
H
- -
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 86
if Root < > nil then
begin
Visit (Root) ;
Preorder (Root^. left) ;
Preorder (Root^.right) ;
end
end ;

Mt cch tng t, ta c th vit c cc th tc quy i qua cy theo th t
Inordor v Postorder.
Mt v d cy nh phn : cy biu thc.
Mt v d hay v cy nh phn l cy biu thc. Cy biu thc l cy nh phn gn
nhn, biu din cu trc ca mt biu thc (s hc hoc logic). Mi php ton hai ton
hng (chng hn, +, -, *, /) c biu din bi cy nh phn, gc ca n cha k hiu
php ton, cy con tri biu din ton hng bn tri, cn cy con phi biu din ton
hng bn phi. Vi cc php ton mt ton hng nh 'ph nh' hoc 'ly gi tr i', hoc
cc hm chun nh exp ( ) hoc cos( ) th cy con bn tri rng. Cn vi cc php ton
mt ton hng nh php ly o hm ( )' hoc hm giai tha ( )! th cy con bn phi
rng.
Hnh 4.14 minh ho mt s cy biu thc.

+ exp !

x n
a b
a + b exp(x) n!





/ or

a + < >=

b c a b c d
a/ (b+c) (a<b) or (c> =d)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 87

Hnh 4.13. Mt s cy biu thc

Ta c nhn xt rng, nu i qua cy biu thc theo th t Preorder ta s c biu
thc Balan dng prefix (k hiu php ton ng trc cc ton hng). Nu i qua cy
biu thc theo th t Postorder, ta c biu thc Balan dng postfix (k hiu php ton
ng sau cc ton hng); cn theo th t Inorder ta nhn c cch vit thng thng ca
biu thc (k hiu php ton ng gia hai ton hng).

4.5. Cy tm kim nh phn.
Cy nh phn c s dng trong nhiu mc ch khc nhau. Tuy nhin vic s
dng cy nh phn lu gi v tm kim thng tin vn l mt trong nhng p dng quan
trng nht ca cy nh phn. Trong mc ny chng ta s xt mt lp cy nh phn c
bit, phc v cho vic tm kim thng tin, l cy tm kim nh phn.
Trong thc tin, mt lp i tng no c th c m t bi mt kiu bn
ghi, cc trng ca bn ghi biu din cc thuc tnh ca i tng. Trong bi ton tm
kim thng tin, chng ta thng quan tm n mt nhm thuc tnh no ca i tng
hon ton xc nh c i tng. Chng ta s gi cc thuc tnh ny l kho. Nh vy,
kho l mt nhm thuc tnh ca mt lp i tng sao cho hai i tng khc nhau cn
phi c cc gi tr khc nhau trn nhm thuc tnh . T nay v sau ta gi thit rng,
thng tin gn vi mi nh ca cy nh phn l kho ca i tng no . Do mi
nh ca cy nh phn c biu din bi bn ghi kiu Node c cu trc nh sau.
type pointer = ^Node ;
Node = record
key : keytype ;
left : pointer ;
right : pointer ;
end ;

Gi s kiu ca kho (keytype) l mt kiu c th t, chng hn kiu nguyn,
thc, k t, xu k t. Khi cy tm kim nh phn c nh ngha nh sau.
Cy tm kim nh phn l cy nh phn hoc trng, hoc tho mn cc iu kin
sau.
1. Kho ca cc nh thuc cy con tri nh hn kho ca gc
2. Kho ca gc nh hn kho ca cc nh thuc cy con phi ca gc.
3. Cy con tri v cy con phi ca gc cng l cy tm kim nh phn.
Hnh 4.15 biu din mt cy tm kim nh phn, trong kho ca cc nh l cc
s nguyn.
10

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 88
6 15

5 8 12 18

7 14 16 19


Hnh 4.15. Mt cy tm kim nh phn

Cc php ton trn cy tm kim nh phn
1. Tm kim.
Tm kim trn cy l mt trong cc php ton quan trng nht i vi cy tm
kim nh phn. Gi s mi nh ca cy c biu din bi bn ghi c kiu Node xc
nh trn, bin con tr Root tr ti gc cy v x l mt gi tr kho cho trc. Vn
l, tm xem trn cy c cha nh vi kho l x hay khng. Sau y chng ta s vit cc
th tc tm kim.
Trong th tc tm kim qui di y, chng ta s s dng tham bin P. l
con tr chay trn cc nh ca cy, bt u t gc, nu tm kim thnh cng th P s tr
vo nh vi kho x, cn nu tm kim khng kt qu (tc l, trong cy khng c nh
no vi kho x) th P = nil.

procedure Search (x : Key Type ; Root : pointer ; var P : pointer) ;
begin
P : = Root ;
if P < > nil then
if x < P^.key then Search (x, P^.left, P)
else if x > P^.key then Search(x,P^.right, P)
end ;

Sau y ta s trnh by th tc tm kim khng qui. Trong th tc ny, ta s s
dng bin a phng found c kiu boolean iu khin vng lp n c gi tr ban u
l false. Nu tm kim thnh cng th found nhn gi tr true, vng lp kt thc v P tr
vo nh tm thy. Cn nu tm kim khng kt qu th gi tr ca Found vn l false v
gi tr ca P l nil.

procedure Search (x : keytype, Root : pointer ; var P : pointer) ;
var found : boolean ;
begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 89
P : = Root ;
found : = false ;
while (P < > nil) and (not found) do
if P^.key = x then found : = true
else if x < P^.key then P : = P^.left
else P : = P^.right ;
end ;

2. Xen vo cy tm kim.
Khi cp nht thng tin c t chc di dng cy tm kim nh phn, ta thng
xuyn phi thc hin cc php ton xen vo v loi b khi cy tm kim. Chng ta cn
phi xen vo cy tm kim nh phn mt nh mi c kho x cho trc, sao cho sau khi
xen vo cy vn cn l cy tm kim nh phn.
u tin ta vit th tc qui xen vo cy tm kim.
procedure Insert (var Root : pointer : x : keytype) ;
{xen vo cy gc Root nh mi vi kho l x}
var Q : pointer ;
begin
if Root = nil then
begin
new (Q) ; {to ra nh mi }
Q^.key : = x ;
Q^.left : = nil ;
Q^.righi : = nil ;
Root : = Q ;
end
else with Root^ do
if x < key then Insert (left, x)
else if x > key then Insert (ritht, x)
end ;

Sau y ta s vit th tc khng qui xen vo cy tm kim. Trong th tc ny ta
s s dng bin con tr a phng P chy trn cc nh ca cy bt u t gc. Khi ang
mt nh no , P s chy xung nh con tri (phi) tu theo kho ca nh ln
hn (nh hn) kho x.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 90
Nu ti mt nh no , P cn phi chy xung nh con tri (phi), nhng nh
khng c con tri (phi) th ta 'treo' nh mi vo bn tri (phi) nh . iu kin P
= nil s kt thc vng lp.

procedure Insert (var Root : pointer ; x : keytype) ;
var P, Q : pointer ;
begin
new (Q) ;
Q^.key : = x ;
Q^.left : = nil ;
Q^.right : = nil ;
if Root = nil then Root : = Q
else begin
P: = Root ;
while P < > nil do
if x < P^.key then
if P^.left < > nil then P : = P^.left
else begin
P^.left : = Q ;
P : = nil
end
else if x > P^.key then
if P^.right < > nil then P : = P^.right
else begin
P^.right : = Q ;
P : = nil
end
else P : = nil
end
end ;

3. Loi b khi cy tm kim.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 91
i lp vi php ton xen vo l php ton loi b. Chng ta cn phi loi b khi
cy tm kim mt nh c kha x cho trc, sao cho sau khi loi b cy vn cn l cy
tm kim nh phn.

Vic loi b mt nh khi cy tm kim khng n gin nh vic xen mt nh
mi vo cy. Nu nh cn loi b l l th rt n gin : ta ch cn "ct" l i. Nu
nh cn loi b c mt trong hai cy con l cy trng, ta ch cn "treo" cy con khc
trng vo v tr ca nh b loi. Tuy nhin vn s phc tp hn nu c hai cy con ca
nh cn loi u khc trng. Vn t ra l, ta phi x l nh th no i vi hai cy
con ca nh b loi. Ta c nhn xt rng, trong mt cy tm kim nh phn khc trng
bt k, nh c kho nh nht l nh ngoi cng bn tri, nh c kho ln nht l nh
ngoi cng bn phi. Do , khi nh cn loi b c c hai cy con khc trng, ta cn
phi thay kho ca nh cn loi b bi kho ca nh ngoi cng bn phi ca cy con
tri (hoc nh ngoi cng bn tri ca cy con phi), ri loi b nh ngoi cng bn
phi ca cy con tri (hoc nh ngoi cng bn tri ca cy con phi) (xem hnh 4.16)





20 20

10 25 10 25

3 18 T
2
18 T
2


T
1
T
2

(a) (b)

20 18

10 T
2
10 25

3 18 3 T
2

T
1

T
1


(c) (d)

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 92
Hnh 4.16 (a) Cy T ban u ; (b) Cy T sau khi loi nh 3 (l)
(c) Cy T sau khi loi nh 25 (ch c mt cy con khc trng)
(d) Cy T sau khi loi nh 20 (c hai cy con khc trng).
Thut ton loi b trnh by c m t bi th dc Del. Th tc ny loi khi
cy nh m con tr P tr ti, trong P l con tr lin kt trong cy.
procedure Del (var P : pointer) ;
var Q , Q1 : pointer ;
begin
if P^.right = nil then
begin
Q : = P ;
P : = P^.left ;
end else
if P^.left = nil then
begin
Q: = P ;
P : = P^.right
end else
begin Q : = P^.left ;
if Q^.right = nil then {xem hnh 4.17a}
begin
P^.key : = Q^.key ;
P^.left : = Q^.left
end else
begin
repeat
Q1 : = Q ;
Q : = Q^.right
until Q^.right = nil ;
P^.key : = Q^.key ;
Q1^.right : = Q^.left {xem hnh 4.17b}
end ;
end ;
dispose (Q)
end ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 93
Sau y chng ta s vit th tc loi b khi cy gc Root nh c kho x cho
trc. l th tc qui, n tm ra nh c kho x, ri sau p dng th tc Del
loi nh khi cy.

procedure Delete (var Root : pointer : x : keytype) ;
begin
if Root < > nil then
if x < Root^.key then Delete (Root^.left, x) else
if x > Root^.key then Delete (Root^.right, x)
else Del (Root) ;
end ;

P P

15 = > 10
Q (a)
10 T
2
T
1
T
2

T
1

P P

30 = > 20
(b)
10 T
4
10 T
4
Q
1

T
1
Q
1

15 Q T
1
15
20
T
2

T
2
T
3

T
3


Hnh 4.17


GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 94
4.6. Thi gian thc hin cc php ton trn cy tm kim
nh phn.
Trong mc ny chng ta s nh gi thi gian trung bnh thc hin cc php
ton trn cy tm kim nh phn. Ta c nhn xt rng, thi gian thc hin php tm kim
l s php so snh gi tr kho x cho trc vi kho ca cc nh nm trn ng i t
gc ti mt nh no trong cy. Do thi gian thc hin php tm kim (cng th,
thi gian thc hin cc php xen vo v loi b) l di ca ng i t gc ti mt
nh no trong cy.
D dng thy rng, trong trng hp tt nht, cy tm kim nh phn vi n nh l
cy y (tt c cc nh u c hai con tr cc nh mc thp nht), th cao ca
cy xp x bng logn (ta k hiu logn = log
2
n ). Tht vy, gi mc thp nht l k, ta c
1 + 2 + 2
2
+ ... + 2
k-1
< n
1 + 2 + ... + 2
k
> n
hay 2
k
- 1 < n v 2
k+1
-1 > n . T , ta c log(n+1) - 1 s k < log(n+1).
Tc l k ~ logn.
Do trong trng hp ny, thi gian thc hin cc php ton l 0(logn).
Trong trng hp xu nht, cy tm kim nh phn suy bin thnh danh sch lin kt.
iu ny xy ra, chng hn, khi ta xy dng cy bng cch xen vo cy trng ln lt n
nh vi cc gi tr kho c sp xp theo th t tng dn. Khi ta c cy m mi
nh u c cy con tri trng, tc l cy tr thnh danh sch lin kt. Trong trng hp
ny thi gian thc hin cc php ton l 0(n).
Cu hi c t ra l, thi gian trung bnh thc hin cc php ton s nh th
no, trong trng hp tng qut : cy tm kim l cy "ngu nhin", tc l cy c xy
dng nn t cy trng bng cch xen vo n nh vi cc gi tr kho c sp xp mt
cch ngu nhin.
Gi thit cy tm kim T c xy dng nn t cy rng bng cch xen vo cc
nh c kho ln lt l a
1
, a
2
, ... , a
n
, trong dy cc gi tr kho trn c sp xp mt
cch ngu nhin. Gi s trong dy gi tr kho trn c i phn t nh hn a
1
v n - i - 1
phn t ln hn a
1
. Khi cy con tri ca gc c i nh, v cy con phi c n - i - 1 nh
(xem hnh 4.18)


a
1



i
nh n-i-1
nh


Hnh 4.18. Cy tm kim nh phn "ngu nhin"
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 95
Gi S (n) l di trung bnh ca ng i t gc ti nh bt k trong cy n
nh. Ta c S(1) = 0. Gi s S(i) l di trung bnh ca ng i cy con tri, S(n-i-1)
l di trung bnh ca ng i cy con phi. Do di trung bnh ca ng i
trong cy T vi cy con tri ca gc c i nh l :

i
n
S i
n i
n
S n i ( ( ) ) ( ( ) ) + +

+ 1
1
1 1
Bng cch ly trung bnh cng ca tng trn vi mi i i t 0 ti n-1, ta nhn c di
trung bnh ca ng i trong cy n nh l
( ) ( ) S n
n
i
n
S i
n i
n
S n i
i
n
( ) ( ) ( ) = + +

+

(
=

1
1
1
1 1
0
1


Trong tng trn, lu rng iS i n i S n i
n
n
i
n
( ) ( ) ( ) =
=


1 1
0
1
0
1

Do ta c
( ) ( ) s n
n
n n
i S i
i
n
=

+
=

1 2
2
0
1
(1)
T (1) ta nhn c cc ng thc sau

( )
( )
( ) ( ) S n
n
n
n
S n i S i
n n
i
n
=

+

+
=

1 2 1
1
2
2 2
0
2
(2)


( )
( )
( ) S n
n
n
i S i
n
i
n
=

1
2
1
2
2
0
2
1
(3)

T (3) ta c
( )
( )
( )
2
1
1 2
2
0
2
2
2 2
1
n
n
n n
i S i S n
n n
i
n
=


=
( ) ( ) (4)
Thay (4) vo (2) ta nhn c

( ) ( ) S n S n
n
n
n n
=

+

2
2 2
1
1
2 1 ( )

T ta c nh gi

( ) ( ) S n S n
n
< 1
2

Bng cch th lin tip, ta nhn c
( ) S n
n H
< 2 2 (5)
Trong H
n
l hm iu ho

n H
n
= + + + + 1
1
2
1
3
1

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 96
Theo cng thc le (vi hng s ~ 0,577), ta c

( )
n H
n
n
= + + + ln
1
12
2
(6)
T (5) v (6), ta c S(n) = 0(logn). Nh vy di trung bnh ca ng i t gc ti
nh bt k trong cy tm kim nh phn vi n nh l 0(logn). Do chng ta c th kt
lun rng, thi gian trung bnh thc hin cc php ton trn cay tm kim nh phn l
0(logn).

4.7. Cy cn bng.
Gi s ta c mt tp hp d liu no . Vn t ra l, ta phi t chc cc d
liu nh th no sao cho vic cp nht thng tin (tm kim, thm vo v loi b) c
nhanh chng. Trong mc trc ta thy rng, nu t chc d liu di dng cy tm
kim nh phn th thi gian trung bnh thc hin cc php ton l 0(logn). Trong nhiu p
dng chng ta cn thng xuyn thc hin cc php ton xen vo v loi b khi cy tm
kim. iu lm cho cy c th tr nn rt "lch", trng hp xu nht n c th suy
bin thnh danh sch lin kt. i vi nhng cy tm kim lch, vic thc hin cc php
ton s km hiu qu.
Trong mc ny chng ta s nghin cu mt lp cy tm kim c bit, trong
cc php ton tm kim xen vo v loi b i vi cy n nh lun lun c thc hin
trong thi gian 0(logn), ngay c trong trng hp xu nht.
Lp cy ny c cc nh ton hc Nga G.M. Adelsen Velskii v E.M. Lendis
a ra vo nm 1962.
Cy cn bng (hay cn gi l AVL-cy) l cy tm kim nh phn sao cho ti mi
nh ca cy, cao ca cy con tri v cy con phi khc nhau khng qu mt.
biu din cy cn bng, ta thm vo mi bn ghi m t nh ca cy mt
trng mi bal (balance : cn bng). Trng ny nhn mt trong ba gi tr LH (Left
Hight : cao bn tri), EH (Equal Hight : hai cy con cao bng nhau), RH (Right Hight :
cao bn phi). Ta s ni nh ca cy trng thi cn bng LH, EH, hoc RH.
Ta c th khai bo cu trc d liu biu din cy cn bng nh sau.
type pointer = ^ Node ;
Node = record
key : keytype ;
left, right : pointer ;
bal : (LH, EH, RH)
end ;
var Root : pointer ;

Root

10
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 97

5 12

3 8 14

6

Hnh 4.19. Mt cy cn bng.
Sau y chng ta s xt cc php ton xen vo v loi b trn cy cn bng
1. Xen vo cy cn bng.
Vic xen vo cy cn bng mt nh mi vi kho x cho trc c thc hin
bng cch sau. u tin ta p dng thut ton xen vo cy tm kim, sau "cn bng"
li cc nh m ti tnh cn bng b ph v ( cao ca hai cy con khc nhau 2).
Gi s ta cn xen mt nh mi vo cy gc P (P l con tr tr ti gc cy). C
th xy ra nhng trng hp sau.
1. P = nil (cy trng). Khi xen vo nh mi, ta s c cy cn bng v P^.bal =
EH.
2. P = nil v P^.bal = EH. Trong trng hp ny, khi xen nh mi vo cy con
tri hoc cy con phi ca P, d c lm tng cao ca cy con, th tnh cn bng ca
nh P vn khng b ph v.
3. P = nil v P^.bal = RH (P^.bal = LH). Trong trng hp ny, nu ta xen nh
mi vo cy con tri (cy con phi), th d c lm tng cao ca cy con, nh P vn
trng thi cn bng.
4. P = nil v P^.bal = RH (P^.bal = LH). Gi s nh mi c xen vo cy con
phi (cy con tri) v vic xen vo lm tng cao ca cy con. Trong trng hp ny,
tnh cn bng ti nh b ph v : cy con phi ca P cao hn cy con tri 2 (cy con tri
ca P cao hn cy con phi 2).
Nh vy ch c trng hp 4) l ph v tnh cn bng ti P. Sau y ta s a ra
phng php bin i cy P n tr nn cn bng ti P, khi tnh cn bng ti P b vi
phm.
Gi s P^.bal = RH v nh mi c xen vo cy con phi ca P, ng thi vic
xen vo lm tng cao ca cy con phi .
Gi Q = P^right. Xt cc kh nng sau.
a) Q^.bal = RH (cy con gc Q cao bn phi). Trong trng hp ny, ta bin i
cy P bng php quay tri (Rotateleft) (xem hnh 4.20). Sau php quay ny c hai nh a
v b u trng thi cn bng EH.
P P
a Q b
b quay tri
T
1


GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 98
h a
h h+1


Hnh 4.20. Quay tri cy P.

procedure RotateLeft (var P : pointer) ;
{quay tri cy gc P }
var Q : pointer ;
begin
if P < > nil then
if P^.right < > nil then
begin
Q: = P^.right ;
P^.right : = Q^.left ;
Q^.left : = P ;
P : = Q
end ;
end ;
b) Q^bal = LH (cy con gc Q cao bn tri). Trong trng hp ny u tin ta
quay cy con gc Q sang phi (RotateRight), sau quay gc P sang tri (xem hnh
4.21). Cn ch rng, hai cy con T
1
v T
4
c cao h, cn t nht mt trong hai cy con
T
2
v T
3
phi c cao h. Do , sau hai php quay nh c trng thi cn bng EH, cn
nh a s trng thi cn bng EH hay LH tu thuc vo T
2
c cao h hay h-1. Tng
t, nh b s trng thi cn bng EH hay RH tu theo T
3
c cao h hay h-1.


P P
a Q b
b quay phi Q
h cy Q c
c h
b

h h-1

T
1


T
2

T
2

T
3

T
3

T
1

T
1

T
2

T
2

T
3

T
4

T
3
T
4

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 99



P
c
quay tri cy P
a b



Hnh 4.21

c) Q^.bal = EH. Ta gi thit nh mi c xen vo cy con phi ca P v sau
khi xen vo cao ca cy con phi tng ln. Nu sau khi xen m Q^.bal = EH th cao
ca cy Q khng th tng ln c. Do , trng hp ny khng xy ra.
Vic thit lp li tnh cn bng ca nh P bng phng php bin i cy m ta
trnh by trn c m t trong th tc RightBalance (cn bng bn phi). Th tc
ny s dng cc th tc RotateLeft v RotateRight (bn c t vit ly th tc ny)
thc hin cc php bin i cy c ch ra trong hnh 4.20 v hnh 4.21.

procedure RightBalance (var P : pointer) ;
var Q,R : pointer
begin
Q: = P^.right ;
case Q^.bal of
RH : begin
P^.bal : = EH ;
Q^.bal : = EH ;
RotateLeft (P)
end ;
LH : begin
R: = Q^.left ;
case R^.bal of
EH : begin
P^.bal : = EH ;
Q^.bal : = EH ;
T
1
T
2
T
3
T
4

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 100
end ;
LH : begin
P^.bal : = EH ;
Q^.bal : = RH
end ;
RH : begin
P^.bal : = LH ;
Q^.bal : = EH
end
end ; {ht case R^.bal }
R^.bal : = EH ;
RotateRight (Q) ;
P^.right : = Q ;
RotateLeft (P)
end ; {ht lnh case Q^.bal}
end ;

Hon ton tng t, khi P^.bal = LH v nh mi c xen vo cy con tri ca P,
ng thi vic xen vo lm tng cao ca cy con tri, th ta lp li tnh cn bng
nh P bng th tc LeftBalance (cn bng bn tri). Bn c t vit ly th tc ny.
Sau y chng ta s vit th tc xen vo cy cn bng Root, mt nh mi vi
kho x cho trc. y l th tc quy. Tnh cn bng ti mt nh c b ph v hay
khng ph thuc vo vic khi ta xen vo cy con tri (phi) ca nh c lm tng
cao ca cy con khng. Do , ta a vo th tc tham bin taller kiu boolean, taller
= true nu vic xen vo lm tng cao ca cy v taller = false nu khng.

procedure Insert (var Root : pointer ; x : KeyType :
var taller : boolean) ;
begin
if Root = nil then
begin
new (Root) ;
with Root^ do
begin
key: = x ;
left : = nil ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 101
right : = nil ;
bal : = EH ;
end ;
taller : = true ;
end else
if x < Root ^. key then
begin
Insert (Root^.left, x, taller) ;
if taller then {cy con tri cao ln }
case Root^.bal of
LH : begin
LeftBalance (Root) ;
taller: = false ;
end ;
EH : begin
Root^.bal = LH ;
taller : = true ;
end ;
RH : begin
Root^.bal : = EH ;
taller : = false ;
end ;
end ;
end else
if x > Root^.key then
begin
Insert (Root^.right, x, taller) ;
if taller then {cy con phi cao ln}
case Root^.bal of
LH : begin
Root^.bal : = EH ;
taller : = false ;
end ;
EH : begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 102
Root^.bal : = RH ;
taller : = true ;
end ;
RH : begin
RightBalance (Root) ;
taller : = false
end ;
end else taller : = false
end ;

2. Loi b khi cy cn bng.
Trong mc ny ta s xt php ton loi mt nh c kho x cho trc khi cy cn
bng, sao cho sau khi loi cy vn cn l cy cn bng.
Chng ta s s dng thut ton loi mt nh khi cy tm kim nh phn. Cn lu
rng, thut ton ny lm cho cao ca cy gim i 1 hoc khng thay i. Chng ta
s a vo cc th tc tham bin h kiu boolean ch cao ca cy sau khi loi b c
ngn i haykhng, h = true nu cao ca cy gim i 1 v h = false nu cao ca cy
khng thay i.
Nu nh b loi thuc cy con tri ca cy P v vic loi b lm gim cao ca
cy con tri th ta phi bin i cy P v xc nh li trng thi cn bng ca cc nh
chu s bin i. Php bin i cy trong trng hp ny c m t bi th tc
LeftBalance.
Tng t, nu nh b loi thuc cy con phi ca cy P v vic loi b lm gim
cao ca cy con phi, th ta bin i cy P bi th tc RightBalance.
Cc th tc LefBalance v RightBalance s s dng cc php quay RotateLeft,
RotateRight v cc k thut tng t nh trong cc th tc RightBalance v LeftBalance
trong php ton xen vo.
Sau y s vit th tc LeftBalance, cn th tc RightBalance ginh li cho bn
c.

procedure LeftBalance (var P : pointer ; var h : boolean) ;
{p dng th tc ny khi cao cy con tri ca P gim i}
var Q, R : pointer :
begin
case P^.bal of
LH : begin
P^.bal:= EH ;
h:= true
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 103
end ;
EH : begin
P^.bal : = RH ;
h : = false
end ;
RH : begin
Q:= P^.right ;
case Q^.bal of
EH : begin
P^.bal:= RH ;
Q^.bal : = LH ;
RotateLeft (P) ;
h : = false ;
end ;
RH : begin
P^.bal : = EH ;
Q^.bal : = EH ;
RotateLeft (P) ;
h : = true
end ;
LH : begin
R : = Q^.left ;
case R^.bal of
EH : begin
P^.bal : = EH ;
Q^.bal : = EH ;
end ;
LF : begin
P^.bal : = EH ;
Q^.bal : = RH ;
end ;
RH : begin
P^.bal : = LH ;
Q^.bal : = EH
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 104
end ;
end {ht case R^.bal}
R^.bal : = EH ;
RotateRight (Q) ;
P^.right : = Q ;
RotateLeft (P) ;
h : = true
end
end {ht case Q^.bal }
end
end {ht case P^.bal}
end ;

Sau y l th tc Del. Th tc ny loi khi cy nh P. Trong trng hp c hai
con ca P u khc trng, th tc Del s dng th tc Erase xo i nh ngoi cng
bn phi ca cy con tri ca P. Nhng trc khi xo, kho ca nh P c thay bng
kho ca nh ngoi cng bn phi .

procedure Del (var P : pointer ; var h : boolean) ;
procedure Erase (var Q : pointer ; var h : boolean) ;
begin
if Q^.right < > nil then
begin
Erase (Q^.right, h) ;
if h then RightBalance (Q,h)
end else
begin
P^.key : = Q^.key ;
Q : = Q^.left ;
h : = true
end
end ; {ht th tc Erase}
begin {bt u th tc Del }
if P^.right = nil then
begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 105
P: = P^.left ;
h: = true
end else
if P^.left = nil then
begin
P: = P^.right ;
h : = true
end else
begin
Erase(P^.left, h) ;
if h then LeftBalance (P, h)
end ;
end ;

n y chng ta c th vit c th tc loi b khi cy gc Root nh c kho
x cho trc. l th tc quy Delete, n s dng cc th tc LeftBalance,
RightBalance v Del.

procedure Delete (var Root : pointer ; x : keytype ; var h : boolean)
begin
if Root < > nil then
if x < Root^.key then
begin
Delete (Root^.left, x, h) ;
if h then LeftBalance (Root,h)
end else
if x > Root^. key then
begin
Delete (Root^.right , x, h) ;
if h then RightBalance (Root,h)
end else Del (Root, x, h)
end ;

4.8. Thi gian thc hin cc php ton trn cy cn bng.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 106
Chng ta bit rng, thi gian trung bnh thc hin cc php ton trn cy tm
kim nh phn l 0(logn). Chng ta s ch ra rng, trn cy cn bng, trong trng hp
xu nht, thi gian thc hin cc php ton cng l 0(logn). Mun vy ta cn phi xc
nh, trong trng hp xu nht th cao ca cy cn bng n nh s nh th no.
Thay cho vic xc nh cao ln nht ( cao trong trng hp xu nht) m
cy cn bng n nh c th c, ta xc nh s nh nht cc nh m cy cn bng c
cao h phi c. Gi F
h
l cy c ao h vi s nh nh nht. Khi mt trong hai cy
con ca n phi c cao h - 1, cn cy con kia phi c cao h-1 hoch h-2. Nhng v
F
h
l cy c cao h vi s nh nh nht, nn ta suy ra rng, mt cy con ca n (cy
con tri) c cao h-1, cn cy con phi c cao h-2, ng thi cc cy con ny phi
c s nh nh nht. Vy cy con tri ca F
h
l F
h-1
, cy con phi l F
h-2
. Chng ta s gi
cc cy cn bng F
h
l cy Fibonacci (v qui lut xy dng chng tng t nh qui lut
xy dng c thnh phn ca dy s Fibonacci).







F
0
F
1
F
2










F
3
F
4

Hnh 4.22. Minh ho mt s cy Fibonacci

Nu k hiu Tl s nh ca cy T, chng ta c quan h quy sau y
F
h
= F
h-1
+ F
h-2
+ 1
trong F
0
=1 , F
1
= 2. Thm 1 vo hai v ta c
(F
h
+ 1) = (F
h-1
+ 1) + (F
h-2
+ 1)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 107
Nh vy F
h
+ 1 l cc thnh phn ca dy s Fibonacci, c th l thnh phn
f
h+3
ca dy s Fibonacci. Theo cng thc De Moive, ta c nh gi sau :

F
h
+ 1 ~
1
5
1 5
2
3
+

(
+ h




Gi s nh ca cy Fibonacci c cao h l n, F
h
=n. Gii phng trnh trn
theo h, bng cch ly logarit c hai v, ta c
h ~ 1,44 logn
Nh vy, cao ca cy cn bng n nh trong trng xu nht l 0(logn).
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 108
Chng 5
Tp hp

Tp hp l mt cu trc c bn ca ton hc. Trong thit k thut ton, chng ta
thng xuyn phi s dng n m hnh d liu tp hp. Trong chng ny chng ta s
nghin cu m hnh d liu tp hp, cc phng php ci t tp hp. Sau chng ta s
nghin cu mt s kiu d liu tru tng, l t in v hng u tin, c xy dng
da trn khi nim tp hp, nhng ch quan tm n mt s php ton no .

5.1. Tp hp v cc php ton trn tp hp.
Chng ta xem rng, c gi lm quen vi tp hp. Do chng ta ch trnh by
ngn gn mt s khi nim c s dng n sau ny.
Trong ton hc, c hai phng php xc nh mt tp hp A. n gin nht l
lit k tt c cc phn t ca tp A (nu tp A hu hn). Chng hn, A = {1, 2, 3} c
ngha l A tp hp ch gm 3 phn t 1, 2, 3. Cch khc, ta cng c th xc nh mt tp
A bng cch nu ln cc c trng cho ta bit chnh xc mt i tng bt k c l mt
phn t ca tp A hay khng. V d, A = {x, x l s nguyn chn}. Ta cn quan tm n
mt tp c bit : tp trng |, l tp hp khng cha phn t no c.
Vi hai tp bt k A, B v mt i tng x bt k, ta c cc quan h sau y:
x e A (x thuc A), quan h ny ng nu v ch nu x l phn t ca tp
A.
A _ B (A l tp con ca B), quan h ny ng nu v ch nu mi phn t
ca tp A l phn t ca tp B.
A = B nu v ch nu A _ B v B _ A.
Cc php ton c bn trn tp hp
Cc php ton c bn trn tp hp l hp, giao, hiu. Cho hai tp A v B, khi
hp ca A v B, A B , l tp hp gm tt c cc phn t thuc A hoc thuc B. Cn
giao ca A v B l tp A B gm tt c cc phn t va thuc A, va thuc B. Hiu A-B
l tp hp gm tt c cc phn t thuc A nhng khng thuc B. Chng hn, nu A = {1,
2, 3, 4} v B = { 3, 4, 5} th A B = {1, 2, 3, 4, 5}, cn A B = {3, 4} v A-B = {1, 2}.
Tch -cac ca hai tp hp A v B l tp hp A x B gm tt c cc cp phn t (a,
b), trong a e A v b e B. Chng hn, nu A = {1, 2}, B = {a, b, c} th A x B = {(1, a),
(1, b), (1, c), (2, a), (2, b), (2, c)}.
Quan h nh nguyn trn tp hp
Khi xt mt tp hp, trong nhiu trng hp ta cn quan tm n quan h gia cc
phn t ca tp hp. Mt quan h nh nguyn (gi tt l quan h) R trn tp A l mt tp
con no ca tch -cac A x A, tc l R _ A x A.
Nu a, b l cc phn t ca tp A v (a, b) e R th ta ni a c quan h R vi b v
k hiu l aRb. V d : A = {a, b, c} v R = {(a, a), (a, c), (b, a), (c, b)}, khi a c quan
h R vi c v (a,c) e R cn b khng c quan h R vi c v cp (b, c) e R.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 109
Mt quan h R c th c cc tnh cht sau :
- Quan h R trn tp A c tnh phn x, nu aRa, vi mi a e A.
- Quan h R c tnh i xng, nu mi khi c aRb th cng c bRa.
- Quan h R c tnh bc cu, nu mi khi c aRb v bRc th cng c aRc.
- Quan h R c tnh phn i xng, nu mi khi c aRb v a = b th khng c
bRa.
V d nu A l tp cc s nguyn Z v R l quan h nh hn (<) trn cc s, tc l
vi cc s nguyn n v m bt k, nRm nu v ch nu n < m, th d dng thy rng, < l
quan h c tnh bc cu v phn i xng, nhng khng c tnh phn x v i xng.
Hai dng c bit quan trng l quan h tng ng v quan h th t b phn.
Mt quan h R trn tp A c gi l quan h tng ng, nu n tho mn cc tnh
cht phn x, i xng v bc cu. Khi trn tp A c xc nh mt quan h tng
ng R, ta c th phn hoch tp A thnh cc lp tng ng sao cho hai phn t bt
k thuc cng mt lp nu v ch nu chng tng ng vi nhau.
Chng hn, trn tp cc s nguyn Z ta xc nh quan h R nh sau : nRm nu v
ch nu n-m chia ht cho 3. D dng thy rng, quan h tho mn c ba tnh cht phn
x, i xng v bc cu. Tp Z c phn thnh 3 lp tng ng, l cc tp s
nguyn c dng 3k, 3k+1 v 3k+2.
Mt quan h R trn tp A c gi l quan h th t b phn, nu n tho mn
cc tnh cht phn x, phn i xng v bc cu. Khi trn tp A c xc nh quan h
th t b phn, ta ni A l tp c sp th t b phn. Chng hn, A l tp cc s
nguyn dng, quan h R c xc nh nh sau : nRm nu v ch nu n l c ca m.
Khi R c c ba tnh cht phn x, phn i xng v bc cu, do n l quan h th
t b phn. Quan h th t b phn R s c k hiu l s, do aRb s c vit l a
s b. Tp c sp th t b phn A c gi l tp c sp th t hon ton, hay tp
c sp th t tuyn tnh, nu vi mi cp phn t a, b thuc A ta lun lun c a s b
hoc b s a. Chng hn, tp cc s nguyn, tp cc s thc u l cc tp c sp th t
tuyn tnh vi quan h s thng thng.

M hnh d liu tp hp
Trong thit k thut ton, khi s dng tp hp nh mt m hnh d liu, ngoi cc
php ton hp, giao, hiu, chng ta phi cn n nhiu php ton khc. Sau y chng ta
s a ra mt s php ton quan trng nht, cc php ton ny s c m t bi cc th
tc hoc hm.

1. Php hp :
Procedure Union (A, B : set; var C : set);
Th tc tm hp ca tp A v tp B, kt qu l tp C.
2. Php giao :
Procedure Intersection (A, B : set; var C : set);
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 110
Th tc tm giao ca tp A v tp B, kt qu l tp C.
3. Php tr :
Procedure Difference ( A,B: set ; var C: set);
Th tc tm hiu ca tp A v tp B, kt qu l C.
4. Xc nh mt phn t c thuc tp hp hay khng :
Function Member ( x: element ; A: set) : boolean ;
Hm Member nhn gi tr true nu xeA v false nu khng.
5. Php xen vo :
Procedure Insert ( x: element ; var A: set);
Th tc ny thm phn t x vo tp A, do sau khi thc hin th tc, gi tr mi
ca A l A {x}.
6. Php loi b :
Procedure Delete ( x : element ; var A: set);
Th tc ny loi b x khi tp A . Sau th tc ny ,tham bin A nhn gi tr mi
l A-{x}.
7. Tm phn t nh nht ( phn t ln nht ).
Procedure Min ( A: set ; var x: element );

Php ton ny ch p dng trn cc tp hp sp th t tuyn tnh . Sau khi thc
hin th tc, x l phn t nh nht ca tp A .

Vn c t ra by gi l , ta cn biu din tp hp nh th no cc php
ton c thc hin vi hiu qu cao .

5.2.Ci t tp hp.

C nhiu phng php biu din tp hp. Trong tng p dng, tu thuc vo cc
php ton cn thc hin v c ( s phn t ) ca tp hp m ta la chn cch ci t sao
cho cc php ton thc hin c hiu qu .

Trc ht, chng ta cn bit rng, cc phn t ca tp hp c th l i tng
phc tp (khng phi l cc s nguyn, s thc hoc cc k t ). Cc i tng ny c th
c biu din bi bn ghi m cc trng l cc thuc tnh ca i tng. Mi phn t
c hon ton xc nh bi cc gi tr ca mt s trng no (kho). Trong trng
hp ny, ta c th m t kiu d liu ca cc phn t ca tp hp nh sau.

type elementtype = record
key : keytype;
[Cc trng khc]
end;


5.2.1.Ci t tp hp bi vect bit.

Gi s cc tp hp m ta quan tm u l tp con ca mt tp "v tr" no . Gi
s c ca tp v tr tng i nh v cc phn t ca n l cc s nguyn t 1 n n (
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 111
hoc c m ho bi cc s nguyn 1..n ). Khi ta c th dng vect bit (mng
boolean) biu din tp hp. Mt tp A c biu din bi vect bit (A[1] , A[2] ,...,
A[i] ,..., A[n] ), trong thnh phn th i , A[i] l true nu v ch nu i l phn t ca tp
A.

const n = ...;
type Set = array[1..n] of boolean;
var A,B,C : set;
x : 1..n;

D dng thy rng, vi cch ci t ny, tt c cc php ton c bn trn tp hp
u c thc hin rt d dng, v vi thi gian thc hin cng lm l t l vi c ca tp
v tr, tc l O(n). Chng hn, thm x vo tp A, ta ch cn thc hin lnh
A[x]: = true

Cn xc nh x c l tp con ca tp A hay khng ta ch cn bit A[x] l true
hay false.

Cc php hp, giao, hiu ca hai tp hp cng c thc hin rt n gin. Sau
y l hm Union thc hin php ly hp ca hai tp A v B.

procedure Union (A, B : Set; var C: Set ) ;
var i: integer;
begin
for i : = 1 to n do C[i] : = A[i] or B[i]
end;

5.2.2.Ci t tp hp bi danh sch
Chng ta cng c th biu din tp hp bi danh sch L=(a
1
, a
2
,..., a
n
), trong
cc thnh phn a
i
ca danh sch l cc phn t ca tp hp. Nh li rng, mt danh sch
c th c ci t bi mng, hoc bi danh sch lin kt. Do chng ta c th ci t
tp hp bi mng hoc bi danh sch lin kt.

1. Ci t tp hp bi mng :
Gi s s phn t ca tp hp khng vt qu mt hng no maxsize. Khi ta
c th biu din tp hp bi mt mng. Cc thnh phn ca mng bt u t thnh phn
u tin s lu gi cc phn t ca tp hp. ta s a vo mt bin last ghi li ch s ca
thnh phn cui cng ca mng c cha phn t ca tp hp.

const maxsize = ...;
type Set = record
last : integer;
element : array [1..maxsize] of elementtype;
end;

Trong cch ci t ny, mt khng gian nh c nh (do c ca mng qui nh)
c dng lu gi cc phn t ca tp hp. Vic thc hin cc php hp, xen vo c
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 112
th dn n cc tp hp c s phn t vt qu c ca mng. Do khi s dng cch ci
t ny chng ta phi chn maxsize thch hp tit kim b nh v trnh trng hp b
trn.

Chng ti li cho c gi t vit cc th tc v hm thc hin cc php ton tp
hp trong cch ci t ny.

2. Ci t tp hp bi danh sch lin kt

Vic biu din tp hp bi danh sch lin kt s khc phc c hn ch v khng
gian khi dng mng. ta c th s dng phng php ny biu din tp hp c s phn
t nhiu t tu , min l b nh ca my cho php. Tuy nhin trong cch ci t ny,
vic thc hin cc php ton tp hp s phc tp hn. Mi thnh phn trong danh sch
lin kt biu din tp hp l mt t bo c khai bo nh sau :

type pointer = ^ Cell;
Cell = record
elementtype;
next : pointer;
end;

Cc tp hp A, B, C s c biu din bi cc danh sch lin kt, trong cc
con tr A, B, C s tr ti u ca cc danh sch .

var A, B, C : pointer;

Sau y chng ta s trnh by s thc hin cc php ton khi tp hp c ci t
bi danh sch lin kt. Php ton Member (x,A) chnh l php tm kim phn t x trong
danh sch lin kt A.
Cho hai tp hp A v B c biu din bi cc danh sch lin kt. Vic tm danh
sch C biu din hp, giao hoc hiu ca A v B c tin hnh bi cng mt phng
php. Chng hn, mun tm giao ca A v B, ta phi so snh mi phn t e ca danh sch
A vi ln lt tng phn t ca danh sch B. Nu trong danh sch B c mt phn t cng
l e th phn t e c a vo danh sch C.
Sau y l th tc thc hin php giao :

procedure Intersection (A, B : pointer; var C : pointer);
var Ap, Bp, Cp : pointer;
found : boolean;
begin
C : = nil;
Ap : = A;
while Ap < > nil do
begin
Bp : = B;
found : = false;
while (Bp < > nil) and (not found) do
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 113
if Bp ^. element + Ap ^. element then
found : = true else Bp : = Bp^.next;
if found then
begin
new (Cp);
Cp ^. element : = Ap ^. element;
Cp ^. next : = C;
C : = Cp
end;
Ap : = Ap ^. next
end
end;
tm hp ca A v B, u tin ta sao chp danh sch B c danh sch C l bn
sao ca B. Sau ta so snh mi phn t e ca danh sch A vi tng phn t ca danh
sch B. Nu khng c phn t no ca B l e th ta thm e vo danh sch C. Mt cch
tng t i vi php ton A-B.
Trong cch ci t tp hp bi danh sch (khng c sp) nh trn, khi thc hin
cc php ton hp, giao, tr, ta phi so snh mi phn t ca danh sch A vi tng phn
t ca danh sch B. Do thi gian thc hin cc php ton l 0(n
2
), trong n = max
(, A,, ,B,), y , A, k hiu s phn t ca tp A.

C. Ci t tp hp bi danh sch c sp :

Trong trng hp cc tp hp l cc tp con ca tp v tr c sp tuyn tnh bi
quan h th t no , th cc php ton tp hp s c thc hin nhanh hn nu ta ci
t cc tp bi cc danh sch c sp. Mt tp c biu din bi danh sch c sp,
nu cc thnh phn ca danh sch c sp xp theo th t tng dn (hoc gim dn) : a
1

< a
2
< ... < a
n
. Ch : thay cho vic xt chnh cc phn t ca tp hp, ta c th xt cc
kho ca chng. Nu tp cc kho l tp c sp tuyn tnh th ta cng c th ci t tp
hp bi danh sch c sp theo kho.
Vi cc danh sch c sp A v B, tm danh sch c sp C biu din hp,
giao, hiu ca chng, ta ch cn so snh mi phn t a ca danh sch A vi cc phn t
ca danh sch B cho ti khi hoc tm c trong danh sch B mt phn t bng a, hoc
tm c mt phn t b > a. Hn na, nu i vi mt phn t a
i
trong danh sch A, ta
tm c mt phn t b
k
trong danh sch B sao cho a
i
s b
k
, th i vi phn t tip theo
a
i+1
trong danh sch A ta ch cn bt u s tm kim trong danh sch B k t thnh phn
b
k
. Do thi gian thc hin cc php ton hp, giao, tr s t l vi s phn t ca tp
hp, O(n), trong n = max (, A,, , B,).
Sau y chng ta s vit cc th tc thc hin cc php hp v giao ca cc tp
hp c biu din bi cc danh sch c sp A v B. Danh sch c sp C biu din
hp (hoc giao) l danh sch vng trn, con tr C tr ti cui danh sch, cn C^.next tr
ti u danh sch .


procedure Union (A,B : pointer ; var C: pointer );
var Ap , Bp

, Cp : pointer ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 114
procedure Add ( Cp : pointer ; var C: pointer);
{Thm Cp vo cui danh sch C }
begin
if C=nil then
begin
C:=Cp;
C^.next :=C
end else
begin
Cp^.next :=C^.next;
C^.next := Cp;
C:=Cp
end
end;
begin
C:= nil;
Ap:=A;
Bp:=B;
while ( Ap<>nil) and (Bp<> nil)
if Ap^.element < = Bp^.element then
begin
new(Cp);
Cp^.element:=Ap^.element
Add(Cp,C);
if Ap^.element=Bp^.element then
begin
Ap := Ap^.next ;
Bp := Bp^.next
end else Ap:=Ap^.next
end else
begin
new(Cp);
Cp^.element:=Bp^.element
Add(Cp,C);
Bp:=Bp^.next
end;
while Ap < > nil do
begin
new(Cp);
Cp^.element:=Ap^.element;
Add (Cp,C);
while Bp < > nil do
begin
new (Cp);
C ^. element : Bp ^. element ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 115
Add (Cp, C)
end;
end;


procedure Intersection(A,B : pointer; var C: pointer);
var Ap, Bp, Cp : pointer;
begin
C:=nil;
Ap:=A;
Bp:=B;
while ( Ap< > nil ) and (Bp< > nil) do
if Ap^.element= Bp^.element then
begin
new(Cp);
Cp^.element := Ap^.element;
Add(Cp,C);
Ap:= Ap^.next;
Bp := Bp^.next;
end else
if Ap^.element < Bp^.element then Ap := Ap^.next
else Bp := Bp^.next
end;

5.3.T in

5.3.1.T in
Trong nhiu p dng, khi s dng m hnh d liu tp hp thit k thut ton,
ta khng cn n cc php ton ly hp, giao, hiu ca cc tp . Thng thng khi lu
gi mt tp hp thng tin no , ta ch cn n php ton thm mt phn t mi na vo
tp hp, loi khi tp hp mt phn t v tm xem trong tp hp c cha mt phn t no
hay khng.
M hnh gi liu tp hp, nhng ch xt n nhng php ton Insert, Delete v
Member c gi l kiu gi liu tru tng t in ( Dictionary )
Sau y chng ta s nu ra cc phng php n gin m chng ta bit trong
cc chng trc ci t t in. Trong mc 5. 4 chng ta s trnh by mt k thut
mi ci t t in.

5.3.2.Cc phng php n gin ci t t in
T in l mt tp hp, do ng nhin ta c th s dng cc phng php ci
t tp hp ci t t in .
Chng ta c th biu din t in bi vect bit. Khi cc php ton trong t in
c thc hin rt n gin vi thi gian hng. Tuy nhin, ta ch c th p dng c
phng php ny nu t in l tp hp c th dng lm tp ch s cho mng .
Chng ta c th biu din t in bi danh sch. n lt mnh, danh sch c th
c ci t bi mng hoc bi danh sch lin kt. Khi ci t t in bi mng hoc bi
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 116
danh sch lin kt , mi phng php u c u im v nhc im m chng ta
phn tch chng 3. Thi gian thc hin cc php ton Insert, Delete, Member ni
chung l O(n) vi t in c n phn t.
Gi s t in l mt tp c sp th t tuyn tnh . Trong trng hp ny, ta c
th biu din t in bi cy tm kim nh phn. Vi cch ci t ny cc php ton
Member, Insert v Delete l cc php ton tm kim, xen vo v loi b trn cy tm kim
nh phn c xt trong chng 4. Thi gian trung bnh thc hin cc php ton trn
cy tm kim nh phn l O(logn), trong trng hp xu nht khi cy suy bin thnh danh
sch l O(n). Nu ta biu din t in bi cy cn bng, th thi gian thc hin cc php
ton, ngay c trong trng hp xu nht cng l 0(logn). Tuy nhin nh chng ta bit,
vic thc hin cc php ton xen vo v loi b trn cy cn bng kh phc tp.

5. 4. Cu trc d liu bng bm.
Ci t t in bi bng bm.

Trong mc ny chng ta s trnh by mt k thut quan trng, c gi l phng
php bm (hashing). Chng ta s p dng phng php bm ci t t in. Bm l
phng php rt thch hp ci t tp hp c s phn t ln v thi gian cn thit
thc hin cc php ton t in, ngay c trong trng hp xu nht, l t l vi c ca tp
hp.
Chng ta s cp n hai phng php bm khc nhau. Mt gi l bm m
(open hasing) cho php s dng mt khng gian khng hn ch lu gi cc phn t
ca tp hp. Phng php bm khc c gi l bm ng (closed hashing) s dng mt
khng gian c nh v do tp hp c ci t phi c c khng vt qu khng gian
cho php.

5.4.1. Bng bm m :

T tng c bn ca bm m l phn chia tp hp cho thnh mt s c nh
cc lp. Chng hn, ta mun phn thnh N lp c nh s 0, 1, ..., N-1. Ta s dng
mng T vi ch s chy t 0 n N-1. Mi thnh phn T [i] ca mng c ni n nh
mt "r" ng cc phn t ca tp hp thuc lp th i. Cc phn t ca tp hp thuc mi
lp c t chc di dng mt danh sch lin kt. Do T [i] s cha con tr tr n
danh sch ca lp i. Ta s gi mng T l bng bm (hash table).
Vic phn chia cc phn t ca tp hp vo cc lp c thc hin bi hm bm
(hash function) h. Nu x l mt gi tr kho ca phn t no ca tp hp th h(x) l ch
s no ca mng T v ta gi h(x) l gi tr bm (hash value) ca x. Nh vy h l nh
x t tp hp cc kho K vo tp hp {0, 1, ..., N-1}.

Hm bm
C hai tiu chun chnh la chn mt hm bm. Trc ht n phi cho php
tnh c d dng v nhanh chng gi tr bm ca mi kho. Th hai n phi phn b u
cc kho vo cc r. Trn thc t tiu chun th hai rt kh c thc hin. Sau y
chng ta a ra mt s phng php thit k hm bm :
1. Phng php ct b : gi s kho l s nguyn (nu kho khng phi l s nguyn, ta
xt n cc m s ca chng). Ta s b i mt phn no ca kho, v ly phn cn li
lm gi tr bm ca kho. Chng hn, nu kho l cc s nguyn 10 ch s v bng bm
gm 1000 thnh phn, khi ta c th ly ch s th nht, th ba v th by t bn tri
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 117
lm gi tr bm. V d : h (7103592810) = 702. Phng php ct b rt n gin, nhng
n thng khng phn b u cc kho.
2. Phng php gp : gi s kho l s nguyn. Ta phn chia kho thnh mt
s phn, sau kt hp cc phn li bng mt cch no (chng hn, dng php cng
hoc php nhn) nhn gi tr bm. Chng hn, nu kho l s nguyn 10 ch s, ta
phn thnh cc nhm ba, ba, hai v hai ch s t bn tri, cng cc nhm vi nhau, sau
ct ct nu cn thit, ta s nhn c gi tr ca hm bm. V d 7103592810 c
bin i thnh 710+359+28+10 = 1107, do ta c gi tr bm l 107. V mi thng tin
trong kho u c phn nh vo gi tr bm, nn phng php gp cho phn b u cc
kho tt hn phng php ct b.
3. Phng php s dng php ton ly phn d : gi s kho l s nguyn, v gi s ta
mun chia tp hp cc kho thnh N lp. Chia s nguyn cho N ri ly phn d lm gi
tr bm. iu ny trong Pascal c thc hin bng php ton MOD. Tnh phn b u
cc kho ca hm bm c xc nh bng phng php ny ph thuc nhiu vo vic
chn N. Tt nht chn N l s nguyn t. Chng hn thay cho chn N = 1000, ta ly N=
997 hoc N = 1009.
Sau y ta s vit mt hm bm trong Pascal bm cc kho l cc xu k t c
di 10 thnh cc gi tr t 0 n N-1
type keytype = string [10]

function h (x : keytupe) : 0..N-1;
var I, Sum : integer;
begin
Sum : = 0;
for i = 1 to 10 do
Sum : = Sum + ord(x[i]);
h : = Sum mod N
end;
Trong hm bm trn, ta chuyn i cc xu k t thnh cc s nguyn bng
cch ly tng s ca cc m s ca tng k t trong xu (ord (c) l m s ca k t c).



Cu trc d liu bng bm m c minh ho trong hnh 5.1




0




GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 118
1

2






N-1


T
Hnh 5.1 Bng bm m.
Chng ta c th khai bo cu trc d liu bng bm m biu din t in nh sau
:

const N = ...;
type pointer = ^ element;
element = record
key : keytype;
next : pointer
end;

Dictionary = array [0 .. N-1] of pointer;
var T : Dictionary;
Vic khi to mt t in rng c thc hin bng lnh sau
for i : = 0 to N-1 do T [i] : = nil;

Cc php ton t in trn bng bm m
Sau y chng ta s a ra cc th tc thc hin cc php ton t in.

function Member (x : keytype; var T : Dictionary) : boolean;
var P : pointer; found : boolean;
begin
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 119
P : = T [h(x)];
found : = false;
while (P < > nil) and (not found) do
if P ^. key = x then found : = true
else P : = P ^. next;
Member : = found
end;

procedure Insert (x : keytype; var T : Dictionary);
var i : 1 .. N-1;
P : pointer;
begin
if not Member (x, T) then
begin
i : = h (x);
new (P);
P ^. key : = x;
P ^. next : = T [i];
T[i] : = P
end
end;

procedure Delete (x : keytype; var T : dictionary);
var i : 0 .. N-1;
P, Q : pointer; found : boolean;
begin
i : = h (x);
found : = false;
if T[i] < > nil then
if T [i] ^. key = x then
begin { loi x khi danh sch}
T [i] : = T [i] ^. next;
found : = true
end else
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 120
begin {xem xt cc thnh phn tip theo trong danh sch}
Q : = T [i];
P : = Q ^. next;
while (P < > nil) and (not found) do
if P ^. key = x then
begin { loi x khi danh sch }
Q ^. next : = P ^. next;
found : = true
end else
begin
Q : = P;
P : = Q ^. next;
end;
end;
end;

5.4.2. Bng bm ng :
Trong bng bm m, mi thnh phn T [i] ca bng lu gi con tr tr ti danh
sch cc phn t ca tp hp c a vo lp th i (i = 0, ..., N-1). Khc vi bng bm
m, trong bng bm ng, mi phn t ca tp c lu gi trong chnh cc thnh phn T
[i] ca mng. Do ta c th khai bo kiu d liu t in c ci t bi bng bm
ng nh sau :

type Dictionary = array [o .. N-1] of keytype
y KeyType l kiu d liu ca kho ca cc phn t trong t in. Nh li
rng, hm bm
h : K {0, 1, ..., N-1}
l nh x t tp hp cc kho K vo tp hp cc ch s 0, 1, ..., N-1 ca mng. y l nh
x nhiu-vo-mt, nn c th xy ra mt s kha khc nhau c nh x vo cng mt
ch s. Do c th c trng hp, ta mun t kho x vo thnh phn i = h (x) ca
mng, nhng lu gi mt kho khc. Hon cnh ny c gi l s va chm
(collision). Vn t ra l gii quyt s va chm nh th no.
S va chm c gii quyt bng cch bm li (rehashing). Chin lc bm li l
nh sau. ta s ln lt xt cc v tr h
1
(x), h
2
(x), ... cho ti khi tm c mt v tr no
trng t x vo . Nu khng tm c v tr no trng th bng y v ta khng
th a x vo bng c na. y h
i
(x) (i = 1, 2, ...) l cc gi tr bm li ln th i, n
ch ph thuc vo kho x. Sau y chng ta s xt mt s phng php bm li.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 121
Cc phng php bm li.
1. Bm li tuyn tnh
y l phng php bm li n gin nht. Cc hm h
i
(x) c xc nh nh sau
:
h
i
(x) = (h (x) + i) mod N.
Tc l, ta xem mng l mng vng trn v ln lt xem xt cc v tr h (x) + 1, h
(x) + 2, ...
Chng hn, N = 10 v cc kho a, b, c, d, e c cc gi tr bm nh sau h (a) = 7,
h(b) = 1, h (c) = 4, h (d) = 3, h (e) = 3.

b d c e a
0 1 2 3 4 5 6 7 8 9
Hnh 5.2
Gi s ban u bng rng, tc l tt c cc thnh phn ca bng u cha mt gi
tr empty no khc vi tt c cc gi tr kho. Gi s ta mun a vo bng rng ln
lt cc gi tr kho a, b, c, d, e. Khi a, b, c, d ln lt c t vo cc v tr 7, 1, 4, 3
vo bng. V h(e) = 3, ta tm n thnh phn th 3 ca mng v thy n cha d. Tm
n thnh phn h
1
(e) = h (e) + 1 = 4, li thy n cha c. Tm n thnh phn h
2
(e) =
5, v tr ny rng, ta a e vo . Kt qu l ta c bng bm ng c minh ho trong
hnh 5.2.
Hn ch c bn ca phng php bm li tuyn tnh l cc gi tr kho s c
xp lin vo sau cc gi tr kho ban u a vo bng m khng gp va chm. Do
cng ngy cc gi tr kha trong bng cng t li thnh cc on di b lp y v gia
cc on b lp y l cc khong trng. V v vy, vic tm ra mt v tr trng trong bng
a gi tr mi vo, cng v sau cng chm.
2. Bm li bnh phng
Phng php bm li tt hn, cho php ta trnh c s tch t trong bng cc gi
tr xung quanh cc gi tr a vo bng ban u, l s dng cc hm bm li c xc
nh nh sau :
h
i
(x) = (h (x) + i
2
) mod N;
Hn ch ca phng php ny l ch, cc gi tr bm li khng ly y tt c
cc ch s ca mng. Do khi cn a vo bng mt gi tr mi, c th ta khng tm
c v tr rng, mc du trong bng hy cn cc v tr rng.
Xt trng hp chiu ca mng N l s nguyn t. Gi s vi i = j ta c
h
i
(x) = h
j
(x)
hay
h (x) + i
2
h (x) + j
2
(mod N)
Do
(i - j) (i +j) 0 (mod N)
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 122
V N l s nguyn t, ta suy ra, mt trong hai nhn thc i -j v i + j phi chia ht
cho N. Do hoc i > N/2 hoc j > N/2. T ta suy ra, vi i i t 1 n N div 2 tt c
cc gi tr bm li u khc nhau. Nh vy c tt c N div 2 gi tr bm li khc nhau.
Tc l, khi gp va chm, phng php bm li bnh phng s cho php tm n mt na
s v tr trong bng. Vic tm n mt na s v tr ca bng tm ra mt v tr trng,
trn thc t, l t khi cn n, tr trng hp bng gn y.
Trong cc phng php bm li trn, thc cht ta thm vo gi tr bm ban u
h (x) mt gia s A (i) nhn c gi tr bm li ln th i.
h
i
(x) = (h (x) + A (i)) mod N
Trong trng hp bm li tuyn tnh A (i) = i, cn trong trng hp bm li bnh
phng A (i) = i
2
.
Cn c th s dng cc hm gia s khc nhn c cc gi tr bm li. Chng
hn, A (i) = c i, trong c hng s > 1.
h
i
(x) = (h (x) + c i) mod N.
V d, vi N = 8, c= 3 v h (x) = 4, cc v tr trong bng c tm n l 4, 7, 2, 5,
0, 3, 6 v 1. Tt nhin, nu N v c c c chung ln hn 1, th phng php bm li ny
khng cho ta tm n tt c cc v tr trong bng; chng hn vi N = 8 v c = 2.
Mt cch tip cn khc l s dng cc gia s l cc s ngu nhin :
h
i
(x) = (h (x) + d
i
) mod N
trong , d
1
, d
2
, ... d
N-1

l mt hon v ngu nhin ca cc s 1, 2, ... N-1. Cn lu
rng, khi chn mt dy ngu nhin d
1
, d
2
, ..... d
N-1
, th trong mi php ton tm kim,
xen vo v loi b, nu gp va chm, ta phi s dng cng mt dy ngu nhin chn
tnh cc gi tr bm li.

Cc php ton t in trn bng bm ng.
Sau y chng ta s xt cc php ton t in (Insert, Delete, Member) khi t in
c ci t bi bng bm ng.
bit trong bng c cha kho x hay khng, ta phi " thm d" ln lt cc v
tr h (x), h
1
(x), h
2
(x)... Gi s ta cha thc hin php loi b no i vi bng. Khi c
hai kh nng. Hoc l tm c mt v tr ca bng cha x, hoc l tm c mt v tr
trng u tin h
k
(x). Trong trng hp th hai, ta c th kt lun rng, bng khng cha
x, v x khng th c t vo mt trong cc v tr h
k+1
(x), h
k+2
(x), tuy nhin tnh hnh s
khc, nu trong bng thc hin mt s ln loi b. Trong trng hp c s loi b
trong bng, nu tm ra v tr trng u tin h
k
(x) ta khng th m bo rng x khng
u trong cc v tr h
k+1
(x), h
k+2
(x), ... V rng c th lc a x v bng, v tr h
k
(x)
y, nhng sau n tr thnh trng bi mt php loi b no .
m bo rng, khi tm ra v tr trng u tin h
k
(x), ta c th tin chc rng
bng khng cha x, ta a vo mt hng mi "b loi b" (deleted) khc vi hng "trng"
(empty). Vi vic a vo hng deleted, mi khi cn loi b mt gi tr khi mt v tr
no trong bng, ta ch cn thay gi tr ca bng ti v tr bi hng deleted. Khi cn
a mt gi tr mi vo bng, ta c th t n vo v tr loi b.
Ta c th khai bo cu trc d liu bng bm ng biu din t in nh sau :
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 123
const N = . . . ;
empty = . . . ;
deleted = . . . ;
{empty v deleted l hai hng khc vi tt c cc gi tr kho ca cc phn t ca
t in}.
type Dictionary = array [ 0 .. N-1] of keytype;
var T : Dictionary;
Vi mi gi tr kho x, thc hin cc php ton Insert, Delete, Member, ta u
phi xc nh v tr trong bng c cha x, hoc v tr trong bng cn t x vo. T tng
tm ra cc v tr l thm d ln lt cc v tr h (x), h
1
(x), h
2
(x), .... iu c
thc hin bi th tc Location.
Sau y ta s m t th tc Location trong trng hp s dng phng php bm
li tuyn tnh.
Vi mi gi tr kho x, th tc ny cho php thm d cc v tr trong bng, xut
pht t v tr c xc nh bi gi tr bm h (x), ri ln lt qua cc v tr h
1
(x), h
2
(x),
... cho ti khi hoc tm c v tr c cha x, hoc tm ra v tr trng u tin.
Qu trnh thm d cng s dng li nu i qua ton b bng m khng thnh cng
(khng tm thy v tr cha x cng khng tm thy v tr trng). V tr m ti qu trnh
thm d dng li c ghi vo tham bin k. Ta a vo th tc tham bin j ghi li v
tr loi b (deleted) u tin hoc v tr trng u tin m qu trnh thm d pht hin ra,
nu trong bng cn c cc v tr nh th.
procedure Location (x : keytype; var k, j : integer);
var i : integer;
{bin i ghi li gi tr bm u tin h (x)}
begin
i : = h (x);
j : = i;
if (T [i] = x) or (T [i] = empty) then
k : = i else
begin
k = (i + 1) mod N;
while (k < > i) and ( T [k] < > x) and
(T [k] < > empty) do
begin
if (T [k] = deleted) and (T [j] < > deleted)
then j : = k;
k : = (k +1) mod N
end;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 124
if (T [k] = empty) and (T [j] < > deleted)
then j : = k
end;
end;


Sau y ta s m t cc th tc v hm thc hin cc php ton t in
function Member (x : keytype; var T : Dictionary) : boolean;
var k, j : integer;
begin
Location (x, k, j)
if T [k] = x then Member : = true
else Member : = false
end;


procedure Insert (x : keytype; var T : Dictionary);
var k, j : integer;
begin
Location (x, k, j);
if T [k] < > x then
if (T [j] = deleted) or (T[j] = empty) then T [j] := x
else writeln (' bng y')
else writeln (' bng c x')
end;


procedure Delete (x : keytype; var T : Dictionary);
var k, j : integer;
begin
Location (x, k, j);
if T [k] = x then T [k] : = deleted;
end;
5.5. Phn tch v nh gi cc phng php bm
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 125
Bng bm l mt cu trc d liu rt thch hp biu din t in v cc kiu d
liu tru tng khc c xy dng trn khi nim tp hp. Trong mc ny chng ta s
so snh nhng u im v hn ch ca hai phng php bm m v bm ng. Chng ta
cng s phn tch v nh gi hiu qu ca tng phng php.
Trong bng bm m, mi thnh phn T[i] ca bng cha con tr tr ti danh sch
lin kt cc phn t ca tp hp thuc lp th i. Do khng gian cn thit biu din
tp hp bi bng bm m s l khng gian cn lu cc bn ghi biu din cc phn t
ca tp hp cng thm khng gian ginh cho cc con tr (mi con tr ch i hi mt t
my). Trong khi cc bn ghi biu din cc phn t ca tp hp s c lu gi trong
chnh bng bm ng. Do , vi bng bm ng mt khng gian nh c nh c
ginh biu din tp hp. Bng s cha mt s v tr rng (cng nhiu v tr rng th
cng hn ch s va chm v trnh c hin tng y trn). Nh vy, nu cc bn ghi c
c ln (khng gian nh cn cho mi bn ghi ln), v ta s dng bng bm ng th s
lng ph mt khng gian ng k.
Mt u im khc ca bng bm m l khng cn phi t ra vn gii quyt s
va chm, v cc phn t thuc cng mt lp c t chc di dng danh sch lin kt.
Sau y chng ta s nh gi thi gian trung bnh cn thc hin mi php ton
trn t in trong cc bng bm.
Bng bm m :
Gi s c N r T [0], T [1], ..., T [N-1] v c M phn t c lu gi trong bng.
Gi s rng, hm bm phn phi u cc phn t vo mi r. Do trung bnh mi r
cha M/N phn t. V vy thi gian trung bnh thc hin mi php ton t in Insert,
Delete v Member l 0 (M/N). Nu ta chn N = M th thi gian trung bnh cho mi php
ton Insert, Delete v Member s tr thnh hng s.
Cn lu rng, ta nh gi thi gian trung bnh thc hin mi php ton t
in vi gi thit hm bm phn phi u cc phn t cho mi r. Trn thc t, gi thit
ny kh c thc hin. trong trng hp xu nht, tt c cc phn t u c a vo
cng mt r, th thi gian trung bnh cho mi php ton s t l vi c ca tp hp nh
trong trng hp danh sch.

Bng bm ng :
Sau y chng ta s tin hnh nh gi thi gian trung bnh thc hin mi php
ton t in trong bng bm ng. ta s s dng phng php xc sut nh gi.
Gi s rng, hm bm h phn phi u cc phn t ca tp hp trn cc ch s ca
bng. Gi s ta cn phi a mt phn t vo bng T c chiu N v bng cha k phn
t. Khi xc sut trong ln u ta tm ra c mt v tr trng l
N k
N

ta gi xc
sut ny l p
1
, n chnh l xc sut ca s kin cn mt ln thm d a phn t mi
vo bng. Xc sut p
2
ca s kin cn hai ln thm d a phn t mi vo bng s
bng xc sut ln thm d th nht gp va chm vi xc sut ln thm d th hai tm
c v tr trng tc l :

2 1
p
k
N
N k
N
=

.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 126

Mt cch tun t, ta tnh c xc sut p
i
ca s kin cn i ln thm d a
phn t mi vo bng. Nh vy ta c :

1
1
1
1 2
1
1
2
2 1
2
3
p
p
p
p
N k
N
k
N
N k
N
k
N
k
N
n k
N
k
N
k
N
k i
N i
N k
N i
i
=

=

+
+

+
.
. . ,
. ... .

Cn lu rng, a phn t mi vo bng cha k phn t i hi nhiu nht
l k + 1 ln thm d. T cng thc tnh gi tr trung bnh (phng sai) ca mt i lng
ngu nhin, ta tnh c s trung bnh cc ln thm d a mt phn t mi vo bng
cha k phn t

k
i
i
k
E
p
i
N
N k
= =
+
+
=
+

.
1
1
1
1

Ta c nhn xt rng, s ln thm d cn tm kim mt phn t trong bng cng
chnh l s ln thm d a n vo bng.
Gi s bng c chiu l N v n cha M phn t. Khi s trung bnh cc ln
thm d cn tm kim mt phn t trong bng l :

( )
E
M
N
M N k
N
M N N N M
N
M
k
k
M
k
M
N N M
E
H H
=
=
+
+
=
+
+
+ + +
+
|
\

|
.
|
=
+

=

+ +

1
1 1
1
1 1
1
1 1
2
1
0
1
0
1
1 1
. . .

trong ,
N H
N
= + + + 1
1
2
1
. . . l hm iu ho.
Gi tr gn ng ca hm iu ho c cho bi cng thc :

N
H
N
N
N N
= + + + ln c
1
2
1
12
1
120
2 4

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 127
trong 0 < c <
1
252
6
N
, cn T = 0, 5772156649.
l hng s le. Do ta c th xem H
N
~ ln N + .
Vy

| |
E
N
M
N N M =
+
+ +
1
1 1 ln( ) ln( )
t
M
N +
=
1
o , ta c
E
N
N M
N M
N
=
+
+
=
+
+
=
1 1
1
1 1
1
1
1
o o o
o ln ln ln( )
S o c gi l h s y, v n gn bng t s gia s phn t c trong bng v
chiu ca bng. Vi o = 0 c ngha l bng trng, cn o =
+
N
N 1
c ngha l bng
y. Cng thc :
E =
1
1
o
o ln( )
cho php ta tnh c s trung bnh E cc ln thm d cn thit tm kim, xen vo
bng mt phn t, theo h s y ca bng o. Gi tr ca o v E tng ng c cho
trong bng sau :

o
E
0,1
0,25
0,5
0,75
0,9
0,95
1,05
1,15
1,39
1,55
2,56
3,15

Nhn vo bng ny ta thy, bng bm ng l mt phng php cc k c hiu
qu ci t t in (tp hp vi cc php ton tm kim, xen vo v loi b), cng nh
nhiu kiu d liu tru tng khc. Ngay c khi bng y ti 95%, th cng ch cn
gn 3 ln thm d l tm ra c phn t cn tm trong bng, hoc tm ra c v tr trng
a phn t mi vo bng.
Hn ch cn bn ca bng bm ng l khng gian nh ginh lu gi cc phn
t ca tp hp b c nh. V vy mun va tit kim khng gian nh va trnh y
trn, ta cn phi nh gi la chn chiu ca bng cho thch hp.

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 128
5.6. Hng u tin
Trong mc ny chng ta s xt kiu d liu tru tng hng u tin. Hng u tin
l tp hp cng vi hai php ton Insert v DeleteMin. Php ton Insert c ngha thng
thng : xen phn t mi vo tp hp. Ta cn phi xc nh php ton DeleteMin. Gi s
Pri l hm u tin trn tp hp A no tc Pri l nh t t tp A vo mt tp P no
Pri : A P
trong P l tp c sp th t tuyn tnh (thng thng P l tp s nguyn hay tp s
thc no ). Vi mi a e A, ta gi Pri (a) l gi tr u tin ca a.
Php ton DeleteMin trn tp A l tm trn tp a phn t a c Pri (a) nh nht v
loi n khi tp A.
Thut ng : "hng u tin" c ngha nh sau. T : "hng" ni ln rng, cc phn
t thuc tp hp (ngi hoc i tng no ) ch i c "phc v". T "u tin" c
ngha rng, s phc v y khng c tin hnh theo ch "ai vo hng trc c
phc v trc" nh i vi hng xt trong chng 3 m ph thuc vo mc u tin
c xc nh trn cc phn t ca hng.
Chng ta c th k ra rt nhiu v d v hng u tin. Chng hn, trong mt h
phn chia thi gian thng c nhiu nhim v ch i c x l, trong c nhng
nhim v cn c x l trc cc nhim v khc. Khi tp hp cc nhim v ch i
c x l lp thnh mt hng u tin. Trong thc t, vic m phng cc qu trnh gm
cc s kin c lp vi thi gian cng dn n vic xt cc hng u tin.

Ci t hng u tin.
Chng ta c th biu din hng u tin bi danh sch c sp hoc khng c
sp. Danh sch ny c th ci t bi mng hoc di dng danh sch lin kt. Tt nht ta
biu din hng u tin di dng danh sch lin kt. Nu danh sch c sp xp theo
th t tng dn ca gi tr u tin ca cc phn t, th phn t cn loi b trong php ton
DeleteMin l phn t u tin trong danh sch, do ch cn thi gian khng i thc
hin php ton ny. Song xen vo danh sch mt phn t mi, ta phi tm v tr thch
hp t n vo , do php ton Insert i hi phi c thi gian 0 (n), vi danh sch
c n phn t. Nu ta ci t hng u tin bi danh sch lin kt khng c sp, th khi
xen phn t mi vo hng, ta ch cn a n vo u danh sch. Nhng vic thc hin
php ton DeleteMin li chm.
Bn c hy vit (xem nh bi tp) cc th tc thc hin cc php ton Insert v
DeleteMin trong cch ci t hng u tin bi danh sch lin kt c sp v khng c
sp.
Ta c nhn xt rng, bng bm khng thch hp biu din hng u tin. L do
l, bng bm khng cho ta cch no thun tin tm ra phn t c gi tr u tin nh
nht.
Trong phn sau ta s a ra mt phng php mi biu din hng u tin.
5.7. Heap v ci t hng u tin bi heap.
Heap l mt cy nh phn gn nhn vi cc nhn l cc gi tr thuc tp hp c
sp th t tuyn tnh, sao cho nhng iu kin sau y c thc hin.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 129
1. Tt c cc mc ca cy u y, tr mc thp nht c th thiu mt s nh.
2. mc thp nht, tt c cc l u xut hin lin tip t bn tri.
3. Gi tr ca mi nh khng ln hn gi tr ca cc nh con ca n.
Cn ch rng, iu kin 3 khng m bo heap l cy tm kim nh phn.
Hnh 5.3 minh ho mt s cy nh phn vi cc gi tr ca cc nh l cc s
nguyn c ghi trong mi nh. Hnh a l mt heap. Cn cc hnh b, c, d khng phi l
heap. Cy trong b vi phm iu kin 1, hnh c vi phm iu kin 2, cn hnh d vi phm
iu kin 3.

9

5 8

7 9 12 8

11 10 10
(a) (b)
2

5 4

3 6



(c) (d)
Hnh 5.3
Ch 1) Thut ng heap y l hon ton khc, khng lin quan g n thut
ng heap dng ch vng nh ng. 2) mt s tc gi cn gi heap l cy c sp b
phn (partially ordered tree).
Khi ly gi tr u tin lm gi tr ca mi nh, ta c th s dng heap biu
din hng u tin. Sau y ta s xt xem cc php ton i vi hng u tin c thc
hin trn heap nh th no.

Php ton Insert
xen mt phn t mi vo heap, u tin ta thm mt l mi lin k vi cc l
mc thp nht, nu mc thp nht cha y; cn nu mc thp nht y, th ta thm vo
mt l mc mi sao cho cc iu kin ca 1 v 2 ca heap c bo tn. Hnh 5.4a
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 130
minh ho cy sau khi thm mt l mi vi gi tr u tin l 3 vo heap trong hnh 5.3 a.
Tt nhin l cy nh phn trong hnh 5.4 a ni chung khng cn l heap, v iu kin 3 c
th b vi phm. Nu sau khi thm vo l mi cy khng cn l heap, th ta theo ng t
l mi ti gc cy. Nu mt nh c gi tr u tin nh hn nh cha ca n, th ta trao
i nh vi cha ca n. Qu trnh ny c minh ho trong hnh 5.4 b v c. D dng
chng minh c rng, sau qu trnh bin i trn ta c mt heap (bi tp).

2

5 8

7 9 12 8

11 10 10 3

(a)






2

5 8

7 3 12 8

11 10 10 9

(b)


2

3 8

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 131
7 5 12 8

11 10 10 9

(c)
Hnh 5.4
Php ton DeleteMin
Hin nhin l gc ca cy c gi tr u tin nh nht. Tuy nhin nu loi b gc
th cy khng cn l cy na. Do ta tin hnh nh sau : t vo gc phn t ca hng
u tin cha trong l ngoi cng bn phi mc thng nht, sau loi b l ny khi
cy. Hnh 5.5 a minh ho cy nhn c t cy trong hnh 5.3 a sau php bin i trn.
Ti y cy c th khng cn l heap, do iu kin 3 ca nh ngha heap b vi phm
gc cy. By gi ta i t gc xung. Gi s ti mt bc no ta ang nh a v hai
nh con ca n l b v c. Gi s nh a c gi tr u tin ln hn gi tr u tin ca t
nht mt trong hai nh b v c. xc nh, ta gi s rng gi tr u tin ca nh b
khng ln hn gi tr u tin ca nh c, pri (b) s pri (c). Khi ta s trao i nh a vi
nh b v i xung nh b. Qu trnh i xung s dng li cng lm l khi ta t ti mt
l ca cy. Ta c th thy qu trnh din ra nh th no trong hnh 5.5 b v c.


10

5 8

7 9 12 8

11 10
(a)

5

10 8

7 9 12 8

11 10
(b)

GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 132

5

7 8

10 9 12 8

11 10

(c)
Hnh 5.5

By gi ta th nh gi thi gian cn thit thc hin cc php ton Insert v
DeleteMin i vi hng u tin c biu din bi heap. Gi s hng cha n phn t. Khi
mi ng i trong cy khng cha nhiu hn 1 + logn nh. Th tc thc hin cc
php ton trnh by trn u cha qu trnh it l ln gc hoc ngc li. Trong
qu trnh mi nh i hi mt thi gian khng i c no . Do thi gian thc
hin mi php ton cng lm l c (1 + logn) s 2c logn, vi n > 2, tc l 0 (logn).
Ci t heap bi mng
Gi s ta nh s cc nh ca heap t trn xung di v t tri sang phi (trong
cng mt mc), bt u t gc c s hiu l 1 (xem hnh 5.6)



1

2 3

4 5 6 7

8 9 10 11

Hnh 5.6
T cc iu kin 1 v 2 trong nh ngha ca heap, ta nhn thy rng, nu mt
nh c s hiu l i, th nh con bn tri (nu c) ca n l 2i, v nh con bn phi (nu
c) ca n l 2i + 1. Hay ni cch khc cha ca nh i l nh i div 2 vi i > 1. Nu ta s
dng mng H vi ch s chy t 1 n N (N l s ln nht cc phn t c trong hng u
tin), th cc nh ca cy k t gc ln lt theo cc mc v trong cng mt mc c
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 133
k t tri sang phi, s cha trong cc thnh phn ca mng H [1], H [2], ......, H [n]. Do
ta s ci t hng u tin bi mng H cng vi mt bin last ghi ch s cui cng
ca thnh phn mng c cha phn t ca hng. Chng ta c khai bo sau

const N = ......;
type PriQueue = record
element : array [1.. N] of item;
last : integer
end;
{item l kiu bn ghi no m t phn t ca hng u tin}.
var H : PriQueuen;
Vic khi to mt hng rng c thc hin bi lnh
H.last : = 0
T cc thut ton thc hin cc php ton Insert v DeleteMin trnh by, ta d
dng vit c cc th tc thc hin cc php ton trn hng u tin.

procedure Insert (x : item; var H : PriQueue);
var i : integer;
temp : item;
begin
if H. last > = N then writeln ('hng y')
else begin
H. last : = H. last + 1;
H. element [H. last] : = x;
i : = H. last;
{i ghi li s hiu l mi thm vo}
while (i > 1) and (Pri(H.element [i]) <
Pri(H.element[i div 2])) do
begin
temp : = H. element [i];
H. element [i] : = H. element [i div 2];
H.element [i div 2] : = temp;
i : = i div 2
end
{vng lp while thc hin qu trnh i t l mi ln}
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 134
end
end;


procedure DeleteMin (var H : PriQueue; var x : item);
{loi b phn t c gi tr u tin nh nht khi hng v phn t ny c lu vo
bin x}
var i, j : integer;
{i ghi li s hiu ca cc nh trong qu trnh i t gc xung; j ghi li
mt trong hai nh con ca i c gi tr u tin nh hn nh kia}.
temp : item;
Condition3 : boolean;
{bin condition3 ch ra iu kin 3 ca heap c tho mn hay khng}
begin
if H. last = 0 then writeln (' hng rng')
else begin
x : = H. element [1];
H. element [1] : = H. element [ H.last];
H. last : = H. last + 1;
i = 1;
condition 3 : = false;
while (i < = H. last div 2) and (not condition 3) do
begin
if 2 * i = H. last then j : = 2 * i
else if Pri (H. element [2 * i] < = Pri (H. element [2*i+1]
then j : = 2 *i else j : = 2 * i +1;
if Pri (H.element [i] > Pri (H. element [j] then
begin
temp : = H.element [i];
H. element [i] : = H. element [j];
H. element [j] : = temp;
i : = j
end else condition3 : = true;
end;
end;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 135
end;
Trong th tc trn, vng lp while thc hin qu trnh i t gc xung v dng li
khi iu kin 3 c tho mn.















GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 136
Chng 6

Bng

Trong chng trc chng ta nghin cu m hnh d liu tp hp v mt s
kiu d liu tru tng (t in, hng u tin) c xy dng trn c s khi nim tp
hp. Trong chng ny chng ta s nghin cu kiu d liu tru tng bng c xy
dng trn c s khi nim hm (nh x). Chng ta cng s xt vic ci t mt trng
hp c bit ca bng, l cc bng ch nht.
6.1. Kiu d liu tru tng bng :
Trc ht chng ta nhc li khi nim hm trong ton hc. Nh li rng, mt
quan h R t tp A n tp B l mt tp con no ca tch cac A x B, tc l R l mt
tp hp no cc cp (a, b) vi a e A, b e B. Mt hm f : A B (f l hm t A n B)
l mt quan h f t A n B sao cho nu (a, b) e f v (a, c) e f th b = c. Tc l, quan h f
l mt hm, nu n khng cha cc cp (a, b), (a, c) vi b = c. Nu (a, b) e f, th ta ni b
l gi tr ca hm f ti a v k hiu l f (a), b = f (a). Tp hp tt c cc a e A, sao cho
tn ti cp (a, b) e f, c gi l min xc nh ca hm f v k hiu l Dom (f).
C nhng hm, chng hn hm f(x) = e
x
, ta c thut ton xc nh gi tr ca
hm f(x) vi mi x. Vi nhng hm nh th ta c th ci t bi cc hm trong Pascal
hoc C. Tuy nhin c rt nhiu hm. Chng hn hm cho tng ng mi nhn vin lm
vic trong mt c quan vi lng hin ti ca ngi , ta ch c th m t bi bng
lng. Trong cc trng hp nh th, m t mt hm f : A B, ta phi lu gi mt
bng m t cc thng tin v cc i tng a e A v cc thng tin v cc i tng b e B
tng ng vi mi a.
Mt bng vi tp ch s A v tp gi tr B l mt hm f no t A n B cng
vi cc php ton sau y :
1. Truy xut : vi ch s cho trc a thuc min xc nh ca hm, tm ra gi tr
ca hm ti a.
2. Sa i : vi ch s cho trc a thuc min xc nh ca hm, thay gi tr ca
hm ti a bi mt gi tr khc cho trc.
3. Xen vo : thm vo min xc nh ca hm mt ch s mi v xc nh gi tr
ca hm ti .
4. Loi b : loi mt ch s no khi min xc nh ca hm cng vi gi tr
ca hm ti .
i vi bng, cc php ton truy xut v sa i l quan trng nht. Thng
thng trong cc p dng, khi lu gi mt bng, ta ch cn n vic truy xut thng tin
t bng v sa i thng tin trong bng. Tuy nhin trong mt s p dng ta phi cn n
cc php ton xen vo v loi b.
Sau y chng ta a ra mt v d v bng. Mt ma trn m hng, n ct B = [b
ij
] c
th xem nh mt bng. Tp ch s A y l tp cc cp (i, j) vi i = 1, 2, ..... , M v j =
1, 2, ....., N. Nu ma trn l ma trn cc s nguyn, ta c th xt ma trn nh mt hm f
t tp ch s n tp cc s nguyn, trong F (i, j) = b
ij
. sau ny chng ta s gi cc
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 137
bng m tp ch s l tp cc cp (i, j) vi i = 1, 2, ..., M v j = 1, 2, ...., N l cc bng
ch nht c M hng v N ct.
6.2. Ci t bng :
6.2.1 Ci t bng bi mng :
Gi s tp ch s ca bng l mt kiu n c th dng lm kiu ch s ca mt
mng. Trong Pascal kiu ch s ca mng c th l min con ca cc s nguyn, chng
hn 1 . . 1000; c th l kiu k t hoc min con ca kiu k t, chng hn 'A' . . 'Z', c
th l mt kiu lit k hoch min con ca kiu lit k no . Trong trng hp ny, ta
c th biu din bng bi mng. ch rng, ti mt ch s no hm khng xc nh,
ta a thm vo mt gi tr mi undefined (khng xc nh) khc vi tt c cc gi tr
thuc tp gi tr ca bng. Ti cc ch s m hm khng xc nh, ta s gn cho cc thnh
phn ca mng ti cc ch s gi tr undefined.
Ta c th khai bo kiu bng nh sau :

type table = array [indextype] of valuetype;
{indextype l kiu ch s, valuetupe l kiu gi tr ca bng bao gm gi
tr undefine}.
var T : table;
i : indextype;
Gi s value1, value2 l ch s u tin v cui cng, khi vic khi to mt
bng rng (nh x khng xc nh khp ni) c thc hin bi lnh
For i : = value1 to value2 do
T [i] : = undefined;
Vic ci t bng bi mng cho php ta truy cp trc tip n mi thnh phn ca
bng. cc php ton i vi bng c thc hin rt d dng (bn c c th thy ngay
cn phi lm g) v ch i hi mt thi gian 0 (1). Cn ch rng, nu tp ch s ca
bng khng th dng lm kiu ch s ca mng, nhng c th m ho bi mt kiu ch s
no ca mng, th ta cng c th ci t bng bi mng. Qu trnh ci t gm hai giai
on, u tin l m ho tp ch s c mt kiu ch s ca mng, sau mi dng
mng.
6.2.2. Ci t bng bi danh sch
V mt bng vi tp ch s A v tp gi tr B c th xem nh mt tp no cc
cp (a, b), trong a e A v b e B l gi tr tng ng vi a. Do , ta c th biu din
bng bi danh sch cc cp (a, b).
Ni c th hn, ta c th ci t bng bi danh sch cc phn t, mi phn t l
mt bn ghi c dng :

type element = record
index : indextype;
value : valuetype
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 138
end;
y danh sch c th c ci t bi mt trong cc cch m ta xt trong
chng 3. Tc l ta c th ci t bi danh sch k cn (dng mng) hoc danh sch lin
kt. Cc php ton i vi bng c qui v cc php ton tm kim, xen vo v loi b
trn danh sch. R rng l, vi cch ci t t ny, cc php ton i vi bng c thc
hin km hiu qu, v chng i hi thi gian trung bnh t l vi s thnh phn ca bng.
Nu c mt th t tuyn tnh xc nh trn tp ch s ca bng, ta nn ci t
bng bi danh sch c sp theo th t xc nh trn tp ch s.
6.2.3. Ci t bng bi bng bm.
Trong nhiu cnh hung, bng bm l cu trc d liu thch hp nht ci t
mt bng.
Vic xy dng cc bng bm (m hoc ng) biu din mt bng hon ton
ging nh vic xy dng bng bm cho t in. Chng ta ch cn lu mt s im khc
sau y.
Cc hm bm s "bm" cc phn t ca tp ch s A ca bng vo cc 'r'. Tc l
nu bng bm gm N r th hm bm l hm h t tp ch s A vo tp {0, 1 . . . . N-1}.
Trong bng bm m, i vi t in ta c mi r l mt danh sch cc phn t
ca t in; Cn i vi bng, vi tp ch s A v tp gi tr B th mi r l mt danh
sch no , cc cp (a, b) trong a e A, b e B. Chnh xc hn, cu trc d liu bng
bm m biu din bng c khai bo nh sau :
type pointer = ^cell;
type cell = record
index : indextype;
value : valuetype;
next : pointer
end;
table = array [0 . . N-1] of pointer;
Hin nhin bng bm ng biu din bng s c cu trc c m t sau :

type table = array [0 . . N-1] of element;
trong , element l bn ghi khai bo trong mc 6.2.2.
Trong cch ci t bng bi bng bm (m hoc ng), php ton truy xut v sa
i bng chnh l php tm kim trn bng bm theo ch s a e A v c hoc thay i
gi tr ca trng value ca bn ghi c trng index l a. Cn php ton xen vo v loi
b trn bng l php ton xen vo v loi b trn bng bm theo ch s cho.
6.3. Bng ch nht
Trong mc ny chng ta s xt vic ci t cc bng ch nht, tc l cc bng m
cc thnh phn ca bng c xp thnh hnh ch nht gm M hng v N ct. V tm
quan trng c bit ca cc bng ch nht, nn trong hu ht cc ngn ng lp trnh bc
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 139
cao u c phng tin thun tin v hiu qu biu din bng ch nht, l mng hai
chiu. Chng hn, trong Pascal mt bng ch nht M hng v N ct c khai bo
type table = array [1 . . M, 1 . . N] of elementtype;
trong elementtype l kiu ca cc phn t ca bng.
Cch t nhin nht c thng tin trong mt bng ch nht l ln lt theo hng
v trong mt hng t tri sang phi. cng chnh l cch m cc chng trnh dch xp
cc thnh phn vo cc vng nh lin tip ca b nh trong. Do , nu T l mt TABLE
v bit c a ch ca vng nh lu gi thnh phn T [o, ], ta s xc nh c ngay
a ch ca T [i, j]. Mng T s c ginh ring mt khng gian nh c nh gm M x N
n v nh lin tip ( y, n v nh c xem l vng nh lu gi mt thnh phn
ca mng).
Trong nhiu bi ton, ta khng cn thit phi biu din thng tin ti mi v tr
trong bng. C th xy ra, trong mt bng ch c mt s gi tr ti mt s v tr l c
ngha, cn cc gi tr ti cc v tr cn li l bng nhau hoc ta khng cn quan tm n.
Chng hn nh bng cc s nguyn trong hnh 6.1.













Hnh 6.1 Mt v d v bng tha tht
Bng ny ch cha 6 thnh phn khc khng, cn 14 thnh phn cn li bng 0.
Cc bng nh th gi l cc bng tha tht. Hin nhin nu ci t cc bng tha tht bi
mng hai chiu s lng ph nhiu b nh. Chng hn mt ma trn nguyn 200 x 200, mi
hng khng c qu 4 thnh phn khc 0, nu dng mng s dng n 80.000 byte. Trong
khi , nu dng phng php thch hp, c th ch cn n 1/10 khng gian nh . Sau
y ta s nghin cu vic ci t nhng bng c dng c bit.
6.3.1. Bng tam gic v bng rng lc.
Bng tam gic l bng vung (s dng bng s ct) m tt c cc thnh phn c
ngha trong bng u nm cc v tr (i, j) vi j s i). V d bng trong hnh 6.2a l bng
tam gic, phn cha thng tin c ngha u nm cc v tr (i, j) vi j s i. Vi bng tam
gic n dng, ta ch cn lu gi 1 + 2 + . . . + n = n (n + 1)/2 thnh phn. Ta s dng mt
6 0 0 7 0


0 0 0 0 0


0 8 0 1 9

3 0 0 0 0
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 140
mng mt chiu lu gi cc thnh phn ca bng (hnh 6.2b). Cc thnh phn ca
bng ln lt theo dng, trong mt dng k t tri sang phi, c lu vo cc thnh
phn ca mng. bit c thnh phn ca mng T cha thnh phn ca bng ti v tr
(i, j) bt k, ta a vo mt mng ph P. Mng ny c s chiu bng s dng ca bng.
Vi mi dng i, 1 s i s n, P[i] cha v tr trong mng T k t ta s lu gi cc thnh
phn ca bng dng i (hnh 6.2c)








1
2

3 (a)
4
5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
a b c d e f g h i k l m n o p
(b)


1 2 3 4 5
(c)
Hnh 6.2 Bng tam gic

Ta d dng tnh c cc gi tr ca mng P
P [1] = 0
P [2] = 1
P [3] = 2 + 1 = 3
. . . . . . . . . . .
P [] = i - 1 + P[i - 1]
Bit c cc P [i], ta xc nh c thnh phn ca mng T lu gi thnh phn
ca bng ti v tr (i, j) bt k. C th, thnh phn ca bng ti v tr (i, j) c lu gi ti
a
b c
d e f
g h i k
l m n o p
0 1 3 6 10
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 141
v tr P [i] + j ca mng T. Chng hn, k t h v tr (4, 2) trong bng c lu gi v
tr P[4] + 2 = 6 + 2 = 8 trong mng T. Nh vy, ta ci t mt bng tam gic bi hai
mng mt chiu T v P. Nh trn chng t vi cch ci t ny ta c th truy cp trc
tip n tng thnh phn ca bng.
Mt bng rng lc l bng ch nht m trong mi dng cc thng tin trong bng
c xp lin tc k t ct th nht (s phn t trong mi dng nhiu t tu ). Hnh 6.3
minh ho mt bng rng lc.


1
2
3
4
5
6
Hnh 6.3 Minh ho mt bng rng lc
Bng cch hon ton tng t nh i vi bng tam gic, ta c th ci t bng
rng lc bi hai mng mt chiu T v P. Cc thnh phn ca bng rng lc cng c
xp vo mng T ln lt theo hng v theo ct. iu khc nhau duy nht y l, gi tr
cha trong mi thnh phn khc nhau ca mng P c xc nh nh sau :
P [1] = 0,
P [i] = P [i - 1] + s thnh phn ca bng dng i - 1 vi mi i > 1. Chng hn,
vi bng trong hnh 6.2, ta c P [1] = 0, P [2] = 3, P [3] = 10, P [4] = 10, P [5] = 12, P
[6] = 17.
6.3.2. Bng tha tht
Bng tha tht l bng ch nht m cc thng tin c ngha trong bng c phn
b mt cch tha tht, ri rc khng theo mt qui lut no c. Hnh 6.1 cho ta mt v d
v bng tha tht, thng tin cha trong bng l cc s nguyn. ng nhin y l
khng th dng mng hai chiu biu din mt bng tha tht, v lng ph nhiu b
nh. ta cng khng th dng mng mt chiu lu gi cc thnh phn ca bng nh ta
lm i vi bng tam gic v bng rng lc. Nguyn nhn l v, cc thnh phn c
nghi ca bng phn b khng theo mt qui lut no, nn ta khng th nh v c thnh
phn ca bng trong mng mt chiu.
Mt phng php tt ci t cc bng tha tht l dng cc danh sch lin kt
biu din cc hng v cc ct ca bng. Mi thnh phn ca bng v tr (i, j) c
a vo hai danh sch : danh sch cc thnh phn ca bng dng th i v danh sch cc
thnh phn ca bng ct th j. Tc l mi thnh phn ca bng c biu din bi mt
bn ghi c kiu element c khai bo nh sau :

type pointer = ^ element;
element = record
a b c
d e f g h i k
l m
n o p q r
s t u v
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 142
row : integer;
col : integer ;
value : valuetype;
ptrrow : pointer;
ptrcol : pointer;
end;
trong row v col l ch s hng v ct; ptrrow v ptrcol l con tr lin kt trong danh
sch hng v danh sch ct; cn value l gi tr ca mi thnh phn. ta s biu din mi
bn ghi di dng hnh 6.4a. Mi hng v mi ct ca bng c biu din bi danh sch
lin kt, vng trn v c u. u ca mi hng c trng col = 0, cn u ca mi ct
c trng row = 0. Khi , cu trc d liu biu din bng trong hnh 6.1 c minh ho
trong hnh 6.4b.




(a)
T














Mt phng php khc ci t mt bng tha tht l s dng hai mng. Mt
mng hai chiu c c nh c ca bng, mng s c gi tr l 1 ti cc v tr m gi tr ca
bng c ngha v c gi tr l 0 ti cc v tr khc. V d biu din bng trong hnh
6.1, ta s dng mng c minh ho bi hnh 6.5 a. Bn cnh mng hai chiu ch cha 1
hoc 0, ta s s dng mt mng mt chiu lu li cc gi tr c ngha ca bng. Chng
hn, hnh 6.5b minh ho mng mt chiu ng vi bng trong hnh 6.1
row col value

ptrcol ptrrow
- 0
0 1 0 2 0 3 0 4 0 5
1 0 1 1 6 1 4 7
2 0
3 0
4 0
3 2 8 3 4 1 3 5 9
4 1 3
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 143



1 0 0 1 0
0 0 0 0 0
0 1 0 1 1
1 0 0 0 0
(a)

6 7 8 1 9 3
(b)
Hnh 6.5 Mng mt chiu ng vi bng trong hnh 6.1
Hiu qu tit kim b nh ca phng php ny l r rng. Chng hn, i vi
bng cc s nguyn (nh trong hnh 6.1), thay cho vic s dng mng cc s nguyn
(mi s nguyn cn 2 byte = 16 bit) ta s dng mng cc bit.
6.4. Tr chi i sng
Trong mc ny chng ta trnh by mt p dng ca phng php ci t bng bi
bng bm gii quyt bi ton 'tr chi i sng' (game of life). Tr chi i sng c
nh ton hc Anh J.H Conway a ra nm 1970.
i sng ca mt cng ng cc c th sng din ra trn mt li vung khng
gii hn. Mi vung c th c mt c th sng hoc khng. vung c mt c th
sng gi l t bo sng, ngc li l t bo cht. Cc t bo thay i t th h ny sang
th h sau tu thuc vo cc t bo sng ln cn. Mi t bo hnh vung c tm t bo
ln cn tip gip vi t bo cho theo cc cnh v cc gc.
Cc t bo s thay i theo cc qui lut sau :
1. Nu mt t bo sng, nhng s t bo sng ln cn n khng nhiu hn 1, th th h
sau n s cht (cht v c c)
2. Nu mt t bo sng, nhng s t bo sng ln cn n l 2 hoc 3, th th h sau n
vn sng.
3. Nu mt t bo sng, nhng s t bo sng ln cn n khng t hn 4, th th h sau
n s cht (cht v qu ng!).
4. Nu mt t bo cht v c ng 3 t bo sng ln cn, th th h sau n s tr thnh
t bo sng. Trong trng hp cn li, mt t bo cht vn cn cht th h sau.
5. Trong mi th h, s sinh ra v cht i din ra ng thi, khng nh hng n nhau.
Sau y ta s xt s pht trin ca mt s cng ng t bo m th h u tin
c cho trong cc hnh 6.6 (du cho nh du t bo sng). Cng ng trong hnh 6.6a
s bin mt sau mt th h , v c hai t bo cng cht do c c. Cng ng trong hnh
6.6 b s n nh t th h ny sang th h khc, v khng c t bo no sinh ra cng
khng c t bo no cht i. S pht trin ca cng ng trong hnh 6.6c ginh cho bn
c.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 144




x x
x x x x


(a) (b)


x x x




(c)
Hnh 6.6 Th h u tin ca mt s cng ng t bo
Chng ta c th thy rng, t nhng cnh hung ban u nh b, mt s cng
ng c th pht trin thnh nhng cng ng rng ln, mt s cng ng c th thay i
v n nh sau mt s th h, hoc c th lp i lp li mt s cnh hung no ; mt s
khc c th mt i.
Sau khi ra i khng lu, tr chi i sng c Martin Gardner bn ti trong
bo 'Scientific American'. T n thu ht s ch ca nhiu ngi.
Tr chi i sng l mt bi tp lp trnh rt hay cho nhng ngi mi hc lp
trnh v cho c nhung ai nm c nhng cu trc d liu phc tp.
u tin ta c th ngh ngay n dng mt mng ch nht kh ln biu din
cc th h ca mt cng ng t bo. Mng s c gi tr l 1 ti cc v tr ca cc t bo
sng v 0 ng vi cc t bo cht. xc nh c s thay i ca cc t bo t th h
ny sang th h khc, ta ch cn m s t bo sng ln cn mi t bo v p dng cc
lut t 1) n 4). Cnh hung ca th h tip theo c ghi vo mt mng mi. Ta d
dng vit c lc chng trnh thc hin phng n trn.

program LifeGame;
const
N = . . . ;
M = . . . ;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 145
type
row = 1 . . N; {hng ca mng}
col = 1 . . M; {ct ca mng}
status = (alive, dead) {mi t bo mt trong hai trng thi
(status ) : sng (aive) v cht (dead)}
Table = array [row, col] of status;
var
T, new T : Table
i : row;
j : col;
again : boolean;
{Sau y m t cc th tc v hm}
procedure Initiation (var T : Table);
{a vo bng ban u}
function Count (i, j : integer) : 0 . . 8;
{m s t bo sng ln cn t bo v tr (i, j)}
procedure copy (new T : Table; v T : Table);
{sao chp mng new T sang mngT}
begin
Initiation (T);
WriteTable (T);
repeat
for i : = 1 to N do
for j : = 1 to M do
case count (i, j) of
0,1 : new T [i, j] : = dead;
2 : new T [i, j] : = T [i, j];
3 : new T [i, j] : = alive;
4, 5, 6, 7, 8 : new T[i, j] : = dead
end;
Copy (new T, T);
WriteTable (T);
Readln (again);
until not again
end.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 146

Bn c d dng vit c cc th tc v hm trong chng trnh trn. Ring i
vi hm count, ta cn lu rng, tnh c s t bo sng ln cn mt t bo ta ch
cn xt 8 t bo ln cn vi t bo cho, nu n gia bng. Cn nu n ra bng th
s t bo ln cn n s khng phi th.
By gi ta hy xt nhng u tin v hn ch ca chng trnh trn. u im ca
chng trnh trn l n gin v d hiu. Song n c nhiu nhc im. Trc ht ta
s dng mng m t cnh hung ca cc th h t bo tc l ta ng khung ch xt
s pht trin ca cng ng t bo trong phm vi mng. Trn thc t t cnh hung ban
u, mt cng ng c th s pht trin vt qu gii hn ca mng, ch sau mt s th
h. Ta cng xt li t bo nh mt bng ch nht y (mi thnh phn ca bng u
cha thng tin), song thc ra, ta c mt bng tha tht, v khng cn xt ti cc t bo
cht m cc t bo ln cn n u cht. Mt nhc im khc na l xc nh cc th
h t bo , ta tnh li s t bo sng ln cn ca mi t bo. iu ny lm lng ph
nhiu thi gian, v khng phi tt c, m ch c mt s t bo c s t bo sng ln cn
thay i. khc phc nhc im ny, bn cnh mng T ta a vo mt mng khc
Live Neighbors ghi li s cc t bo sng ln cn mi t bo. Tc l

var LiveNeighbors : array [row, col] of 0 . . 8;
Khi , t th h ny sang th h khc, ta ch cn xc nh li cc gi tr ca
mng LiveNeighbors ti cc t bo k vi cc t bo t sng thnh cht hoc t cht
thnh sng. Nh vy thay cho hm Count, ta s mng LiveNeighbors. Bn c hy vit
chng trnh thc hin n ny. Chng trnh ny vn cha phi l chng trnh tt, v
ta cn phi i qua ton b mng LiveNeighbors pht hin ra cc t bo s sinh hoc s
cht i th h sau. Cn c nhiu cch ci tin chng trnh (bi tp)
Nh trn ni, vic s dng mng m t cc th h t bo l khng thch hp,
n khng phn nh y s pht trin ca cc cng ng t bo. Cn phi xt bng cc
t bo l mt bng v hn, trong tng ng vo mi v tr (i, j) l mt t bo c hon
ton xc nh bi v tr ca n v s cc t bo sng ln cn n. Do phng php tt
nht l dng cc cu trc d liu bng bm m biu din bng cc t bo. y cn
ch rng, hm bm h s 'bm' cc v tr (i; j) ca cc t bo vo cc v tr 0, 1, . . , N-1
ca bng bm.
h : {(i; j) |(i; j) v tr ca t bo} {0, 1, . . . , N-1}
Mi t bo s c a vo danh sch lin kt cc t bo thuc mt 'r' no
ca bng bm. Do mi t bo c m t bi cu trc bn ghi sau

type cell = record
row,
col : integer;
state : (alive, dead);
count : 0 . . 8;
next : ^ cell;
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 147
end;
Table = array [0 . . N-1] of ^ cell;
Khi mun xc nh cc t bo s sng hoc s cht th h sau, trnh phi
xem xt ton b bng bm, ta a vo hai danh sch. Danh cch Change ghi li cc t
bo m s t bo sng ln cn th h hin ti, c thay i so vi th h trc; do ,
danh sch Change s cha cc t bo ang sng s tr thnh cht hoc ang cht s tr
thnh sng th h sau. Danh sch NextChange s ghi li cc t bo m s t bo sng
ln cn th h sau, c thay i so vi th h hin ti.
Chng ta c th a thm vo mi bn ghi biu din t bo hai con tr. Mt con
tr lin kt cc t bo thuc danh sch Change v mt con tr lin kt cc t bo
thuc danh sch NextChange. Nh vy mi bn ghi t bo s c 3 trng con tr. iu
ny s tiu tn nhiu khng gian nh, v c th ch c mt s t t bo c a vo hai
danh sch ny. Do cch tt hn l ta s a cc con tr tr n cc t bo thuc danh
sch Change (NextChange) vo danh sch Change (NextChange) thay cho vic a chnh
cc t bo thuc danh sch Change(NextChange) vo danh sch Change (NextChange).
Ni mt cch khc, danh sch Change v NextChange s l cc danh sch lin kt, gm
cc bn ghi c cu trc sau

type node = record
entry : ^ cell;
next : ^ node;
end;
Mi khi cn xc nh cnh hung ca mt cng ng t bo mt th h no ,
ta i qua danh sch Change. Khi gp t bo t trng thi cht tr thnh sng (hoc t
trng thi sng tr thnh cht), ta ch cn thay i trng state cho n nhn gi tr alive
(hoc dead) ng thi ta s tm trong bng bm nhng t bo ln cn ca cc t bo v
a chng vo danh sch NextChange. Nu mt t bo l ln cn ca t bo t cht tr
thnh sng (hoc t sng tr thnh cht) th trng count c tng ln 1 (hoc c
gim i 1). Qu trnh trn c thc hin bi th tc Traverse (qua i).
Chng ta c phc tho chng trnh sau :

program LifeGame;
const
N = ; {N l s thnh phn ca bng bm}
type
ptrcell = cell {con tr lin kt cc t bo trong cc danh
sch mi ca bng bm}
cell = record
row,
col : integer, {v tr ca t bo}
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 148
satate : (alive, dead) {trng thi ca t bo}
count : 0 . . 8; {s ln cn sng ca t bo}
next : ptrcell
end;
ptrnode = ^ node; {con tr lin kt trong danh sch Change v
NextChange}
node = record
entry : ptrcell;
next : ptrnode
end;
Table = array [0 , , N-1] of ptrcell;
var
T : Table;
Change, NextChange : ptrnode;
again : boolean;
procedure Initiation (var T : Table; var Change : ptrnode);
{th tc ny xy dng bng bm T v danh sch Change (ban u
Change l danh sch cc t bo ang cht s thnh sng v ang sng s thnh cht) ng
vi cnh hung ban u}.
procedure Traverse (var Change, NextChange : ptrnode);
{i qua danh sch Change, cp nht bng T v xy dng
bng NexChange}.
procedure WriteTable (var T : Table);
{vit ra bng T}
begin {chng trnh chnh}
Initiation (T, Change);
repeat
Traverse (Change, NextChange);
WriteTable;
Change : = NextChange;
readln (again)
until not again
end.


GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 149
Sau y chng ta s m t chi tit th tc Traverse, cn cc th tc Initiation v
WriteTable c li xem nh bi tp.
Trong th tc Traverse, vi mi ln cn (i, j) ca mt t bo cht tr thnh sng,
(hoc sng tr thnh cht), ta phi tm xem trong bng bm c t bo v tr (i, j)
cha, nu cha th a n vo bng bm (vi trng state l dead v trng count bng
1), ta s dng bin con tr q ghi li a ch ca t bo v tr (i, j). Qu trnh trn c
thc hin bng th tc
GetTable (i, j : integer; var q : ptrcell)
Chng ta s s dng th tc
Add (q : ptrcell; var NextChange : ptrnode)
a q vo danh sch NextChange.
Chng ta c th m t th tc Traverse nh sau :

procedure Traverse;
var
p, p1 : ptrnode;
i, j : integer;
q : ptrcell;
procedure GetTable (i, j : integer; var q : ptrcell);
procedure Add (q : ptrcell; var NextChange : ptrnode);
begin {bt u th tc Traverse}
p : = Change;
NextChange : = nil;
while p < > nil do
begin
with p ^ do
with entry ^ do
begin
if (state = dead) and (count = 3) then
begin
state : = alive;
for i : = row -1 to row + 1 do
for j : = col - 1 to col + 1 do
if (i <> row) and (j < > col) then
begin
GetTable (i, j, q);
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 150
q ^. count : = q ^. count + 1;
Add (q, NextChange)
end
end else
if (state = alive) and ( (count < = 1) or (count > = 4) )
then bigin
state : = dead;
for i : = row - 1 to row + 1 do
for j : = col - 1 to col + 1 do
if (i < > row) and (j < > col) then
begin
Get Table ( i, j, q);
q ^. count : = q ^. count - 1;
Add (q, NextChange)
end
end
end; {ht lnh with}
p 1 : = p;
p : = p ^ . next;
dispose (p1);
end {ht vng lp while}
end; {ht th tc Traverse}


Trong chng trnh LifeGame, ta dng danh sch Change ghi li cc t bo m
s t bo sng ln cn chng th h hin ti c thay i so vi th h trc. Chng ta
cn phi i qua danh sch Change tm cc t bo ang cht s tr thnh sng v ang
sng s tr thnh cht th h sau. Do vn cn lng ph nhiu thi gian. By gi thay
cho dng danh sch Change, nu chng ta s dng hai danh sch BecomeLive ghi li cc
t bo cht c kh nng thnh sng v BecomeDead ghi li cc t bo sng c kh nng
thnh cht th ta s thu hp c phm vi cc t bo cn xem xt. Chng ti li cho
bn c tip tc pht trin v vit chng trnh thc hin n ny.





GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 151

Chng 7

Cc cu trc d liu b nh ngoi

Chng ny ginh trnh by m hnh t chc d liu b nh ngoi, cc cu
trc d liu lu gi v tm kim thng tin b nh ngoi : file bm, file c ch s, B
cy. Vi mi phng php t chc file, chng ta s trnh by cc thut ton thc hin
cc php ton tm kim, xen vo, loi b v sa i trn file.
7.1. M hnh t chc d liu b nh ngoi :
Cc cu trc d liu (CTDL) m chng ta xt t u ti nay u l cc CTDL
c lu gi trong b nh chnh. Nhng trong nhiu p dng, s cc d liu cn c lu
gi vt qu kh nng ca b nh chnh. Cc my tnh hin nay u c trang b cc
thit b b nh ngoi, thng thng l a. N c kh nng lu gi mt khi lng rt ln
cc d liu. Tuy nhin cc thit b nh ngoi c nhng c trng truy cp hon ton khc
b nh chnh. Sau y chng ta s trnh by m hnh tng qut m cc h iu hnh hin
i s dng qun l d liu b nh ngoi. Trong cc mc sau chng ta s xt cc
CTDL lu gi file sao cho cc php ton trn file c thc hin mt cch hiu qu.
l file bm, file c ch s, B - cy.
Cc h iu hnh hin i u cho chng ta kh nng t chc d liu b nh
ngoi di dng cc file.
Chng ta c th quan nim file nh l mt tp hp no cc d liu (cc bn
ghi) c lu gi b nh ngoi. Cc bn ghi trong file c th c di c nh (s cc
trng ca bn ghi l c nh) hoc c th c di thay i. Cc file vi cc bn ghi c
di c nh c s dng nhiu trong cc h qun tr c s d liu. Cc file vi cc
bn ghi c di thay i hay c s dng lu gi cc thng tin vn bn. Chng ta
s ch xt cc file vi cc bn ghi c di c nh. Cc k thut m chng ta s trnh
by lu gi v thao tc vi cc file ny c th sa i p dng cho cc file vi cc
bn ghi c di thay i.
Trong chng ny chng ta s hiu kho ca bn ghi l mt tp hp no cc
trng ca bn ghi hon ton xc nh bn ghi, tc l hai bn ghi khc nhau phi c cc
gi tr khc nhau trn t nht mt trng thuc kho.
Trn file chng ta cn thc hin cc php ton sau y :
1. Tm kim : tm trong file cc bn ghi vi cc gi tr cho trc trn mt nhm no
cc trng ca bn ghi.
2. Xen vo : xen vo file mt bn ghi no
3. Loi b : loi b khi file tt c cc bn ghi vi cc gi tr cho trc trn mt nhm
no cc trng ca bn ghi.
4. Sa i : sa tt c cc bn ghi vi cc gi tr cho trc trn mt nhm no cc
trng bng cch t li gi tr trn cc trng c ch nh bi cc gi tr mi
cho.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 152
V d : gi s chng ta c file vi cc bn ghi cha cc trng (tn sn phm, ni
sn xut, gi). Ta cc c th cn tm tt c cc bn ghi vi tn sn phm = bng n 60W;
thm vo file bn ghi (qut bn, nh my in c, 69.000); loi b tt c cc bn ghi vi
ni sn xut = nh my X; sa tt c cc bn ghi vi ni sn xut = nh my Z bng cch
thay gi c bi gi mi.
H iu hnh chia b nh ngoi thnh cc khi vt l (physical block) c c nh
nhau, ta gi tt l cc khi. C ca cc khi thay i tu theo h iu hnh, thng thng
l t 2
9
byte n 2
12
byte. Mi khi c a ch, l a ch tuyt i ca khi trn a,
tc l byte u tin ca khi.
File c lu gi trong mt s khi, mi khi c th lu gi mt s bn ghi ca
file. Trong mt khi c th cn mt s byte cha c s dng n. Mi bn ghi c a
ch, a ch ca bnghi l cp (k, s), trong k l a ch ca khi cha bn ghi, cn s l
s byte trong khi ng trc byte bt u bn ghi (s c gi l offset). sau ny khi ni
n con tr ti khi (ti bn ghi) th ta hiu l a ch khi (bn ghi).
File c th c lu gi trong mt danh sch lin kt cc khi. in hnh hn, file
c th c lu gi trong cc khi t chc di dng cy. Cc khi khng l l ca cy
cha cc con tr ti mt s khi trong cy.
Trong mi khi c th ginh ra mt s byte (phn ny c gi l u khi)
cha cc thng tin cn thit v khi, chng hn ghi s bn ghi trong khi.
Trong mt khi, khng gian lu tr mt bn ghi c gi l khi con. Cn
phn bit khi con y v rng. Khi con y l khi con c cha bn ghi, ngc li l
khi con rng. ch mt khi con l y hoc rng, trong u khi ta ginh cho mi
khi con mt bit (gi l bit y), bit nhn gi tr 1 (0) nu khi con tng ng l y
(rng). Mt cch khc, trong mi khi con ta ginh ra mt bit (bit xo), bit nhn gi tr 1
c ngha l bn ghi b xo.
nh gi thi gian thc hin cc php ton trn file
Cc php ton trn file (tm kim, xen vo, loi b, sa i) c thc hin thng
qua php ton c bn, c mt khi d liu b nh ngoi vo vng m trong b nh
chnh hoc vit cc d liu vng m trong b nh chnh vo mt khi b nh ngoi.
Ta gi php ton ny l php ton truy cp khi (block access). Cn ch rng, vic
chuyn mt khi d liu b nh ngoi vo b nh chnh i hi nhiu thi gian hn
vic tm kim liu trong khi khi n trong b nh chnh. Cng cn bit rng , cc
d liu cn phi c b nh chnh trc khi n c s dng bng cch no . V vy
khi nh gi thi gian thc hin mt thut ton thao tc vi cc d liu c lu gi
trong file, chng ta phi tnh s ln cn thit phi thc hin php ton truy cp khi. S
ln thc hin php ton truy cp khi c dng biu din tnh hiu qu ca cc thut
ton trn cc file.
T chc file n gin
Phng php n gin nht, ng thi cng km hiu qu nht lu gi cc bn
ghi ca file l, xp cc bn ghi ca file vo mt s khi cn thit theo mt trt t tu .
Cc khi c th lin kt vi nhau bi cc con tr to thnh mt danh sch lin kt cc
khi. Mt cch khc, ta cng c th s dng mt bng lu gi a ch ca cc khi.
Php ton tm kim cc bn ghi theo cc gi tr bit trn mt s trng c
thc hin bng cch c ln lt cc bn ghi trong cc khi. Vic xen vo file mt bn
ghi mi c thc hin bng cch xen n vo khi cui cng ca file nu trong cn
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 153
ch, nu khng th thm vo file mt khi mi v t bn ghi cn xen vo . Mun loi
b cc bn ghi, trc ht ta cn nh v c cc bn ghi cn loi b, sau ta s tin
hnh xo b. Vic xo b mt bn ghi c th thc hin bng nhiu cch. Chng hn c
th t li gi tr ca bit xo trong bn ghi. Trong trng hp ny vic s dng li khng
gian ca bn ghi ny lu gi bn ghi mi cn phi thn trng. Nu trong h c s d
liu c s dng con tr tr ti bn ghi (trng hp ny, bn ghi c xem l b ng
cht), th ta khng c s dng khng gian ca n lu gi bn ghi mi ny.
Vi cch t chc file tun t nh trn, cc php ton trn file s chm, v chng
i hi phi xem xt ton b cc bn ghi trong file. Trong cc mc sau ny chng ta s
trnh by cc t chc file u vit hn, cho php ta mi ln cn truy cp n mt bn ghi,
ch cn c vo b nh chnh mt phn nh ca file.
Chng ta khng th vit bng Pascal hoc bng mt ngn ng khc cc th tc c
cp n cc d liu mc khi vt l v cc a ch khi. Do trong cc phng
php t chc file c trnh by sau y, ta s m t mt cch khng hnh thc cc thut
ton thc hin cc php ton trn cc file.
7.2. File bm :
Cu trc ca file bm hon ton tng t nh cu trc bng bm m b nh
trong c chng ta cp n trong chng 5. T tng ca t chc file bm l nh
sau : ta chia tp hp cc bn ghi ca file thnh K lp. Vi mi lp, to ra mt danh sch
lin kt cc khi, cc khi ny cha cc bn ghi ca lp. Ta s dng mt bng gm K
con tr, (bng ch dn) mi con tr tr ti khi u tin trong danh sch lin kt cc khi
ca mt lp.
Hnh 7.1 biu din cu trc ca mt file bm.

0


i


K-1

Hnh 7.1 Cu trc file bm

Vic phn phi cc bn ghi ca file vo cc lp c thc hin bi hm bm h.
l hm xc nh trn tp cc gi tr kho ca cc bn ghi v nhn cc gi tr nguyn t
0 n K-1. Nu x l mt gi tr kho v h(x) = i, 0 s i s K-1, th bn ghi vi kho x
thuc lp th i.
tm kim bn ghi vi kho x cho trc, u tin ta tnh h(x), con tr cha
thnh phn th i = h(x) trong bng ch dn ta tm n cc khi ca lp i. ln lt c cc
khi, ta s tm ra bn ghi vi kho x, hoc c ht cc khi m khng thy c ngha l
bn ghi khng c trong file.
9 21 15 32 25 11 6 41
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 154
Mun xen vo file bn ghi vi kho x, ta cn kim tra xem n c trong file hay
cha. Nu cha ta c th xen n vo khi u tin trong danh sch cc khi ca h (x),
nu ti cn ch cho bn ghi. Nu tt c cc khi ca lp h(x) u y, ta thm vo
danh sch cc khi ca lp h(x) mt khi mi v t bn ghi vo .
loi b bn ghi vi kho x, trc ht ta cn xc nh v tr ca bn ghi trong
file bng cch p dng th tc tm kim. Sau c th xo b bn ghi ny bng cch,
chng hn cho bit xo nhn gi tr 1.
Cu trc file bm l cu trc rt c hiu qu nu cc php ton trn file ch i
hi n vic truy cp cc bn ghi theo kho. Gi s file c n bn ghi, nu hm bm c
thit k tt, th trung bnh mi lp cha n/k bn ghi. Gi s mi khi cha c m bn
ghi. Nh vy mi lp gm khong n/mk khi. Tc l cc php ton trn file bm s k ln
nhanh hn so vi t chc file tun t.
7.3. File c ch s ( indexed file)
Cu trc file bm c to ra da trn kho ca bn ghi. Trong mc ny chng ta
trnh by mt phng php t chc file khc cng da vo kho ca bn ghi bng cch
sp xp cc bn ghi theo th t tng dn ca cc gi tr kho.
Cu trc file c ch s c hnh thnh nh sau :
Ta sp xp cc bn ghi ca file theo th t kho tng dn vo mt s khi cn
thit. Ta c th sp xp cc bn ghi vo mt khi cho ti khi khi y. Song thng
thng, trong mi khi ngi ta ginh li mt khng gian cho cc bn ghi c thm
vo file sau ny. L do l php ton xen vo file c thc hin d dng hn. Ta s gi
file gm cc bn ghi cha trong cc khi ny l file chnh, phn bit vi file ch s
c to ra sau y.
Ch s ca mt khi l cp (v, b), trong b l a ch ca khi, cn v l gi tr
kho nh nht ca cc bn ghi trong khi b. T cc khi ca file chnh, ta s to ra file
ch s (index file), file ny gm cc ch s khi ca file chnh. Cc ch s khi c sp
xp theo th t tng dn ca kho vo mt s khi cn thit. Cc khi ny c th c
mc ni vi nhau to thnh mt danh sch lin kt. Trong trng hp ny file ch s gm
mt danh sch lin kt cc khi, cc khi cha cc ch s khi ca file chnh. Mt cch
khc ta cng c th s dng mt bng lu gi a ch ca cc khi trong file ch s.
Hnh 7.2 minh ho cu trc ca file c ch s.

file ch s




file chnh
Hnh 7.2. Cu trc file c ch s
Sau y chng ta s xt s thc hin cc php ton trn file c t chc di
dng file c ch s
Tm kim :
5 17 35 49
5 9 12 17 21 33 35 37 42 49 51 56
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 155
Gi s ta cn tm bn ghi x vi kho v cho trc. Trc ht ta cn tm trn file ch
s mt ch s (v
1
, b
1
) sao cho v
1
l gi tr kho ln nht trong file ch s tho mn iu
kin v
1
s v. Ta s ni v
1
ph v.
Vic tm kim trn file ch s mt gi tr kho v
1
ph gi tr kho v cho trc c
th thc hin bng cch tm kim tun t hoc tm kim nh phn.
Trong tm kim tun t, ta cn xem xt tt c cc bn ghi ca file ch s cho ti
khi tm thy mt ch s (v
1
, b
1
) vi v
1
ph v. Nu v nh hn gi tr kho ca bn ghi u
tin trong file ch s th iu c ngha l trong file ch s khng cha gi tr kho ph
v.
Phng php c hiu qu hn l tm kim nh phn. Gi s cc bn ghi ca file
ch s c sp xp vo cc khi c nh s t 1 n m. Xt khi th m/2(. Gi s
(v
2
, b
2
) l bn ghi u tin trong khi. So snh gi tr kho cho trc v vi gi tr kho v
2
.
Nu v < v
2
ta tin hnh tm kim trn cc khi 1,2, . . ., m/2( - 1. Cn nu v > v
2
, ta tin
hnh tm kim trn cc khi m/2( , m/2(. + 1, . . . , m. Qu trnh trn c lp li cho
ti khi ta ch cn tm kim trn mt khi. Lc ny ta ch vic ln lt so snh gi tr kho
v cho trc vi gi tr kho cha trong khi ny.
tm ra bn ghi x vi kho v cho trc, trc ht ta tm trn file ch s mt ch
s (v
1
, b
1
) vi v
1
ph v. Sau ln lt xt cc bn ghi trong khi c a ch b
1
pht
hin ra bn ghi c kho v, hoc khng nu trong khi khng c bn ghi no vi kho l v.
Nu trn file ch s khng cha gi tr kho v
1
ph v, th file chnh khng cha bn ghi c
kho v.
Xen vo :
Gi s ta cn thm vo file bn ghi r vi gi tr kho v.
Gi s file chnh c cha trong cc khi B
1
, B
2
, . . . , B
k
v cc gi tr kho ca
cc bn ghi trong khi B
i
nh hn cc gi tr kho trong khi B
i +1
.
Trc ht ta cn tm ra khi B
i
cn phi xp bn ghi r vo . Mun vy ta p
dng th tc tm kim trn file ch s tm ra ch s (v
1
, b
1
) vi v
1
ph v. Nu tm thy
th B
i
l khi c a ch b
1
, ngc li B
i
l khi B
1
.
Trong trng hp B
i
cha y v r cn cha c trong khi B
i
th ta xp bn ghi r
vo ng v tr ca n, tc l phi m bo trt t tng dn theo kho.
Nu B
i
l B
1
th sau khi thm vo bn ghi r, n tr thnh bn ghi u tin trong
khi B
1
, do ta cn phi tin hnh sa i ch s ca khi B
1
trong file ch s.
Trong trng hp B
i
y, ta tin hnh xp bn ghi r vo ng v tr ca n
trong B
i
, khi cn tha ra mt bn ghi. Tm n khi B
i + 1
(ta bit c a ch ca khi
B
i + 1
bng cch tm trong ch s). Nu B
i + 1
cha y th ta xp bn ghi tha ra ca B
i

vo v tr u tin trong khi B
i + 1
ng thi sa li ch s ca B
i + 1
trong file ch s.
Nu khi cng y hoc khng tn ti khi B
i
l B
k
th ta thm vo file chnh mt khi
mi v xp bn ghi r vo khi mi ny. Ch s ca khi mi thm vo cn phi c xen
vo file ch s.
Loi b :
loi b bn ghi r vi kho v, ta cn p dng th tc tm kim nh v bn
ghi trong file. Sau s tin hnh xo b r bng nhiu cch khc nhau, chng hn c th
t li gi tr ca bit y/rng tng ng vi bn ghi cn xo u khi.
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 156
Sa i :
Gi s ta cn sa i bn ghi vi kho v. Nu cc gi tr cn sa khng l gi tr
ca cc trng thuc kho, th ta ch cn p dng th tc tm kim tm ra bn ghi v
tin hnh cc sa i cn thit. Nu cc gi tr cn sa thuc kho th vic sa i c
thc hin bng cch loi b bn ghi c, xen vo bn ghi mi.
7.4. B - cy.
Mc ch ca chng ta l nghin cu cc cu trc d liu biu din file sao cho
cc php ton trn file c thc hin hiu qu, tc l vi s ln thc hin php ton truy
cp khi t nht c th c, khi cn phi tm kim, xen vo, loi b hoc sa i cc bn
ghi trn file. B - cy l mt cu trc d liu c bit thch hp biu din file. Trong
mc ny chng ta s trnh by B - cy v cc k thut thc hin cc php ton tm
kim, xen vo v loi b trn B - cy.
Cy tm kim a nhnh ( Multiway Search Trees)
Cy tm kim m nhnh l s tng qut ho ca cy tm kim nh phn, trong
mi nh ca cy c nhiu nht m con. Cc nh ca cy c gn vi cc gi tr kho
ca cc bn ghi. Nu nh a c r con ( r s m) th n cha ng r - 1 kho ( k
1
, k
2
, . . . , k
r-
1
), trong k
1
< k
2
< . . . < k
r-1
(Chng ta gi thit rng cc gi tr kho c sp xp th
t tuyn tnh). Tng qut ho tnh cht v kho gn vi cc nh ca cy tm kim nh
phn, cy tm kim m nhnh phi tho mn tnh cht sau y. Nu nh a c r con v
cha cc kho ( k
1
, k
2
, . . . , k
r-1
) th cc kho cha trong cc nh ca cy con th nht
ca nh a nh hn k
1
, cn cc kho cha trong cc nh ca cy con th i ( i = 2, . . . , r-
1) phi ln hn hoc bng k
i - 1
v nh hn k
i
, cc kho cha trong cc nh ca cy con
th r phi ln hn hoc bng k
r-1
. Mi l ca cy cha mt s kho, ti a l s.
Cc php ton tm kim, xen vo v loi b trn cy tm kim m nhnh c thc
hin bng cc k thut tng t nh i vi cy tm kim nh phn.

B - cy ( B - Trees)
B - cy l mt loi c bit ca cy tm kim m nhnh cn bng (xem li khi
nim cy cn bng trong mc 7, chng 4). C th, B - cy c nh ngha nh sau :
B - cy cp m l cy tm kim m nhnh tho mn cc tnh cht sau y
1. Nu cy khng phi l cy ch gm c gc th gc c t nht hai con v nhiu nht m
con.
2. Mi nh trong ca cy, tr gc, c t nht m/2( con v nhiu nht m con.
3. Tt c cc l ca cy trn cng mt mc. (Ni cch khc, tt c cc ng i t gc
ti l cy c cng di).
T tng ca vic t chc file di dng B - cy l nh sau. Ta sp xp cc bn
ghi ca file (file chnh) vo mt s khi cn thit. Mi khi ny s l l ca B - cy.
Trong mi khi cc bn ghi c sp xp theo th t tng dn ca kho. Cc ch s ca
cc khi ny (cc l) li c sp xp vo mt s khi mi. Trong mi khi ny, cc ch
s c sp xp theo th t tng dn ca kho. Trong B - cy, cc khi ny s l cc nh
mc trn ca mc cc l. Ta li ly ch s ca cc khi va to ra sp xp vo mt s
khi mi. Cc khi ny li l cc nh mc trn ca mc t c to ra. Qu trnh
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 157
trn s tip tc cho ti khi cc ch s c th xp gn vo mt khi. Khi ny l nh ca
cy B - cy.
Nh vy, mi nh ca B - cy l mt khi. Mi nh trong ca B - cy c dng
(p
0
, v
1
, p
1
, v
2
, p
2
, . . . , v
n
, p
n
)
trong v
1
< v
2
< . . . < v ( v
i
, p
i
), 0 s i s n, l ch s ca mt khi, tc l v
i
l gi tr
kho nh nht trong mt khi, cn p
i
l con tr tr ti khi cha kho nh nht v
i
, tc l
con tr tr ti nh con th i ca nh trong ang ni ti. Cn lu rng, gi tr ca kho
v
0
khng c lu gi mi nh trong, l do l tit kim b nh.
V d : Hnh 7.3 biu din mt B - cy cp 3. B - cy c to thnh t 11 khi
c nh s B
1
, B
2
, . . . , B
11
. Mi khi l nh trong cha c 3 ch s. Mi khi l l
cha c 3 bng ghi ( 3 s nguyn). File y l file cc s nguyn c lu gi cc
khi t B
5
n B
11
.










B
1



B
2
B
3
B
4




B
5
B
6
B
7
B
8
-- B
9
B
10
B
11


Hnh 7.3 B - cy
Sau y chng ta s nghin cu s thc hin cc php ton tm kim, xen vo v
loi b trn B - cy.
Tm kim
Gi s chng ta cn tm bn ghi r c kho v cho trc. Chng ta cn phi tm
ng i t gc ca B - cy ti l, sao cho l ny cn phi cha bn ghi r nu n c
trong file.
21 143
9 - - 58 92 195 _ .
3 5 - 9 15 - 21 36 49 58 - - 92 121 - 143 169 195 211 232
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 158
Trong qu trnh tm kim, gi s ti mt thi im no ta t ti nh B. Nu
khi B l l, ta tm trong khi B xem n c cha bn ghi r hay khng. Nh li rng cc
bn ghi ca file c xp vo cc khi theo th t tng dn ca kho, do s tm kim
trong khi B c th tin hnh bng k thut tm kim tun t hoc tm kim nh phn.
Nu B l mt nh trong cha ( p
0
, v
1
, p
1
, . . . , v
n
, p
n
) th ta cn xc nh v tr ca
gi tr kho v trong dy gi tr kho v
1
, v
2
, . . . , v
n
. Nu v < v
1
th ta i xung nh c
tr bi p
o
. Nu v
i
s v < v
i + 1
th ta i xung nh c tr bi p
i
( i = 1, 2, . . . n - 1). Cn
nu v
n
< v th i xung nh c tr bi p
n
.
Xen vo :
Gi s ta cn phi xen vo B - cy mt bn ghi r vi kho l v. u tin ta p
dng th tc tm kim tm ra khi B cn phi xen bn ghi r vo .
Nu khi B cn ch cho bn ghi r th ta xp bn ghi r vo khi B sao cho th t
tng dn ca kho c bo tn. Ch rng, r khng th l bn ghi u tin ca khi B,
tr khi B l l ngoi cng bn tri. Nu B l l ngoi cng bn tri th gi tr kho nh
nht trong khi B khng c mt trong cc nh l tin thn ca nh B. V vy trong
trng hp ny ch cn thm bn ghi r vo khi B l xong, khng cn sa i g vi cc
nh l tin thn ca khi B.
Nu khi B khng cn khng gian lu gi bn ghi r th ta thm vo B - cy
mt l mi, khi B'. Chuyn mt na s bn ghi cui ca khi B sang khi B'. Sau
xp bn ghi r vo khi B hoc khi B' sao cho vn m bo c tnh tng dn ca cc
gi tr kho. Gi s Q l cha ca B, ta c th bit c Q nu trong qu trnh tm kim, ta
lu li vt ca ng i t gc ti B. Gi s ch s ca khi B' l (v', p'), trong v' l gi
tr kho nh nht trong B', cn p' l a ch ca khi B'. p dng th tc trn xen _v',
p') vo khi Q. Nu khi Q khng cn ch cho (v', p') th ta li phi thm vo B - cy
mt nh mi Q', n l em lin k ca Q. Sau li phi tm n cha ca nh Q a
vo ch s ca khi mi Q'. Qu trnh c th tip din v dn n vic phi phn i s
gi tr kho gc, na sau c chuyn vo khi mi. Trong trng hp ny, ta phi to
ra mt gc mi c ng hai con, mt con l gc c, mt con l nh mi a vo.
V d. Gi s ta cn xen vo B - cy trong hnh 7.3 bn ghi c kho 32. Trc ht
ta phi tm khi cn phi a bn ghi ny vo. Bt u t gc B
1
, v 21 < 32 < 143, ta i
xung B
3
. Ti B
3
, 32 < 58c, ta i xung B
7
. B
7
l l, vy cn phi a bn ghi vi kho 32
vo B7. Nhng khi B
7
y. Ta thm vo khi mi B
12
v xp cc bn ghi vi kho 21,
32 vo khi B
7
, xp cc bn ghi vi kho 36, 49 vo khi B
12
. Ch s ca khi B
12
cha
gi tr kho 36. Cn phi xp ch s B
12
vo cha ca B
7
l B
3
. Nhng B
3
cng y. Thm
vo khi mi B
13
. Sau cc ch s ca cc khi B
7
, B
12
c xp vo B
3
cn cc ch s
ca cc khi B
8
, B
9
c xp vo B
13
. By gi ch s ca khi B
13
l 58 v a ch ca khi
B
13
cn c xp vo khi B1. Nhng B
1
cng y thm vo B - cy khi mi B
14
. Xp
cc ch s ca B
2
, B
3
vo B
1
, cc ch s ca B
13
, B
4
vo B
14
. V B
1
l gc, ta phi thm vo
gc mi, khi B
15
v xp cc ch s ca B
1
v B
14
vo B
15
. Kt qu l ta c B - cy trong
hnh 7.4.
B
15


B1 B14


B2 B3 B
13
B
4
--
58 - -
21 - - 143 - -
9 - - 36 - - 92 - -
195 - .
3 5 - 9 15 -
21 32 - 36 49 - 58 - - 92 121 - 143169 -
169169
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 159



B5 B6 B7 B12 B8 B9 B10


Hnh 7.4 B - cy sau khi thm vo B - cy trong hnh 7.3
bn ghi vi gi tr kho 32
Loi b
Gi s ta cn loi khi B - cy bn ghi r vi kho v. u tin p dng th tc tm
kim tm ra l B cha bn ghi r. Sau loi b bn ghi r trong khi B.
Gi s sau khi loi b B khng rng. Trong trng hp ny, nu r khng phi l
bn ghi u tin trong B, ta khng phi lm g thm. Nu r l bn ghi u tin trong B, th
sau khi xo r, ch s ca B thay i. Do ta cn tm n nh Q l cha ca B. Nu B
l con trng ca Q th gi tr kho v' trong ch s (v', p') ca B khng c trong Q. Trong
trng hp ny ta cn tm n tin thn A ca B sao cho A khng phi l con trng ca
cha mnh A'. Khi gi tr kho nh nht trong B c cha trong A'. Do trong A', ta
cn thay gi tr kho c v bi gi tr mi v'.
Gi s sau khi loi b bn ghi r, B tr thnh rng. Loi b l B khi B - cy.
iu dn n cn loi b ch s ca B trong nh cha Q ca B.
Nu sau khi loi b, s cc con ca nh Q t hn m/2 th ta tm n nh Q' l
anh em lin k ca nh Q. Nu Q' c nhiu hn m/2( con th ta phn phi li cc gi tr
kho trong Q v Q' sao cho c hai c t nht m/2( con. Khi cc ch s ca Q hoc
Q' c th thay i. Ta li phi tm n cc tin thn ca Q n phn nh s thay i ny.
Nu Q' c ng m/2( con, th ta kt hp hai nh Q v Q' thnh mt nh, mt
trong hai nh b loi khi cy, cc kho cha trong nh ny c chuyn sang nh cn
li. iu ny dn n cn loi b ch s ca nh b loi ra khi cha ca Q. S loi b ny
c thc hin bng cch p dng th tc loi b trnh by.
Qu trnh loi b c th dn n vic loi b gc cy, khi chng ta cn kt hp hai
con ca gc thnh mt nh, nh ny tr thnh gc mi ca B-cy.
V d . Gi s chng ta cn loi bn ghi vi kho 58 khi B-cy trong hnh 7.4.
u tin tm l cha kho 58, l khi B
8
. Xo bn ghi 58, khi B
8
thnh rng. Tm n
cha ca B
8
l B
13
. Loi b ch s ca B
8
khi B
13
, B
13
ch cn mt con. S con ca B
13
t
hn m/2( ( y m/2( = 3/2( = 2). Tm n em lin k ca B
13
l B
4
, s con ca
B
4
l hai. Kt hp hai nh ny thnh mt nh B
13
. Cn phi loi b ch s ca khi B
4
khi B
14
. B
14
tr thnh ch c mt con. Tm n anh lin k ca B
14
l B
1
. S con ca B
1
l
hai. Kt hp B
1
v B
14
thnh mt nh B
1
. B
1
tr thnh gc mi ca B - cy. Hnh 7.5
minh ho B-cy nhn c t B-cy trong hnh 7.4 sau khi loi nh c kho 58.
195 211 232
GT Cu Trc D Liu Thut Ton PTS- inh Mnh Tng
Su Tm Bi : daihoc.com.vn 160

You might also like