You are on page 1of 144

HC VIN CNG NGH BU CHNH VIN THNG

CU TRC D LIU V GII THUT


(Dng cho sinh vin h o to i hc t xa)
Lu hnh ni b

H NI - 2007

LI NI U
Cu trc d liu v gii thut l mt trong nhng mn hc c bn ca sinh vin ngnh Cng
ngh thng tin. Cc cu trc d liu v cc gii thut c xem nh l 2 yu t quan trng nht
trong lp trnh, ng nh cu ni ni ting ca Niklaus Wirth: Chng trnh = Cu trc d liu +
Gii thut (Programs = Data Structures + Algorithms). Nm vng cc cu trc d liu v cc gii
thut l c s sinh vin tip cn vi vic thit k v xy dng phn mm cng nh s dng cc
cng c lp trnh hin i.
Cu trc d liu c th c xem nh l 1 phng php lu tr d liu trong my tnh
nhm s dng mt cch c hiu qu cc d liu ny. V s dng cc d liu mt cch hiu qu
th cn phi c cc thut ton p dng trn cc d liu . Do vy, cu trc d liu v gii thut l
2 yu t khng th tch ri v c nhng lin quan cht ch vi nhau. Vic la chn mt cu trc
d liu c th s nh hng ln ti vic la chn p dng gii thut no.
Ti liu Cu trc d liu v gii thut bao gm 7 chng, trnh by v cc cu trc d liu
v cc gii thut c bn nht trong tin hc.
Chng 1 trnh by v phn tch v thit k thut ton. u tin l cch phn tch 1 vn ,
t thc tin cho ti chng trnh, cch thit k mt gii php cho vn theo cch gii quyt bng
my tnh. Tip theo, cc phng php phn tch, nh gi phc tp v thi gian thc hin gii
thut cng c xem xt trong chng. Chng 2 trnh by v qui, mt khi nim rt c bn
trong ton hc v khoa hc my tnh. Vic s dng qui c th xy dng c nhng chng
trnh gii quyt c cc vn rt phc tp ch bng mt s t cu lnh, c bit l cc vn
mang bn cht qui.
Chng 3, 4, 5, 6 trnh by v cc cu trc d liu c s dng rt thng dng nh mng
v danh sch lin kt, ngn xp v hng i, cy, th. l cc cu trc d liu cng rt gn
gi vi cc cu trc trong thc tin. Chng 7 trnh by v cc thut ton sp xp v tm kim.
Cc thut ton ny cng vi cc k thut c s dng trong c coi l cc k thut c s
cho lp trnh my tnh. Cc thut ton c xem xt bao gm cc lp thut ton n gin v c
cc thut ton ci t phc tp nhng c thi gian thc hin ti u.
Cui mi phn u c cc cu hi v bi tp sinh vin n luyn v t kim tra kin thc
ca mnh. Cui ti liu c cc ph lc hng dn tr li cu hi, m ngun tham kho v ti liu
tham kho.
V nguyn tc, cc cu trc d liu v cc gii thut c th c biu din v ci t bng
bt c ngn ng lp trnh hin i no. Tuy nhin, c c cc phn tch su sc hn v c kt
qu thc t hn, tc gi s dng ngn ng lp trnh C minh ho cho cc cu trc d liu v
thut ton. Do vy, ngoi cc kin thc c bn v tin hc, ngi c cn c kin thc v ngn ng
lp trnh C.
Cui cng, mc d ht sc c gng nhng chc chn khng trnh khi cc thiu st. Tc
gi rt mong nhn c s gp ca bn c v ng nghip ti liu c hon thin hn.
H Ni, thng 10/2007

CHNG 1

PHN TCH V THIT K GII THUT

Chng 1 trnh by cc khi nim v gii thut v phng php tinh chnh tng bc
chng trnh c th hin qua ngn ng din t gii thut. Chng ny cng nu phng php
phn tch v nh gi mt thut ton, cc khi nim lin quan n vic tnh ton thi gian thc
hin chng trnh.
Trong mi phn u c cc minh ho c th. Phn u a ra v d v bi ton nt giao
thng v phng php gii quyt bi ton t phn tch vn cho n thit k gii thut, tinh
chnh tng bc cho ti mc c th hn. Phn 2 a ra mt v d v phn tch v tnh ton thi
gian thc hin gii thut sp xp ni bt.
hc tt chng ny, sinh vin cn nm vng phn l thuyt v tm cc v d tng t
thc hnh phn tch, thit k, v nh gi gii thut.
1.1 GII THUT V NGN NG DIN T GII THUT
1.1.1

Gii thut

Trong thc t, khi gp phi mt vn cn phi gii quyt, ta cn phi a ra 1 phng


php gii quyt vn . Khi mun gii quyt vn bng cch s dng my tnh, ta cn
phi a ra 1 gii php ph hp vi vic thc thi bng cc chng trnh my tnh. Thut ng
thut ton c dng ch cc gii php nh vy.
Thut ton c th c nh ngha nh sau:
Thut ton l mt chui hu hn cc lnh. Mi lnh c mt ng ngha r rng v c th
c thc hin vi mt lng hu hn ti nguyn trong mt khong hu hn thi gian.
Chng hn lnh x = y + z l mt lnh c cc tnh cht trn.
Trong mt thut ton, mt lnh c th lp i lp li nhiu ln, tuy nhin i vi bt k b d
liu u vo no, thut ton phi kt thc sau khi thc thi mt s hu hn lnh.
Nh ni trn, mi lnh trong thut ton phi c ng ngha r rng v c th c thc
thi trong mt khong thi gian hu hn. Tuy nhin, i khi mt lnh c ng ngha r rng i vi
ngi ny nhng li khng r rng i vi ngi khc. Ngoi ra, thng rt kh chng minh
mt lnh c th c thc hin trong 1 khong hu hn thi gian. Thm ch, k c khi bit r ng
ngha ca cc lnh, cng kh c th chng minh l vi bt k b d liu u vo no, thut
ton s dng.
Tip theo, chng ta s xem xt mt v d v xy dng thut ton cho bi ton n giao
thng:
Gi s ngi ta cn thit k mt h thng n cho mt nt giao thng c nhiu ng giao
nhau phc tp. xy dng tp cc trng thi ca cc n giao thng, ta cn phi xy dng mt
chng trnh c u vo l tp cc ng r c php ti nt giao thng (li i thng cng c
xem nh l 1 ng r) v chia tp ny thnh 1 s t nht cc nhm, sao cho tt c cc ng r trong
nhm c th c i cng lc m khng xy ra tranh chp. Sau , chng ta s gn trng thi ca
cc n giao thng vi mi nhm va c phn chia. Vi cch phn chia c s nhm t nht, ta
s xy dng c 1 h thng n giao thng c t trng thi nht.
3

Chng hn, ta xem xt bi ton trn vi nt giao thng c cho nh trong hnh 1.1
di. Trong nt giao thng trn, C v E l cc ng 1 chiu, cc ng cn li l 2 chiu. C tt
c 13 ng r ti nt giao thng ny. Mt s ng r c th c i ng thi, chng hn cc ng r
AB (t A r sang B) v EC. Mt s ng r th khng c i ng thi (gy ra cc tuyn giao
thng xung t nhau), chng hn AD v EB. H thng n ti nt giao thng phi hot ng sao
cho cc ng r xung t (chng hn AD v EB) khng c cho php i ti cng mt thi im,
trong khi cc ng r khng xung t th c th c i ti cng 1 thi im.

C
B

Hnh 1.1 Nt giao thng


Chng ta c th m hnh ha vn ny bng mt cu trc ton hc gi l th (s c
trnh by chi tit chng 5). th l mt cu trc bao gm 1 tp cc im gi l nh v mt
tp cc ng ni cc im, gi l cc cnh. Vn nt giao thng c th c m hnh ha bng
mt th, trong cc ng r l cc nh, v c mt cnh ni 2 nh biu th rng 2 ng r
khng th i ng thi. Khi , th ca nt giao thng hnh 1.1 c th c biu din nh
hnh 1.2.

AB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

Hnh 1.2 th ng r

Ngoi cch biu din trn, th cn c th c biu din thng qua 1 bng, trong phn
t hng i, ct j c gi tr 1 khi v ch khi c 1 cnh ni nh i v nh j.
AB

AC

AD

AB

BA

BC

BD

DA

AC

DB

DC

EA

EB

EC

ED

1
1

AD

BA
BC

BD

DA

DB

1
1
1

1
1

1
1

DC
EA
EB
EC

1
1

ED
Bng 1.1 Biu din th ng r bng bng
Ta c th s dng th trn gii quyt vn thit k h thng n cho nt giao thng
nh ni.
Vic t mu mt th l vic gn cho mi nh ca th mt mu sao cho khng c hai
nh c ni bi 1 cnh no li c cng mt mu. D thy rng vn nt giao thng c th
c chuyn thnh bi ton t mu th cc ng r trn sao cho phi s dng s mu t nht.
Bi ton t mu th l bi ton xut hin v c nghin cu t rt lu. Tuy nhin,
t mu mt th bt k vi s mu t nht l bi ton rt phc tp. gii bi ton ny, ngi ta
thng s dng phng php vt cn th tt c cc kh nng c th. C ngha, u tin th
tin hnh t mu th bng 1 mu, tip theo dng 2 mu, 3 mu, v.v. cho ti khi tm ra phng
php t mu tho mn yu cu.
Phng php vt cn c v thch hp vi cc th nh, tuy nhin i vi cc th phc
tp th s tiu tn rt nhiu thi gian thc hin cng nh ti nguyn h thng. Ta c th tip cn
vn theo hng c gng tm ra mt gii php tt, khng nht thit phi l gii php ti u.
Chng hn, ta s c gng tm mt gii php t mu cho th ng r trn vi mt s mu kh t,
gn vi s mu t nht, v thi gian thc hin vic tm gii php l kh nhanh. Gii thut tm cc
gii php tt nhng cha phi ti u nh vy gi l cc gii thut tm theo cm tnh.
i vi bi ton t mu th, mt thut ton cm tnh thng c s dng l thut ton
tham n (greedy). Theo thut ton ny, u tin ta s dng mt mu t nhiu nht s nh c
th, tho mn yu cu bi ton. Tip theo, s dng mu th 2 t cc nh cha c t trong
bc 1, ri s dng n mu th 3 t cc nh cha c t trong bc 2, v.v.
5

t mu cc nh vi mu mi, chng ta thc hin cc bc:


-

La chn 1 nh cha c t mu v t n bng mu mi.

Duyt qua cc nh cha c t mu. Vi mi nh dng ny, kim tra xem c cnh
no ni n vi mt nh va c t bi mu mi hay khng. Nu khng c cnh no
th ta t mu nh ny bng mu mi.

Thut ton ny c gi l tham n v ti mi bc n t mu tt c cc nh c th m


khng cn phi xem xt xem vic t mu c li nhng im bt li cho cc bc sau hay
khng. Trong nhiu trng hp, chng ta c th t mu c nhiu nh hn bng 1 mu nu
chng ta bt tham n v b qua mt s nh c th t mu c trong bc trc.
V d, xem xt th hnh 1.3, trong nh 1 c t mu . Ta thy rng hon ton
c th t c 2 nh 3 v 4 l mu , vi iu kin ta khng t nh s 2 mu . Tuy nhin, nu ta
p dng thut ton tham n theo th t cc nh ln dn th nh 1 v nh 2 s l mu , v khi
nh 3, 4 s khng c t mu .
3
1

a) th ban u

b) T mu theo thut ton tham n

c) Mt cch t mu tt hn

3
1

5
4
3

5
4

Hnh 1.3 th
By gi ta s xem xt thut ton tham n c p dng trn th cc ng r hnh 1.2 nh
th no. Gi s ta bt u t nh AB v t cho nh ny mu xanh. Khi , ta c th t cho nh
AC mu xanh v khng c cnh ni nh ny vi AB. AD cng c th t mu xanh v khng c
cnh ni AD vi AB, AC. nh BA khng c cnh ni ti AB, AC, AD nn cng c th c t
mu xanh. Tuy nhin, nh BC khng t c mu xanh v tn ti cnh ni BC v AB. Tng t
nh vy, BD, DA, DB khng th t mu xanh v tn ti cnh ni chng ti mt trong cc nh
t mu xanh. Cnh DC th c th t mu xanh. Cui cng, cnh EA, EB, EC cng khng th t
mu xanh trong khi ED c th c t mu xanh.

AB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

Hnh 1.4 T mu xanh cho cc nh ca th ng r


Tip theo, ta s dng mu t cc nh cha c t mu bc trc. u tin l
BC. BD cng c th t mu , tuy nhin do tn ti cnh ni DA vi BD nn DA khng c t
mu . Tng t nh vy, DB khng t c mu cn EA c th t mu . Cc nh cha
c t mu cn li u c cnh ni ti cc nh t mu nn cng khng c t mu.

AB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

Hnh 1.5 T mu trong bc 2


Bc 3, cc nh cha c t mu cn li l DA, DB, EB, EC. Nu ta t mu nh DA l
mu lc th DB cng c th t mu lc. Khi , EB, EC khng th t mu lc v ta chn 1 mu
th t l mu vng cho 2 nh ny.

AB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

Hnh 1.6 T mu lc v mu vng cho cc nh cn li


Nh vy, ta c th dng 4 mu xanh, , lc, vng t mu cho th ng r hnh 1.2
theo yu cu nh ni trn. Bng tng hp mu c m t nh sau:
Mu

Ng r

Xanh

AB, AC, AD, BA, DC, ED

BC, BD, EA

Lc

DA, DB

Vng

EB, EC
Bng 1.2 Bng tng hp mu

Thut ton tham n khng m bo cho ra kt qu ti u l s mu t nht c dng. Tuy


nhin, ngi ta c th dng mt s tnh cht ca th nh gi kt qu thu c.
Tr li vi vn nt giao thng, t kt qu t mu trn, ta c th thit k h thng n
giao thng theo bng tng hp mu trn, trong mi trng thi ca h thng n tng ng vi
1 mu. Ti mi trng thi, cc ng r nm ti hng tng ng vi mu c cho php i, cc
ng r cn li b cm.
1.1.2

Ngn ng din t gii thut v k thut tinh chnh tng bc

Sau khi xy dng c m hnh ton hc cho vn cn gii quyt, tip theo, ta c th
hnh thnh mt thut ton cho m hnh . Phin bn u tin ca thut ton thng c din t
di dng cc pht biu tng i tng qut, v sau s c tinh chnh dn tng bc thnh
chui cc lnh c th, r rng hn. V d trong thut ton tham n trn, ta m t bc thc hin
mc tng qut l La chn 1 nh cha c t mu. Vi pht biu nh vy, ta hy vng rng
ngi c c th nm c tng thc hin thao tc. Tuy nhin, chuyn cc pht biu
8

thnh chng trnh my tnh, cn phi qua 1 s bc tinh chnh cho ti khi t n mc cc pht
biu u c th c chuyn i trc tip sang cc lnh ca ngn ng lp trnh.
Tr li v d v bi ton t mu th bng thut ton tham n. Ta s xem xt vic m t
thut ton t mc tng qut cho ti mt s mc c th hn. Ti bc no , gi s ta c th G
c 1 s nh c t mu theo quy tc ni trn. Th tc Tham_an di y s xc nh 1
tp cc nh cha c t mu thuc G m c th cng c t bi 1 mu mi. Th tc ny s
c gi i gi li nhiu ln cho ti khi tt c cc nh ca G c t mu. mc tng qut,
th tc c m t nh sau:
void

Tham_an(GRAPH: G, SET: Mau_moi)

{
Mau_moi = Tp rng;
For mi nh v cha c t mu thuc G
If v khng c ni ti nh no trong tp Mau_moi
{
T mu mi cho nh v;
a v vo tp Mau_moi;
}
}

Trong th tc trn, ta s dng mt ngn ng din t gii thut ta nh ngn ng lp trnh


C. Trong ngn ng ny, cc lnh c m t di dng ngn ng t nhin nhng vn tun theo c
php ca ngn ng lp trnh.
Ta nhn thy rng cc pht biu trong th tc trn cn rt tng qut, v cha tng ng vi
cc lnh trong ngn ng lp trnh, chng hn cc iu kin kim tra trong cu lnh For v If
mc m t hin ti l khng thc hin c trong C. th tc c th thc thi c, ta cn phi
tinh chnh mt s bc c th chuyn i v chng trnh trong ngn ng lp trnh C thng
thng.
u tin, ta xem xt lnh If trn. kim tra xem nh v c ni ti mt nh no trong
tp Mau_moi hay khng, ta xem xt tng nh w trong Mau_moi v s dng th G kim tra
xem c tn ti cnh ni v w khng. lu gi kt qu kim tra, ta s dng mt bin ton_tai.
Khi , th tc c tinh chnh nh sau:
void Tham_an(GRAPH: G, SET: Mau_moi)
{
int ton_tai;
Mau_moi = Tp rng;
For mi nh v cha c t mu thuc G
{
ton_tai = 0;
For mi nh w thuc Mau_moi
If tn ti cnh ni v v w trong G
ton_tai = 1;
If ton_tai = = 1
{
9

T mu mi cho nh v;
a v vo tp Mau_moi;
}
}
}

Nh vy, ta c th thy rng iu kin kim tra trong pht biu If c m t c th hn


bng cc pht nh hn,v cc pht biu ny c th d dng chuyn thnh cc lnh c th trong C.
Tip theo, ta s tinh chnh cc vng lp For duyt qua cc nh thuc G v thuc Mau_moi.
lm iu ny, tt nht l ta thay For bng mt vng lp While, bin v ban u c gn l phn t
u tin cha t mu trong tp G, v ti mi bc lp, bin v s c thay bng phn t cha t
mu tip theo trong G. Vng lp F bn trong c th thc hin tng t.
Void Tham_an(GRAPH: G, SET: Mau_moi)
{
int ton_tai;
int v, w
Mau_moi = Tp rng;
v = nh cha t mu u tin trong G ;
While v != NULL
{
ton_tai = 0;
w = nh u tin trong Mau_moi;
While w != NULL{
If tn ti cnh ni v v w trong G
ton_tai = 1;
w = nh tip theo trong Mau_moi ;
}
If ton_tai = = 1
{
T mu mi cho nh v;
a v vo tp Mau_moi;
}
v = nh cha t mu tip theo trong G;
}
}
Nh vy, ta thy cc pht biu trong th tc kh c th, tuy nhin, chuyn i thnh
chng trnh trong ngn ng C th cn ti vi bc tinh chnh na. Bn c hy xem nh l
bi tp v t gii hiu r v ngn ng din t gii thut cng nh k thut tinh chnh tng
bc.
1.2 PHN TCH THUT TON
Vi mi vn cn gii quyt, ta c th tm ra nhiu thut ton khc nhau. C nhng thut
ton thit k n gin, d hiu, d lp trnh v sa li, tuy nhin thi gian thc hin ln v tiu tn
10

nhiu ti nguyn my tnh. Ngc li, c nhng thut ton thit k v lp trnh rt phc tp,
nhng cho thi gian chy nhanh hn, s dng ti nguyn my tnh hiu qu hn. Khi , cu hi
t ra l ta nn la chn gii thut no thc hin?
i vi nhng chng trnh ch c thc hin mt vi ln th thi gian chy khng phi l
tiu ch quan trng nht. i vi bi ton kiu ny, thi gian lp trnh vin xy dng v hon
thin thut ton ng gi hn thi gian chy ca chng trnh v nh vy nhng gii thut n
gin v mt thit k v xy dng nn c la chn.
i vi nhng chng trnh c thc hin nhiu ln th thi gian chy ca chng trnh
ng gi hn rt nhiu so vi thi gian c s dng thit k v xy dng n. Khi , la chn
mt gii thut c thi gian chy nhanh hn (cho d vic thit k v xy dng phc tp hn) l mt
la chn cn thit. Trong thc t, trong giai on u ca vic gii quyt vn , mt gii thut
n gin thng c thc hin trc nh l 1 nguyn mu (prototype), sau n s c phn
tch, nh gi, v ci tin thnh cc phin bn tt hn.
1.2.1

c lng thi gian thc hin chng trnh


Thi gian chy ca 1 chng trnh ph thuc vo cc yu t sau:
-

D liu u vo

Cht lng ca m my c to ra bi chng trnh dch

Tc thc thi lnh ca my

phc tp v thi gian ca thut ton

Thng thng, thi gian chy ca chng trnh khng ph thuc vo gi tr d liu u vo
m ph thuc vo kch thc ca d liu u vo. Do vy thi gian chy ca chng trnh nn
c nh ngha nh l mt hm c tham s l kch thc d liu u vo. Gi s T l hm c
lng thi gian chy ca chng trnh, khi vi d liu u vo c kch thc n th thi gian
chy ca chng trnh l T(n). V d, i vi mt s chng trnh th thi gian chy l an hoc
an2, trong a l hng s. n v ca hm T(n) l khng xc nh, tuy nhin ta c th xem nh
T(n) l tng s lnh c thc hin trn 1 my tnh l tng.
Trong nhiu chng trnh, thi gian thc hin khng ch ph thuc vo kch thc d liu
vo m cn ph thuc vo tnh cht ca n. Khi tnh cht d liu vo tho mn mt s c im
no th thi gian thc hin chng trnh c th l ln nht hoc nh nht. Khi , ta nh ngha
thi gian thc hin chng trnh T(n) trong trng hp xu nht hoc tt nht. l thi gian
thc hin ln nht hoc nh nht trong tt c cc b d liu vo c kch thc n. Ta cng nh
ngha thi gian thc hin trung bnh ca chng trnh trn mi b d liu vo kch thc n. Trong
thc t, c lng thi gian thc hin trung bnh kh hn nhiu so vi thi gian thc hin trong
trng hp xu nht hoc tt nht, bi v vic phn tch thut ton trong trng hp trung bnh
kh hn v mt ton hc, ng thi khi nim trung bnh khng c ngha thc s r rng.
Yu t cht lng ca m my c to bi chng trnh dch v tc thc thi lnh ca
my cng nh hng ti thi gian thc hin chng trnh cho thy chng ta khng th th hin
thi gian thc hin chung trnh di n v thi gian chun, chng hn pht hoc giy. Thay vo
, ta c th pht biu thi gian thc hin chng trnh t l vi n hoc n2 v.v. H s ca t l l 1
hng s cha xc nh, ph thuc vo my tnh, chng trnh dch, v cc nhn t khc.
K hiu O(n)
biu th cp tng ca hm, ta s dng k hiu O(n). V d, ta ni thi gian thc hin
T(n) ca chng trnh l O(n2), c ngha l tn ti cc hng s dung c v n0 sao cho T(n) cn2
vi n n0.
11

V d, xt hm T(n) = (n+1)2. Ta c th thy T(n) l O(n2) vi n0 = 1 v c = 4, v ta c T(n)


= (n+1)2 < 4n2 vi mi n 1. Trong v d ny, ta cng c th ni rng T(n) l O(n3), tuy nhin,
pht biu ny yu hn pht biu T(n) l O(n2).
Nhn chung, ta ni T(n) l O(f(n)) nu tn ti cc hng s dng c v n0 sao cho T(n) <
c.f(n) vi n n0. Mt chng trnh c thi gian thc hin l O(f(n)) th c xem l c cp
tng f(n).
Vic nh gi cc chng trnh c th c thc hin qua vic nh gi cc hm thi gian
chy ca chng trnh,b qua cc hng s t l. Vi gi thit ny, mt chng trnh vi thi gian
thc hin l O(n2) s tt hn chng trnh vi thi gian chy O(n3). Bn cnh cc yu t hng s
xut pht t chng trnh dch v my, cn c thm hng s t bn thn chung trnh. V d, trn
cng mt chng trnh dch v cng 1 my, chng trnh u tin c thi gian thc hin l 100n2,
trong khi chung trnh th 2 c thi gian thc hin l 5n3. Vi n nh, c th 5n3 nh hn 100n2,
tuy nhin vi n ln th 5n3 s ln hn 100n2 ng k.
Mt l do na xem xt cp tng v thi gian thc hin ca chng trnh l n cho
php ta xc nh ln ca bi ton m ta c th gii quyt. Mc d my tnh c tc ngy cng
cao, tuy nhin, vi nhng chng trnh c thi gian thc hin c cp tng ln (t n2 tr ln),
th vic tng tc ca my tnh to ra s khc bit khng ng k v kch thc bi ton c th
x l bi my tnh trong mt khong thi gian c nh.
1.2.2

Tnh ton thi gian thc hin chng trnh

tnh ton c thi gian thc hin chng trnh, ta cn ch mt s nguyn tc cng v
nhn cp tng ca hm nh sau :
Gi s T1(n) v T2(n) l thi gian chy ca 2 on chng trnh P1 v P2, trong T1(n) l
O(f(n)) v T2(n) l O(g(n)). Khi , thi gian thc hin ca 2 on chng trnh trnh ni tip P1,
P2 l O(max(f(n), g(n))).
Nguyn tc cng trn c th s dng tnh thi gian thc hin ca chng trnh bao gm
1 s tun t cc bc, mi bc c th l 1 on chng trnh bao gm 1 s vng lp v r nhnh.
V d, gi s ta c 3 bc thc hin chng trnh ln lt c thi gian chy l O(n2), O(n3),
O(nlog n). Khi , thi gian chy ca 2 on chng trnh u l O(max(n2, n3)) = O(n3), cn thi
gian chy ca c 3 on chng trnh l O(max(n3, nlog n)) = O(n3).
Nguyn tc nhn cp tng ca hm nh sau: Vi gi thit v T1(n) v T2(n) nh trn, nu
2 on chng trnh P1 v P2 khng c thc hin tun t m lng nhau th thi gian chy tng
th s l T1(n).T2(n) = O(f(n).(g(n)).
minh ho cho vic phn tch v tnh ton thi gian thc hin ca 1 chng trnh, ta s
xem xt mt thut ton n gian sp xp cc phn t ca mt tp hp, l thut ton sp xp
ni bt (bubble sort).
Thut ton nh sau :
void buble (int a[n]){
int i, j, temp;
1.
for (i = 0; i < n-1; i++)
2.
for (j = n-1; j>= i+1; j--)
3.
if (a[j-1] > a[j]{
// i ch cho a[j] v a[j-1]
4.
temp = a[j-1];
5.
a[j-1] = a[j];
12

6.

a[j] = temp;
}

Trong thut ton ny, mi ln duyt ca vng lp trong (bin duyt j) s lm ni ln trn
phn t nh nht trong cc phn t c duyt.
D thy rng kch thc d liu vo chnh l s phn t c sp, n. Mi lnh gn s c
thi gian thc hin c nh, khng ph thuc vo n, do vy, cc lnh 4, 5, 6 s c thi gian thc
hin l O(1), tc thi gian thc hin l hng s. Theo quy tc cng cp tng th tng thi gian
thc hin c 3 lnh l O(max(1, 1, 1)) = O(1).
Tip theo ta s xem xt thi gian thc hin ca cc lnh lp v r nhnh. Lnh If kim tra
iu kin thc hin nhm lnh gn 4, 5, 6. Vic kim tra iu kin s c thi gian thc hin l
O(1). Ngoi ra, chng ta cha bit c l iu kin c tho mn hay khng, tc l khng bit
c nhm lnh gn c c thc hin hay khng. Do vy, ta gi thit trng hp xu nht l tt
c cc ln kim tra iu kin u tho mn, v cc lnh gn c thc hin. Nh vy, ton b lnh
If s c thi gian thc hin l O(1).
Tip tc xt t trong ra ngoi, ta xt n vng lp trong (bin duyt j). Trong vng lp ny,
ti mi bc lp ta cn thc hin cc thao tc nh kim tra gp iu kin dng cha v tng
bin duyt ln 1 nu cha dng. Nh vy, mi bc lp c thi gian thc hin l O(1). S bc
lp l n-i, do theo quy tc nhn cp tng th tng thi gian thc hin ca vng lp ny l
O((n-i)x1) = O(n-i).
Cui cng, ta xt vng lp ngoi cng (bin duyt i). Vng lp ny c thc hin (n-1) ln,
do , tng thi gian thc hin ca chng trnh l:
(n-i) = n(n-1)/2 = n2/2- n/2 = O(n2)
Nh vy, thi gian thc hin gii thut sp xp ni bt l t l vi n2.
Mt s quy tc chung trong vic phn tch v tnh ton thi gian thc hin chng trnh
-

Thi gian thc hin cc lnh gn, c, ghi .v.v, lun l O(1).

Thi gian thc hin chui tun t cc lnh c xc nh theo quy tc cng cp tng.
C ngha l thi gian thc hin ca c nhm lnh tun t c tnh l thi gian thc
hin ca lnh ln nht.

Thi gian thc hin lnh r nhnh If c tnh bng thi gian thc hin cc lnh khi
iu kin kim tra c tho mn v thi gian thc hin vic kim tra iu kin. Thi
gian thc hin vic kim tra iu kin lun l O(1).

Thi gian thc hin 1 vng lp c tnh l tng thi gian thc hin cc lnh thn
vng lp qua tt c cc bc lp v thi gian kim tra iu kin dng (thng l
O(1)). Thi gian thc hin ny thng c tnh theo quy tc nhn cp tng s ln
thc hin bc lp v thi gian thc hin cc lnh thn vng lp. Cc vng lp phi
c tnh thi gian thc hin mt cch ring r.

1.3 TM TT CHNG 1
Cc kin thc cn nh trong chng 1:
-

Thut ton l mt chui hu hn cc lnh. Mi lnh c mt ng ngha r rng v c th


c thc hin vi mt lng hu hn ti nguyn trong mt khong hu hn thi gian.

13

Thut ton thng c m t bng cc ngn ng din t gii thut gn vi ngn ng


t nhin. Cc m t ny s c tnh chnh dn dn t ti mc ngn ng lp trnh.

Thi gian thc hin thut ton thng c coi nh l 1 hm ca kch thc d liu u
vo.

Thi gian thc hin thut ton thng c tnh trong cc trng hp tt nht, xu nht,
hoc trung bnh.

biu th cp tng ca hm, ta s dng k hiu O(n). V d, ta ni thi gian thc


hin T(n) ca chng trnh l O(n2), c ngha l tn ti cc hng s dung c v n0 sao
cho T(n) cn2 vi n n0.

Cp tng v thi gian thc hin ca chng trnh cho php ta xc nh ln ca bi


ton m ta c th gii quyt.

Quy tc cng cp tng: Gi s T1(n) v T2(n) l thi gian chy ca 2 on chng


trnh P1 v P2, trong T1(n) l O(f(n)) v T2(n) l O(g(n)). Khi , thi gian thc hin
ca 2 on chng trnh trnh ni tip P1, P2 l O(max(f(n), g(n))).

Quy tc nhn cp tng: Vi gi thit v T1(n) v T2(n) nh trn, nu 2 on chng


trnh P1 v P2 khng c thc hin tun t m lng nhau th thi gian chy tng th s
l T1(n).T2(n) = O(f(n).(g(n)).

1.4 CU HI V BI TP
1. Trnh by khi nim thut ton? Cc c im ca thut ton?
2. Trong mt gii v ch bng c 6 i bng vng trn. Cc i l A, B, C, D, E, F.
i A vi B v C. i B vi D v F. i E vi C v F. Mi i
mi tun 1 trn. Hy lp 1 lch cho cc i bng sao cho tt c cc i u s trn
quy nh trong 1 s tun va phi. Thc hin phn tch, thit k thut ton. Biu din
thut ton bng ngn ng din t gii thut, sau tinh chnh v dng ngn ng lp
trnh C.
3. Thi gian thc hin mt chng trnh thng ph thuc vo cc yu t no? Phn tch
c th tng yu t.
4. Ni thi gian thc hin chng trnh l T(n) = O(f(n)) c ngha l g? Cho v d minh
ho.
5. Nu quy tc cng v nhn cp tng ca hm. C v d minh ho.
6. Nu cc quy tc chung trong vic phn tch v nh gi thi gian thc hin chng
trnh.

14

CHNG 2

QUI

Chng 2 trnh by cc khi nim v nh ngha qui, chng trnh qui. Ngoi vic
trnh by cc u im ca chng trnh qui, cc tnh hung khng nn s dng qui cng
c cp cng vi cc v d minh ho.
Chng ny cng cp v phn tch mt s thut ton qui tiu biu v kinh in nh
bi ton thp H ni, cc thut ton quay lui .v.v
hc tt chng ny, sinh vin cn nm vng phn l thuyt. Sau , nghin cu k cc
phn tch thut ton v thc hin chy th chng trnh. C th thay i mt s im trong
chng trnh v chy th nm k hn v thut ton. Ngoi ra, sinh vin cng c th tm cc bi
ton tng t phn tch v gii quyt bng chng trnh.
2.1 KHI NIM
qui l mt khi nim c bn trong ton hc v khoa hc my tnh. Mt i tng c
gi l qui nu n hoc mt phn ca n c nh ngha thng qua khi nim v chnh n. Mt
s v d in hnh v vic nh ngha bng qui l:
1- nh ngha s t nhin:
- 0 l s t nhin.
- Nu k l s t nhin th k+1 cng l s t nhin.
Nh vy, bt u t pht biu 0 l s t nhin, ta suy ra 0+1=1 l s t nhin. Tip
theo 1+1=2 l s t nhin, v.v.
2- nh ngha xu k t bng qui:
- Xu rng l 1 xu k t.
- Mt ch ci bt k ghp vi 1 xu s to thnh 1 xu mi.
T pht biu Xu rng l 1 xu k t, ta ghp bt k 1 ch ci no vi xu rng u
to thnh xu k t. Nh vy, ch ci bt k c th coi l xu k t. Tip tc ghp 1 ch
ci bt k vi 1 ch ci bt k cng to thnh 1 xu k t, v.v.
3- nh ngha hm giai tha, n!.
- Khi n=0, nh ngha 0!=1
- Khi n>0, nh ngha n!=(n-1)! x n
Nh vy, khi n=1, ta c 1!=0!x1 = 1x1=1. Khi n=2, ta c 2!=1!x2=1x2=2, v.v.
Trong lnh vc lp trnh, mt chng trnh my tnh gi l qui nu trong chng trnh c
li gi chnh n. iu ny, thot tin, nghe c v hi v l. Mt chng trnh khng th gi mi
chnh n, v nh vy s to ra mt vng lp v hn. Trn thc t, mt chng trnh qui trc
khi gi chnh n bao gi cng c mt thao tc kim tra iu kin dng. Nu iu kin dng tha
mn, chng trnh s khng gi chnh n na, v qu trnh qui chm dt. Trong cc v d
trn, ta u thy c cc im dng. Chng hn, trong v d th nht, nu k = 0 th c th suy ngay
k l s t nhin, khng cn tham chiu xem k-1 c l s t nhin hay khng.
Nhn chung, cc chng trnh qui u c cc c im sau:
15

Chng trnh ny c th gi chnh n.

Khi chng trnh gi chnh n, mc ch l gii quyt 1 vn tng t, nhng nh


hn.

Vn nh hn ny, cho ti 1 lc no , s n gin ti mc chng trnh c th t


gii quyt c m khng cn gi ti chnh n na.

Khi chng trnh gi ti chnh n, cc tham s, hoc khong tham s, thng tr nn nh


hn, phn nh 1 thc t l vn tr nn nh hn, d hn. Khi tham s gim ti mc cc
tiu, mt iu kin so snh c kim tra v chng trnh kt thc, chm dt vic gi ti chnh
n.
u im ca chng trnh qui cng nh nh ngha bng qui l c th thc hin mt
s lng ln cc thao tc tnh ton thng qua 1 on chng trnh ngn gn (thm ch khng c
vng lp, hoc khng tng minh c th thc hin bng cc vng lp) hay c th nh ngha
mt tp hp v hn cc i tng thng qua mt s hu hn li pht biu. Thng thng, mt
chng trnh c vit di dng qui khi vn cn x l c th c gii quyt bng qui.
Tc l vn cn gii quyt c th a c v vn tng t, nhng n gin hn. Vn ny
li c a v vn tng t nhng n gin hn na .v.v, cho n khi n gin ti mc c
th trc tip gii quyt c ngay m khng cn a v vn n gin hn na.
2.1.1

iu kin c th vit mt chng trnh qui

Nh ni trn, chng trnh c th vit di dng qui th vn cn x l phi


c gii quyt 1 cch qui. Ngoi ra, ngn ng dng vit chng trnh phi h tr qui.
c th vit chng trnh qui ch cn s dng ngn ng lp trnh c h tr hm hoc th tc,
nh mt th tc hoc hm c th c li gi n chnh th tc hoc hm . Cc ngn ng lp
trnh thng dng hin nay u h tr k thut ny, do vy vn cng c to cc chng trnh
qui khng phi l vn cn phi xem xt. Tuy nhin, cng nn lu rng khi mt th tc
qui gi n chnh n, mt bn sao ca tp cc i tng c s dng trong th tc ny nh cc
bin, hng, cc th tc con, .v.v. cng c to ra. Do vy, nn hn ch vic khai bo v s dng
cc i tng ny trong th tc qui nu khng cn thit nhm trnh lng ph b nh, c bit
i vi cc li gi qui c gi i gi li nhiu ln. Cc i tng cc b ca 1 th tc qui
khi c to ra nhiu ln, mc d c cng tn, nhng do khc phm vi nn khng nh hng g
n chng trnh. Cc i tng s c gii phng khi th tc cha n kt thc.
Nu trong mt th tc c li gi n chnh n th ta gi l qui trc tip. Cn trong
trng hp mt th tc c mt li gi th tc khc, th tc ny li gi n th tc ban u th
c gi l qui gin tip. Nh vy, trong chng trnh khi nhn vo c th khng thy ngay s
qui, nhng khi xem xt k hn th s nhn ra.
2.1.2

Khi no khng nn s dng qui

Trong nhiu trng hp, mt chng trnh c th vit di dng qui. Tuy nhin, qui
khng hn l gii php tt nht cho vn . Nhn chung, khi chng trnh c th vit di dng
lp hoc cc cu trc lnh khc th khng nn s dng qui.
L do th nht l, nh ni trn, khi mt th tc qui gi chnh n, tp cc i tng
c s dng trong th tc ny nh cc bin, hng, cu trc .v.v s c to ra. Ngoi ra, vic
chuyn giao iu khin t cc th tc cng cn lu tr cc thng s dng cho vic tr li iu
khin cho th tc ban u.
L do th hai l vic s dng qui i khi to ra cc tnh ton tha, khng cn thit do
tnh cht t ng gi thc hin th tc khi cha gp iu kin dng ca qui. minh ha cho
16

iu ny, chng ta s xem xt mt v d, trong c qui v lp u c th c s dng. Tuy


nhin, ta s phn tch thy s dng qui trong trng hp ny gy lng ph b nh v cc tnh
ton khng cn thit nh th no.
Xt bi ton tnh cc phn t ca dy Fibonaci. Dy Fibonaci uc nh ngha nh sau:
-

F(0) = 0

F(1) =1

Vi n >1 th F(n) = F(n-1) + F(n-2)

R rng l nhn vo mt nh ngha qui nh trn, chng trnh tnh phn t ca dy


Fibonaci c v nh rt ph hp vi thut ton qui. Phng thc qui tnh dy ny c th
c vit nh sau:
int Fibonaci(int i){
if (i==0) return 0;
if (i==1) return 1;
return Fibonaci(i-1) + Fibonaci (i-2)
}
Kt qu thc hin chng trnh khng c g sai. Tuy nhin, ch rng mt li gi qui
Fibonaci (n) s dn ti 2 li gi qui khc ng vi n-1 v n-2. Hai li gi ny li gy ra 4 li gi
na .v.v, c nh vy s li gi qui s tng theo cp s m. iu ny r rng l khng hiu qu
v trong s cc li gi qui c rt nhiu li gi trng nhau. V d li gi qui Fibonaci (6)
s dn n 2 li gi Fibonaci (5) v Fibonaci (4). Li gi Fibonaci (5) s gi Fibonaci (4) v
Fibonaci (3). Ngay ch ny, ta thy c 2 li gi Fibonaci (4) c thc hin. Hnh 2.1 cho thy
s cc li gi c thc hin khi gi th tc Fibonaci (6).
6
5

4
3
2
1

2
1

1
0

2
1

Hnh 2.1 Cc li gi qui c thc hin khi gi th tc Fibonaci (6)


Trong hnh v trn, ta thy tnh c phn t th 6 th cn c ti 25 li gi ! Sau y, ta
s xem xt vic s dng vng lp tnh gi tr cc phn t ca dy Fibonaci nh th no.
u tin, ta khai bo mt mng F cc s t nhin cha cc s Fibonaci. Vng lp tnh
v gn cc s ny vo mng rt n gin nh sau:
F[0]=0;
F[1]=1;
for (i=2; i<n-1; i++)
17

F[i] = F[i-1] + F [i-2];

R rng l vi vng lp ny, mi s Fibonaci (n) ch c tnh 1 ln thay v c tnh ton


chng cho nh trn.
Tm li, nn trnh s dng qui nu c mt gii php khc cho bi ton. Mc d vy, mt
s bi ton t ra rt ph hp vi phng php qui. Vic s dng qui gii quyt cc bi
ton ny hiu qu v rt d hiu. Trn thc t, tt c cc gii thut qui u c th c a v
dng lp (cn gi l kh qui). Tuy nhin, iu ny c th lm cho chng trnh tr nn phc
tp, nht l khi phi thc hin cc thao tc iu khin stack qui (bn c c th tm hiu thm
k thut kh qui cc ti liu tham kho khc), dn n vic chng trnh tr nn rt kh hiu.
Phn tip theo s trnh by mt s thut ton qui in hnh.
2.2 THIT K GII THUT QUI
2.2.1

Chng trnh tnh hm n!


Theo nh ngha trnh by phn trc, n! = 1 nu n=0, ngc li, n! = (n-1)! * n.
int giaithua (int n){
if (n==0) return 1;
else return giaithua(n-1) * n;
}

Trong chng trnh trn, im dng ca thut ton qui l khi n=0. Khi , gi tr ca
hm giaithua(0) c th tnh c ngay lp tc m khng cn gi hm qui khc. Nu iu kin
dng khng tha mn, s c mt li gi qui hm giai tha vi tham s l n-1, nh hn tham s
ban u 1 n v (tc l bi ton tnh n! c qui v bi ton n gin hn l tnh (n-1)!).
2.2.2

Thut ton Euclid tnh c s chung ln nht ca 2 s nguyn dng

c s chung ln nht (USCLN) ca 2 s nguyn dng m, n l 1 s k ln nht sao cho m


v n u chia ht cho k. Mt phng php n gin nht tm USCLN ca m v n l duyt t s
nh hn trong 2 s m, n cho n 1, ngay khi gp s no m m v n u chia ht cho n th
chnh l USCLN ca m, n. Tuy nhin, phng php ny khng phi l cch tm USCLN hiu qu.
Cch y hn 2000 nm, Euclid pht minh ra mt gii thut tm USCLN ca 2 s nguyn
dng m, n rt hiu qu. tng c bn ca thut ton ny cng tng t nh tng qui, tc
l a bi ton v 1 bi ton n gin hn. C th, gi s m ln hn n, khi vic tnh USCLN
ca m v n s c a v bi ton tnh USCLN ca m mod n v n v USCLN(m, n) = USCLN(m
mod n, n).
Thut ton c ci t nh sau:
int USCLN(int m, int n){
if (n==0) return m;
else return USCLN(n, m % n);
}
im dng ca thut ton l khi n=0. Khi ng nhin l USCLN ca m v 0 chnh l
m, v 0 chia ht cho mi s. Khi n khc 0, li gi qui USCLN(n, m% n) c thc hin. Ch
rng ta gi s m >= n trong th tc tnh USCLN, do , khi gi qui ta gi USCLN (n, m% n)
m bo th t cc tham s v n bao gi cng ln hn phn d ca php m cho n. Sau mi ln
gi qui, cc tham s ca th tc s nh dn i, v sau 1 s hu hn li gi tham s nh hn s
bng 0. chnh l im dng ca thut ton.

18

V d, tnh USCLN ca 108 v 45, ta gi th tc USCLN(108, 45). Khi , cc th tc


sau s ln lt c gi:
USCLN(108, 45) 108 chia 45 d 18, do tip theo gi
USCLN(45, 18) 45 chia 18 d 9, do tip theo gi
USCLN(18, 9) 18 chia 9 d 0, do tip theo gi
USCLN(9, 0) tham s th 2 = 0, do kt qu l tham s th nht, tc l 9.
Nh vy, ta tm c USCLN ca 108 v 45 l 9 ch sau 4 ln gi th tc.
2.2.3

Cc gii thut qui dng chia tr (divide and conquer)

tng c bn ca cc thut ton dng chia tr l phn chia bi ton ban u thnh 2
hoc nhiu bi ton con c dng tng t v ln lt gii quyt tng bi ton con ny. Cc bi
ton con ny c coi l dng n gin hn ca bi ton ban u, do vy c th s dng cc li
gi qui gii quyt. Thng thng, cc thut ton chia tr chia b d liu u vo thnh 2
phn ring r, sau gi 2 th tc qui vi cc b d liu u vo l cc phn va c chia.
Mt v d in hnh ca gii thut chia tr l Quicksort, mt gii thut sp xp nhanh.
tng c bn ca gii thut ny nh sau:
Gii s ta cn sp xp 1 dy cc s theo chiu tng dn. Tin hnh chia dy thnh 2 na
sao cho cc s trong na u u nh hn cc s trong na sau. Sau , tin hnh thc hin sp
xp trn mi na ny. R rng l sau khi mi na c sp, ta tin hnh ghp chng li th s
c ton b dy c sp. Chi tit v gii thut Quicksort s c trnh by trong chng 7 - Sp
xp v tm kim.
Tip theo, chng ta s xem xt mt bi ton cng rt in hnh cho lp bi ton c gii
bng gii thut qui chia tr.
Bi ton thp H ni
C 3 chic cc v mt b n chic a. Cc a ny c kch thc khc nhau v mi a u
c 1 l gia c th xuyn chng vo cc cc. Ban u, tt c cc a u nm trn 1 cc,
trong , a nh hn bao gi cng nm trn a ln hn.

Cc A

Cc B

Cc C

Hnh 2.2 Bi ton thp H ni


Yu cu ca bi ton l chuyn b n a t cc ban u A sang cc ch C (c th s dng
cc trung gian B), vi cc iu kin:
-

Mi ln chuyn 1 a.

Trong mi trng hp, a c kch thc nh hn bao gi cng phi nm trn a c


kch thc ln hn.

Vi n=1, c th thc hin yu cu bi ton bng cch chuyn trc tip a 1 t cc A sang
cc C.
19

Vi n=2, c th thc hin nh sau:


-

Chuyn a nh t cc A sang cc trung gian B.

Chuyn a ln t cc A sang cc ch C.

Cui cng, chuyn a nh t cc trung gian B sang cc ch C.

Nh vy, c 2 a c chuyn sang cc ch C v khng c tnh hung no a ln nm


trn a nh.
Vi n > 2, gi s ta c cch chuyn n-1 a, ta thc hin nh sau:
-

Ly cc ch C lm cc trung gian chuyn n-1 a bn trn sang cc trung gian B.

Chuyn cc di cng (cc th n) sang cc ch C.

Ly cc ban u A lm cc trung gian chuyn n-1 a t cc trung gian B sang cc


ch C.

C th minh ha qu trnh chuyn ny nh sau:


Trng thi ban u:

Cc A

Cc B

Cc C

Bc 1: Chuyn n-1 a bn trn t cc A sang cc B, s dng cc C lm cc trung gian.

Cc A

Cc B

Cc C

Bc 2: Chuyn a di cng t cc A thng sang cc C.

Cc A

Cc B

Cc C

Bc 3: Chuyn n-1 a t cc B sang cc C s dng cc A lm cc trung gian.

20

Cc A

Cc B

Cc C

Nh vy, ta thy ton b n a c chuyn t cc A sang cc C v khng vi phm bt


c iu kin no ca bi ton.
y, ta thy rng bi ton chuyn n cc c chuyn v bi ton n gin hn l
chuyn n-1 cc. im dng ca thut ton qui l khi n=1 v ta chuyn thng cc ny t cc
ban u sang cc ch.
Tnh cht chia tr ca thut ton ny th hin ch: Bi ton chuyn n a c chia lm
2 bi ton nh hn l chuyn n-1 a. Ln th nht chuyn n-1 a t cc a sang cc trung gian b,
v ln th 2 chuyn n-1 a t cc trung gian b sang cc ch c.
Ci t qui cho thut ton nh sau:
-

Hm chuyen(int n, int a, int c) thc hin vic chuyn a th n t cc a sang cc c.

Hm thaphanoi(int n, int a, int c, int b) l hm qui thc hin vic chuyn n a t cc


a sang cc c, s dng cc trung gian l cc b.

Chng trnh nh sau:


void chuyen(int n, char a, char c){
printf(Chuyen dia thu %d tu coc %c
\n,n,a,c);
return;
}
void thaphanoi(int n, char a, char c, char b){
if (n==1) chuyen(1, a, c);
else{
thaphanoi(n-1, a, b, c);
chuyen(n, a, c);
thaphanoi(n-1, b, c,a);
}
return;
}

sang

coc

%c

Hm chuyen thc hin thao tc in ra 1 dng cho bit chuyn a th my t cc no sang


cc no.
Hm thaphanoi kim tra nu s a bng 1 th thc hin chuyn trc tip a t cc a sang
cc c. Nu s a ln hn 1, c 3 lnh c thc hin:
1- Li gi qui thaphanoi(n-1, a, b, c) chuyn n-1 a t cc a sang cc b, s dng cc
c lm cc trung gian.
2- Thc hin chuyn a th n t cc a sang cc c.

21

3- Li gi qui thaphanoi(n-1, b, c, a) chuyn n-1 a t cc b sang cc c, s dng cc


a lm cc trung gian.
Khi chy chng trnh vi s a l 4, ta c kt qu nh sau:

Hnh 2.3 Kt qu chy chung trnh thp H ni vi 4 a


phc tp ca thut ton l 2n-1. Ngha l chuyn n cc th mt 2n-1 thao tc chuyn.
Ta s chng minh iu ny bng phng php qui np ton hc:
Vi n=1 th s ln chuyn l 1 = 21-1.
Gi s gi thit ng vi n-1, tc l chuyn n-1 a cn thc hin 2n-1-1 thao tc chuyn.
Ta s chng minh rng chuyn n a cn 2n 1 thao tc chuyn.
Tht vy, theo phng php chuyn ca gii thut th c 3 bc. Bc 1 chuyn n-1 a t
cc a sang cc b mt 2n-1-1 thao tc. Bc 2 chuyn 1 a t cc a sang cc c mt 1 thao tc. Bc
3 chuyn n-1 a t cc b sang cc c mt 2n-1-1 thao tc. Tng cng ta mt (2n-1-1) + (2n-1-1) + 1 =
2*2n-1 -1 = 2n 1 thao tc chuyn. l iu cn chng minh.
Nh vy, thut ton c cp tng rt ln. Ni v cp tng ny, c mt truyn thuyt vui
v bi ton thp H ni nh sau: Ngy tn th s n khi cc nh s mt ngi cha thc hin
xong vic chuyn 40 chic a theo quy tc nh bi ton va trnh by. Vi phc tp ca bi
ton va tnh c, nu gi s mi ln chuyn 1 a t cc ny sang cc khc mt 1 giy th vi
240-1 ln chuyn, cc nh s ny phi mt t nht 34.800 nm th mi c th chuyn xong ton b
s a ny !
Di y l ton b m ngun chng trnh thp H ni vit bng C:
#include<stdio.h>
#include<conio.h>
void chuyen(int n, char a, char c);
void thaphanoi(int n, char a, char c, char b);

22

void chuyen(int n, char a, char c){


printf("Chuyen dia thu %d tu coc %c sang coc %c \n", n,
a, c);
return;
}
void thaphanoi(int n, char a, char c, char b){
if (n==1) chuyen(1, a, c);
else{
thaphanoi(n-1, a, b, c);
chuyen(n, a, c);
thaphanoi(n-1, b, c,a);
}
return;
}
void main(){
int sodia;
clrscr();
printf("Cho biet so dia can chuyen: ");
scanf("%d",&sodia);
printf("\nCac buoc chuyen nhu sau:\n\n");
thaphanoi(sodia, 'a', 'c', 'b');
getch();
return;
}

2.2.4

Thut ton quay lui (backtracking algorithms)

Nh chng ta bit, cc thut ton c xy dng gii quyt vn thng a ra 1


quy tc tnh ton no . Tuy nhin, c nhng vn khng tun theo 1 quy tc, v khi ta phi
dng phng php th - sai (trial-and-error) gii quyt. Theo phng php ny, qu trnh th sai c xem xt trn cc bi ton n gin hn (thng ch l 1 phn ca bi ton ban u). Cc
bi ton ny thng c m t di dng qui v thng lin quan n vic gii quyt mt s
hu hn cc bi ton con.
hiu r hn thut ton ny, chng ta s xem xt 1 v d in hnh cho thut ton quay
lui, l bi ton M i tun.
Cho bn c c kch thc n x n (c n2 ). Mt qun m c t ti ban u c to x0, y0
v c php dch chuyn theo lut c thng thng. Bi ton t ra l t ban u, tm mt chui
cc nc i ca qun m, sao cho qun m ny i qua tt c cc ca bn c, mi ng 1 ln.
Nh ni trn, qu trnh th - sai ban u c xem xt mc n gin hn. C th,
trong bi ton ny, thay v xem xt vic tm kim chui nc i ph khp bn c, ta xem xt vn
n gin hn l tm kim nc i tip theo ca qun m, hoc kt lun rng khng cn nc i
k tip tha mn. Ti mi bc, nu c th tm kim c 1 nc i k tip, ta tin hnh ghi li
nc i ny cng vi chui cc nc i trc v tip tc qu trnh tm kim nc i. Nu ti
bc no , khng th tm nc i k tip tha mn yu cu ca bi ton, ta quay tr li bc
23

trc, hy b nc i lu li trc v th sang 1 nc i mi. Qu trnh c th phi th ri


quay li nhiu ln, cho ti khi tm ra gii php hoc th ht cc phng n m khng tm ra
gii php.
Qu trnh trn c th c m t bng hm sau:
void ThuNuocTiepTheo;
{
Khi to danh sch cc nc i k tip;
do{
La chn 1 nc i k tip t danh sch;
if Chp nhn c
{
Ghi li nc i;
if Bn c cn trng
{
ThuNuocTiepTheo;
if Nc i khng thnh cng
Hy b nc i lu bc trc
}
}
}while (nc i khng thnh cng) && (vn cn nc i)
}
th hin hm 1 cch c th hn qua ngn ng C, trc ht ta phi nh ngha cc cu
trc d liu v cc bin dng cho qu trnh x l.
u tin, ta s dng 1 mng 2 chiu m t bn c:
int Banco[n][n];
Cc phn t ca mng ny c kiu d liu s nguyn. Mi phn t ca mng i din cho 1
ca bn c. Ch s ca phn t tng ng vi ta ca , chng hn phn t Banco[0][0]
tng ng vi (0,0) ca bn c. Gi tr ca phn t cho bit c qun m i qua hay
cha. Nu gi tr = 0 tc l qun m cha i qua, ngc li c qun m i qua.
Banco[x][y] = 0: (x,y) cha c qun m i qua
Banco[x][y] = i: (x,y) c qun m i qua ti nc th i.
Tip theo, ta cn phi thit lp thm 1 s tham s. xc nh danh sch cc nc i k
tip, ta cn ch ra ta hin ti ca qun m, t theo lut c thng thng ta xc nh cc
qun m c th i ti. Nh vy, cn c 2 bin x, y biu th ta hin ti ca qun m. cho
bit nc i c thnh cng hay khng, ta cn dng 1 bin kiu boolean.
Nc i k tip chp nhn c nu n cha c qun m i qua, tc l nu (u,v) c
chn l nc i k tip th Banco[u][v] = 0 l iu kin chp nhn. Ngoi ra, hin nhin l
phi nm trong bn c nn 0 u, v < n.
Vic ghi li nc i tc l nh du rng c qun m i qua. Tuy nhin, ta cng
cn bit l qun m i qua ti nc i th my. Nh vy, ta cn 1 bin i cho bit hin ti
ang th nc i th my, v ghi li nc i thnh cng bng cch gn gi tr Banco[u][v]=i.
24

Do i tng ln theo tng bc th, nn ta c th kim tra xem bn c cn trng khng bng
cch kim tra xem i bng n2 cha. Nu i<n2 tc l bn c vn cn trng.
bit nc i c thnh cng hay khng, ta c th kim tra bin boolean nh ni trn.
Khi nc i khng thnh cng, ta tin hnh hy nc i lu bc trc bng cch cho gi tr
Banco[u][v] = 0.
Nh vy, ta c th m t c th hn hm trn nh sau:
void ThuNuocTiepTheo(int i, int x, int y, int *q)
{
int u, v, *q1;
Khi to danh sch cc nc i k tip;
do{
*q1=0;
Chn nc i (u,v) trong danh sch nc i k tip;
if ((0 <= u) && (u<n) && (0 <= v) && (v<n) && (Banco[u][v]==0))
{
Banco[u][v]=i;
if (i<n*n)
{
ThuNuocTiepTheo(i+1, u, v, q1)
if (*q1==0) Banco[u][v]=0;
} else *q1=1;
}
}while ((*q1==0) && (Vn cn nc i))
*q=*q1;
}
Trong on chng trnh trn vn cn 1 thao tc cha c th hin bng ngn ng lp
trnh, l thao tc khi to v chn nc i k tip. By gi, ta s xem xt xem t (x,y), qun
m c th i ti cc no, v cch tnh v tr tng i ca cc so vi (x,y) ra sao.
Theo lut c thng thng, qun m t (x,y) c th i ti 8 trn bn c nh trong hnh v:
3

1
y

8
6

7
x

Hnh 2.4 Cc nc i ca qun m

25

Ta thy rng 8 m qun m c th i ti t (x,y) c th tnh tng i so vi (x,y) l:


(x+2, y-1); (x+1, y-2); (x-1, y-2); (x-2, y-1); (x-2, y+1); (x-1, y+2); (x+1; y+2); (x+2, y+1)
Nu gi dx, dy l cc gi tr m x, y ln lt phi cng vo to thnh m qun m c
th i ti, th ta c th gn cho dx, dy mng cc gi tr nh sau:
dx = {2, 1, -1, -2, -2, -1, 1, 2}
dy = {-1, -2, -2, -1, 1, 2, 2, 1}
Nh vy, danh sch cc nc i k tip (u, v) c th c to ra nh sau:
u = x + dx[i]
v = y + dy[i]
i = 1..8
Ch rng, vi cc nc i nh trn th (u, v) c th l nm ngoi bn c. Tuy nhin, nh
ni trn, ta c iu kin 0 u, v < n, do vy lun m bo (u, v) c chn l hp l.
Cui cng, hm ThuNuocTiepTheo c th c vit li hon ton bng ngn ng C nh
sau:
void ThuNuocTiepTheo(int i, int x, int y, int *q)
{
int k, u, v, *q1;
k=0;
do{
*q1=0;
u=x+dx[k];
v=y+dy[k];
if ((0 <= u) && (u<n) && (0 <= v) && (v<n) && (Banco[u][v]==0))
{
Banco[u][v]=i;
if (i<n*n)
{
ThuNuocTiepTheo(i+1, u, v, q1)
if (*q1==0) Banco[u][v]=0;
} else *q1=1;
}
k=k+1;
}while ((*q1==0) && (k<8));
*q=*q1;
}
Nh vy, c th thy c im ca thut ton l gii php cho ton b vn c thc
hin dn tng bc, v ti mi bc c ghi li kt qu sau ny c th quay li v hy kt qu
nu pht hin ra rng hng gii quyt theo bc i vo ng ct v khng em li gii php
tng th cho vn . Do , thut ton c gi l thut ton quay lui.
Di y l m ngun ca ton b chng trnh M i tun vit bng ngn ng C:
26

#include<stdio.h>
#include<conio.h>
#define maxn 10
void ThuNuocTiepTheo(int i, int x, int y, int *q);
void InBanco(int n);
void XoaBanco(int n);
int Banco[maxn][maxn];
int dx[8]={2,1,-1,-2,-2,-1,1,2};
int dy[8]={-1,-2,-2,-1,1,2,2,1};
int n=8;
void ThuNuocTiepTheo(int i, int x, int y, int *q)
{
int k, u, v, *q1;
k=0;
do{
*q1=0;
u=x+dx[k];
v=y+dy[k];
if ((0 <= u) && (u<n) && (0 <= v) && (v<n) &&
(Banco[u][v]==0))
{
Banco[u][v]=i;
if (i<n*n)
{
ThuNuocTiepTheo(i+1, u, v, q1);
if ((*q1)==0) Banco[u][v]=0;
}else (*q1)=1;
}
k++;
}while (((*q1)==0) && (k<8));
*q=*q1;
}
void InBanco(int n){
int i, j;
for (i=0;i<=n-1;i++){
for (j=0;j<=n-1;j++)
if(Banco[i][j]<10)printf("%d
else printf("%d

",Banco[i][j]);

",Banco[i][j]);

27

printf("\n\n");
}
}
void XoaBanco(int n){
int i, j;
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++) Banco[i][j]=0;
}
void main(){
int *q=0;
clrscr();
printf("Cho kich thuoc ban co: ");
scanf(" %d",&n);
XoaBanco(n);
Banco[0][0]=1;
ThuNuocTiepTheo(2,0,0,q);
printf(\n Ket qua: \n\n);
InBanco(n);
getch();
return;
}

V kt qu chy chng trnh vi bn c 8x8 v bt u l (0,0):

Hnh 2.5 Kt qu chy chng trnh m i tun


28

Bi ton 8 qun hu
Bi ton 8 qun hu l 1 v d rt ni ting v vic s dng phng php th - sai v thut
ton quay lui. c im ca cc bi ton dng ny l khng th dng cc bin php phn tch
gii c m phi cn n cc phng php tnh ton th cng, vi s kin tr v chnh xc
cao. Do , cc thut ton kiu ny ph hp vi vic s dng my tnh v my tnh c kh nng
tnh ton nhanh v chnh xc hn nhiu so vi con ngi.
Bi ton 8 qun hu c pht biu ngn gn nh sau: Tm cch t 8 qun hu trn 1 bn
c sao cho khng c 2 qun hu no c th n c nhau.
Tng t nh phn tch bi M i tun, ta c hm DatHau tm v tr t qun hu tip
theo nh sau:
void DatHau(int i)
{
Khi to danh sch cc v tr c th t qun hu tip theo;
do{
La chn v tr t qun hu tip theo;
if V tr t l an ton
{
t hu;
if i<8
{
DatHau(i+1);
if Khng thnh cng
B hu t ra khi v tr
}
}
}while (Khng thnh cng) && (Vn cn la chn)
}
Tip theo, ta xem xt cc cu trc d liu v bin s c dng thc hin cc cng vic
trong hm. Theo lut c thng thng th qun hu c th n tt c cc qun nm trn cng hng,
cng ct, hoc ng cho. Do vy, ta c th suy ra rng mi ct ca bn c ch c th cha 1 v
ch 1 qun hu, v t ta c quy nh l qun hu th i phi t ct th i. Nh vy, ta s dng
bin i biu th ch s ct, v qu trnh la chn v tr t qun hu s chn 1 trong 8 v tr trong
ct cho bin ch s hng j.

29

Hnh 2.6 Cc nc chiu ca qun hu


Trong bi ton M i tun, ta s dng mt mng 2 chiu Banco(i, j) biu th bn c. Tuy
nhin, trong bi ton ny nu tip tc dng cu trc d liu s dn ti mt s phc tp trong
vic kim tra v tr t qun hu c an ton hay khng, bi v ta cn phi kim tra hng v cc
ng cho i qua qun hu s c t (khng cn kim tra ct v theo quy nh ban u, c
ng 1 qun hu c t trn mi ct). i vi mi trong ct, s c 1 hng v 2 ng cho i
qua n l ng cho tri v ng cho phi.
Ta s dng 3 mng kiu boolean biu th cho cc hng, cc ng cho tri, v cc
ng cho phi (c tt c 15 ng cho tri v 15 ng cho phi).
int a[8];
int b[15], c[15];
Trong :
a[j] = 0: Hng j cha b chim bi qun hu no.
b[k] = 0: ng cho tri k cha b chim bi qun hu no.
c[k] = 0: ng cho phi k cha b chim bi qun hu no.
Ch rng cc (i, j) cng nm trn 1 ng cho tri th c cng gi tr i + j, v cng nm
trn ng cho phi th c cng gi tr i j. Nu nh s cc ng cho tri v phi t 0 n 14,
th (i, j) s nm trn ng cho tri (i + j) v nm trn ng cho phi (i j +7).
Do vy, kim tra xem (i, j) c an ton khng, ta ch cn kim tra xem hng j v cc
ng cho (i +j), (i j +7) b chim cha, tc l kim tra a[i], b[i + j], v c[i j +7].
Ngoi ra, ta cn c 1 mng x lu gi ch s hng ca qun hu trong ct i.
int x[8];
Vy vi thao tc t hu vo v tr hng j trn ct i, ta cn thc hin cc cng vic:
x[i] = j; a[j] = 1; b[i + j] = 1; c[i j + 7] = 1;
Vi thao tc b hu ra hi hng j trong ct i, ta cn thc hin cc cng vic:
a[j] = 0; b[i + j] = 0; c[i j + 7] = 0;
Cn iu kin kim tra xem v tr ti hng j trong ct i c an ton khng l:
(a[j] = =0) && (b[i + j] == 0) && (c[i j + 7] == 0)
30

Nh vy, hm DatHau s c th hin c th bng ngn ng C nh sau:


void DatHau(int i, int *q)
{
int j;
j=0;
do{
*q=0;
if ((a[j] == 0) && (b[i + j] == 0) && (c[i j + 7]= = 0))
{
x[i] = j;
a[j] = 1; b[i + j] = 1; c[i j + 7] = 1;
if (i<7)
{
DatHau(i+1, q);
if ((*q)==0)
{
a[j] = 0; b[i + j] = 0; c[i j + 7] = 0;
}
}else (*q)=1;
}
j ++;
}while ((*q==0) && (j<8))
}
2.3 TM TT CHNG 2
Cc kin thc cn nh trong chng 2:
-

nh ngha bng qui: Mt i tng c gi l qui nu n hoc mt phn ca n


c nh ngha thng qua khi nim v chnh n.

Chng trnh qui: Mt chng trnh my tnh gi l qui nu trong chng trnh c
li gi chnh n (c kim tra iu kin dng).

vit mt chng trnh dng qui th vn cn x l phi c gii quyt 1 cch


qui. Ngoi ra, ngn ng dng vit chng trnh phi h tr qui (c h tr hm
v th tc).

Nu chng trnh c th vit di dng lp hoc cc cu trc lnh khc th khng nn


s dng qui.

Cc thut ton qui dng chia tr l cc thut ton phn chia bi ton ban u
thnh 2 hoc nhiu bi ton con c dng tng t v ln lt gii quyt tng bi ton
con ny. Cc bi ton con ny c coi l dng n gin hn ca bi ton ban u, do
vy c th s dng cc li gi qui gii quyt.

Thut ton quay lui dng gii quyt cc bi ton khng tun theo 1 quy tc, v khi
ta phi dng phng php th - sai (trial-and-error) gii quyt. Theo phng php
31

ny, qu trnh th - sai c xem xt trn cc bi ton n gin hn (thng ch l 1


phn ca bi ton ban u). Cc bi ton ny thng c m t di dng qui v
thng lin quan n vic gii quyt mt s hu hn cc bi ton con.
2.4 CU HI V BI TP
1. Hy trnh by mt s v d v nh ngha theo kiu qui.
2. Mt chng trnh qui khi gi chnh n th bi ton khi c kch thc nh th no
so vi bi ton ban u? chng trnh qui khng b lp v hn th cn phi lm
g?
3. Hy cho bit ti sao khi chng trnh c th vit di dng lp hoc cu trc khc th
khng nn s dng qui?
4. Vit chng trnh qui tnh tng cc s l trong khong t 1 n 2n+1.
5. Hy cho bit cc bc thc hin chuyn a trong bi ton thp H ni vi s lng a
l 5.
6. Hon thin m ngun cho bi ton 8 qun hu v chy th cho ra kt qu.

32

CHNG 3

MNG V DANH SCH LIN KT

Chng 3 gii thiu v cc kiu d liu danh sch, bao gm kiu d liu c s mng v
kiu danh sch nng cao l danh sch lin kt. Ngoi phn gii thiu s lc v mng, chng 3
tp trung vo cc kiu danh sch lin kt.
Phn danh sch lin kt n gii thiu cc khi nim danh sch, cc thao tc c bn trn
danh sch nh chn phn t, xo phn t, duyt qua ton b danh sch. Cui phn l mt v d v
s dng danh sch lin kt n biu din 1 a thc.
Chng ny cng cp ti mt s kiu danh sch lin kt khc nh danh sch lin kt
vng v danh sch lin kt kp.
hc tt chng ny, sinh vin cn nm vng l thuyt v tm ti mt s v d khc minh
ho cho vic s dng mng v danh sch lin kt.
3.1 CU TRC D LIU KIU MNG (ARRAY)
C th ni, mng l cu trc d liu cn bn v c s dng rng ri nht trong tt c cc
ngn ng lp trnh. Mt mng l 1 tp hp c nh cc thnh phn c cng 1 kiu d liu, c
lu tr k tip nhau v c th c truy cp thng qua mt ch s. V d, truy cp ti phn t
th i ca mng a, ta vit a[i]. Ch s ny phi l s nguyn khng m v nh hn kch thc ca
mng (s phn t ca mng). Trong chng trnh, ch s ny khng nht thit phi l cc hng s
hoc bin s, m c th l cc biu thc hoc cc hm.
a1

a2

...

ai

ai+1

...

an

Lu rng cu trc ca b nh my tnh cng c t chc thnh cc nh, v cng c th


truy cp ngu nhin thng qua cc a ch. Do vy, vic lu tr d liu trong mng c s tng
thch hon ton vi b nh my tnh, trong c th coi ton b b nh my tnh nh 1 mng, v
a ch cc nh tng ng nh ch s ca mng. Chnh v s tng thch ny m vic s dng
cu trc d liu mng trong cc ngn ng lp trnh c th lm cho chng trnh hiu qu hn v
chy nhanh hn.
Mng c th c nhiu hn 1 chiu. Khi , s cc ch s ca mng s tng ng vi s
chiu. Chng hn, trong mng 2 chiu a, thnh phn thuc ct i, hng j c vit l a[i][j]. Mng 2
chiu cn c gi l ma trn (matrix).

33

a11

a21

...

ai1

ai+11

...

am1

a12

a22

...

ai2

ai+12

...

am2

...

...

...

...

...

...

...

a1j

a2j

...

aij

ai+1j

...

amj

a1j+1

a2j+1

...

aij+1

ai+1j+1

...

amj+1

...

...

...

...

...

...

...

a1n

a2n

...

ain

ai+1n

...

amn

Nh ni trn, mng l cu trc d liu d s dng, tc truy cp cao. Tuy nhin,


nhc im chnh ca mng l khng linh hot v kch thc. Ngha l khi ta khai bo 1 mng
th kch thc ca n l c nh, khng th thay i trong qu trnh thc hin chng trnh. iu
ny rt bt tin khi ta cha bit trc s phn t cn x l. Nu khai bo mng ln s tn b nh
v nh hng n hiu sut ca chng trnh. Nu khai bo mng nh s dn n thiu b nh.
Ngoi ra, vic b tr li cc phn t trong mng cng kh phc tp, bi v mi phn t c v tr
c nh trong mng, v b tr 1 phn t sang 1 v tr khc, ta phi tin hnh dn cc phn t
c lin quan.
Trong phn tip theo, chng ta s xem xt mt cu trc d liu khc, cng cho php lu tr
1 tp cc phn t, nhng c kch thc v cch b tr linh hot hn. l cu trc d liu danh
sch lin kt.
3.2 DANH SCH LIN KT
3.2.1

Khi nim

Khc vi mng, danh sch lin kt l 1 cu trc d liu c kiu truy cp tun t. Mi phn
t trong danh sch lin kt c cha thng tin v phn t tip theo, qua ta c th truy cp ti
phn t ny.
R. Sedgewick (Alogrithms in Java - 2002) nh ngha danh sch lin kt nh sau:
Danh sch lin kt l 1 cu trc d liu bao gm 1 tp cc phn t, trong mi phn t l
1 phn ca 1 nt c cha mt lin kt ti nt k tip.
Ni mi phn t l 1 phn ca 1 nt bi v mi nt ngoi vic cha thng tin v phn t
cn cha thng tin v lin kt ti nt tip theo trong danh sch.
C th ni danh sch lin kt l 1 cu trc d liu c nh ngha kiu qui, v trong nh
ngha 1 nt ca danh sch c tham chiu ti khi nim nt. Thng thng, mt nt thng c lin
kt tr ti mt nt khc, tuy nhin n cng c th tr ti chnh n.
Danh sch lin kt c th c xem nh l 1 s b tr tun t cc phn t trong 1 tp. Bt
u t 1 nt, ta coi l phn t u tin trong danh sch. T nt ny, theo lin kt m n tr ti,
ta c nt th 2, c coi l phn t th 2 trong danh sch, v.v. c tip tc nh vy cho n ht
danh sch. Nt cui cng c th c lin kt l mt lin kt null, tc l khng tr ti nt no, hoc
n c th tr v nt u tin to thnh 1 vng.

34

NULL

Hnh 3.1 Danh sch lin kt


Nh vy, mc d cng l cu trc d liu bao gm 1 tp cc phn t, nhng gia danh sch
lin kt v mng c 1 s im khc bit sau:
-

Mng c th c truy cp ngu nhin thng qua ch s, cn danh sch ch c th truy


cp tun t. Trong danh sch lin kt, mun truy cp ti 1 phn t phi bt u t u
danh sch sau ln lt qua cc phn t k tip cho ti khi n phn t cn truy cp.

Vic b tr, sp t li cc phn t trong 1 danh sch lin kt n gin hn nhiu so vi


mng. Bi v i vi danh sch lin kt, thay i v tr ca 1 phn t, ta ch cn thay
i cc lin kt ca mt s phn t c lin quan, cn trong mng, ta thng phi thay
i v tr ca rt nhiu phn t.

Do bn cht ng ca danh sch lin kt, kch thc ca danh sch lin kt c th linh
hot hn nhiu so vi mng. Kch thc ca danh sch khng cn phi khai bo trc,
bt k lc no c th to mi 1 phn t v thm vo v tr bt k trong danh sch. Ni
cch khc, mng l 1 tp c s lng c nh cc phn t, cn danh sch lin kt l 1 tp
c s lng phn t khng c nh.

khai bo mt danh sch trong C, ta c th dng cu trc t tr. V d, khai bo mt


danh sch lin kt m mi nt cha mt phn t l s nguyn nh sau:
struct node {
int item;
struct node *next;
};
typedef struct node *listnode;
u tin, ta khai bo mt cu trc node bao gm 2 thnh phn. Thnh phn th nht l 1
bin nguyn cha d liu, thnh phn th 2 l mt con tr cha a ch ca nt k tip. Tip theo,
ta nh ngha mt kiu d liu con tr ti nt c tn l listnode.
Vi cc danh sch lin kt c kiu phn t phc tp hn, ta phi khai bo cu trc ca phn
t ny trc (itemstruct), sau a kiu cu trc vo kiu phn t trong cu trc node.
struct node {
itemstruct item;
struct node *next;
};
typedef struct node *listnode;
3.2.2

Cc thao tc c bn trn danh sch lin kt

Nh ni trn, vi tnh cht ng ca danh sch lin kt, cc nt ca danh sch khng
c to ra ngay t u m ch c to ra khi cn thit. Do vy, thao tc u tin cn c trn
danh sch l to v cp pht b nh cho 1 nt. Tng ng vi n l thao tc gii phng b nh v
hy 1 nt khi khng dng n na.

35

Thao tc tip theo cn xem xt l vic chn 1 nt to vo danh sch. Do cu trc t bit
ca danh sch lin kt, vic chn nt mi vo u, cui, hoc gia danh sch c mt s im khc
bit. Do vy, cn xem xt c 3 trng hp. Tng t nh vy, vic loi b 1 nt khi danh sch
cng s c xem xt trong c 3 trng hp. Cui cng l thao tc duyt qua ton b danh sch.
Trong phn tip theo, ta s xem xt chi tit vic thc hin cc thao tc ny, c thc hin
trn danh sch lin kt c phn t ca nt l 1 s nguyn nh khai bo trnh by trn.
3.2.2.1 To, cp pht, v gii phng b nh cho 1 nt
listnode p; // Khai bo bin p
p = (listnode)malloc(sizeof(struct node));//cp pht b nh cho
p
free(p); //gii phng b nh cp pht cho nt p;
3.2.2.2 Chn mt nt vo u danh sch
Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p.
p

NULL

Cc bc chn 1 nt mi vo u danh sch nh sau:


- To v cp pht b nh cho 1 nt mi. Nt ny c tr ti bi q.
p

NULL

q
- Sau khi gn cc gi tr thch hp cho phn t ca nt mi, cho con tr tip ca nt mi tr
n phn t u tin ca nt.
p

NULL

q
- Cui cng, p vn tr n nt u danh sch, ta cn cho p tr n nt mi to.
p

NULL

q
Ch rng cc bc trn phi lm ng trnh t, nu lm sai s dn n mt d liu. Chng
hn, nu ta cho con tr p tr n nt mi to trc, th khi nt mi to s khng tr ti c
nt u danh sch c, v khng cn bin no lu tr v tr ny na.
void Insert_Begin(listnode *p, int x){
listnode q;
36

q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q-> next = *p;
*p = q;
}

3.2.2.3 Chn mt nt vo cui danh sch


Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p.
p

NULL

Cc bc chn 1 nt mi vo cui danh sch nh sau (thc hin ng theo trnh t):
- To v cp pht b nh cho 1 nt mi. Nt ny c tr ti bi q.

NULL

- Dch chuyn con tr ti nt cui ca danh sch. lm c vic ny, ta phi khai bo 1
bin con tr mi r. Ban u, bin ny, cng vi p, tr n u danh sch. Ln lt dch
chuyn r theo cc nt k tip cho ti khi n cui danh sch.

NULL

- Cho con tr tip ca nt cui (c tr ti bi r) tr n nt mi to l q, v cho con tr


tip ca q tr ti null.

p
q

NULL

void Insert_End(listnode *p, int x){

37

listnode q, r;
q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q->next = NULL;
if (*p==NULL) *p = q;
else{
r = *p;
while (r->next != NULL) r = r->next;
r->next = q;
}
}

3.2.2.4 Chn mt nt vo trc nt r trong danh sch


Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p, v 1 nt r trong
danh sch.
r
p

NULL

Ta gi thit rng nt r khng phi l nt cui cng ca danh sch, v nu nh vy, ta ch cn


thc hin thao tc chn 1 nt vo cui danh sch nh trnh by trn.
Cc bc chn 1 nt mi vo trc nt r trong danh sch nh sau (thc hin ng theo
trnh t):
- To v cp pht b nh cho 1 nt mi. Nt ny c tr ti bi q.
r
p

NULL

- Cho con tr tip ca nt mi tr n nt k tip ca nt r.


r
p

NULL

38

- Cho con tr tip ca nt r tr n q.


r
p

NULL

void Insert_Middle(listnode *p, int position, int x){


int count=1, found=0;
listnode q, r;
r = *p;
while ((r != NULL)&&(found==0)){
if (count == position){
q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q-> next = r-> next;
r-> next = q;
found = 1;
}
count ++;
r = r-> next;
}
if (found==0)
printf(Khong tim thay vi tri can chen !);
}

Ch rng trong hm ny, ta gi s rng cn phi xc nh nt r trong xu ti 1 v tr cho


trc position. Sau mi tin hnh chn nt mi vo trc nt r.
3.2.2.5 Xa mt nt u danh sch
Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p.
p

NULL

Ch rng xa 1 nt trong danh sch th danh sch khng c rng.


Cc bc xa 1 nt u danh sch nh sau:
- Dng 1 con tr tm q tr n u danh sch.
q
p

NULL

39

- Dch chuyn con tr p qua phn t u tin n phn t k tip.


q
NULL

p
- Ngt lin kt ca bin tm q vi nt tip theo, gii phng b nh cho q.

NULL

void Remove_Begin(listnode *p){


listnode q;
if (*p == NULL) return;
q = *p;
*p = (*p)-> next;
q-> next = NULL;
free(q);
}

3.2.2.6 Xa mt nt cui danh sch


Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p.
p

NULL

Cc bc xa 1 nt cui danh sch nh sau:


- Dch chuyn con tr ti nt gn nt cui ca danh sch. lm c vic ny, ta phi
dng 2 bin tm l q v r. Ln lt dch chuyn q v r t u danh sch ti cui danh sch,
trong q lun dch chuyn sau r 1 nt. Khi r ti nt cui cng th q l nt gn nt cui
cng nht.
q
p

r
NULL

40

- Cho con tr tip ca nt gn nt cui cng nht (ang c tr bi q) tr ti null. Gii


phng b nh cho nt cui cng (ang c tr bi r).

NULL

void Remove_End(listnode *p){


listnode q, r;
if (*p == NULL) return;
if ((*p)-> next == NULL){
Remove_Begin(*p);
return;
}
r = *p;
while (r-> next != NULL){
q = r;
r = r-> next;
}
q-> next = NULL;
free(r);
}

3.2.2.7 Xa mt nt trc nt r trong danh sch


Gi s ta c 1 danh sch m u ca danh sch c tr ti bi con tr p, v 1 nt r trong
danh sch.
r
p

NULL

Ta gi thit rng nt r khng phi l nt cui cng ca danh sch, v nu nh vy th s


khng c nt ng trc nt r.
Cc bc xa 1 nt trc nt r trong danh sch nh sau:
- S dng 1 bin tm q tr n nt ng trc nt r.
r

NULL

- Cho con tr tip ca nt r tr ti nt ng sau nt q.

41

NULL

- Ngt lin kt ca nt q v gii phng b nh cho q.


r

NULL

void Remove_Middle(listnode *p, int position){


int count=1, found=0;
listnode q, r;
r = *p;
while ((r != NULL)&&(found==0)){
if (count == position){
q = r-> next;
r-> next = q-> next;
q-> next = NULL;
free (q);
found = 1;
}
count ++;
r = r-> next;
}
if (found==0)
printf(Khong tim thay vi tri can xoa !);
}

3.2.2.8 Duyt ton b danh sch


Thao tc duyt danh sch cho php duyt qua ton b cc phn t ca danh sch, t phn t
u tin cho ti phn t cui cng.
thc hin thao tc ny, ta cn mt bin tm r tr ti u danh sch. T v tr ny, theo
lin kt ca cc nt, thc hin duyt qua tng phn t trong danh sch. Trong qu trnh duyt, ti
mi nt ta c th thc hin cc thao tc cn thit nh ly thng tin phn t, sa thng tin, so snh,
v.v.
r = p;
while (r-> next != null){
//thc hin cc thao tc cn thit
r = r-> next;
}
42

r
p

NULL

3.2.2.9 V d v s dng danh sch lin kt


Trong phn ny, chng ta s xem xt 1 v d v vic s dng danh sch lin kt biu din
1 a thc.
Gi s ta cn biu din 1 a thc c dng:
a0 + a1x1 + a2x2 + ... + anxn
Trong ai l h s ca a thc c kiu s thc.
Ta c th dng mng lu tr a thc ny, tuy nhin vic s dng mng c mt s nhc
im sau:
-

Bc ca a thc l cha bit trc, do kch thc ca mng l cha xc inh. Ta phi
khai bo mt mng vi s phn t ti a no .

i vi cc h s ai = 0 th ta c th b qua s hng aixi trong biu din a thc. Tuy


nhin, nu s dng mng th do phn t ai khai bo trong mng nn ta vn phi dng
v gn cho n gi tr 0.

Vic s dng danh sch lin kt biu th a thc s khc phc c cc nhc im trn.
danh sch lin kt c th biu th c a thc, mi nt ca danh sch cn c 3 thnh
phn:
1. Trng heso kiu thc lu gi gi tr ca h s.
2. Trng mu lu tr gi tr l ca ly tha x ti h s .
3. Trng con tr tiep tr n s hng tip theo trong a thc (nt tip theo trong danh
sch).
Nh vy, danh sch ny s c dng:
a0

a1

a2

...

an

Trong , nhng s hng c ai = 0 th khng cn phi a vo danh sch.


Chng hn, vi a thc 5 + 6x2 + 7x5 + 3x10 c th c biu din bi danh sch lin kt
nh sau:
5

10

Khia bo trong C cho danh sch ny nh sau:


struct node{
double heso;
int luythua;
struct node *next;
43

};
typedef struct node *listnode;

3.2.3

Mt s dng khc ca danh sch lin kt

3.2.3.1 Danh sch lin kt vng


Trong danh sch lin kt n, nt cui cng ca danh sch s c lin kt tr n mt gi tr
null cho bit danh sch kt thc. Nu lin kt ny khng tr n null m tr v nt u tin th
ta s c mt danh sch lin kt vng.

Hnh 3.2 Danh sch lin kt vng


u im ca danh sch lin kt vng l bt k nt no cng c th coi l u ca danh sch.
C ngha l t mt nt bt k, ta c th tin hnh duyt qua ton b cc phn t ca danh sch m
khng cn tr v nt u tin nh trong danh sch lin kt thng thng.
Tuy nhin, nhc im ca danh sch loi ny l c th khng bit khi no th duyt qua
ton b phn t ca danh sch. iu ny dn n 1 qu trnh duyt v hn, khng c im dng.
khc phc nhc im ny, trong qu trnh duyt lun phi kim tra xem tr v nt ban u
hay cha. Vic kim tra ny c th da trn gi tr phn t hoc bng cch thm vo 1 nt c
bit.
Sau y, chng ta s xem xt vic s dng danh sch lin kt vng gii quyt bi ton
Josephus. Bi ton nh sau:
C 1 nhm N ngi mun la chn ra 1 th lnh. Cc la chn nh sau: N ngi xp thnh
vng trn. Bt u t 1 ngi no , duyt qua vng v n ngi th M th ngi b loi
khi vng. Qu trnh duyt bt u li, v ngi th M tip theo li b loi khi vng. Lp li nh
vy cho ti khi ch cn 1 ngi trong vng v ngi l th lnh.
Chng hn, vi N = 9 ngi v M = 5, ta c qu trnh duyt v loi nh sau:
2

Vng ban u:

1
9

Duyt ln 2: Loi 1

6
3

Duyt ln 1: Loi 5

9
6

44

Duyt ln 3: Loi 7

4
6

Duyt ln 4: Loi 4

7
2

3
4

9
8

Duyt ln 5: Loi 3

3
6

Duyt ln 6: Loi 6

2
9
8
2
8

Duyt ln 7: Loi 9

Duyt ln 8: Loi 2

8 2

Phn t cn li sau cng:

Vic s dng danh sch lin kt vng c th cung cp 1 li gii hiu qu cho bi ton. Theo
, N ngi s ln lt c a vo 1 danh sch lin kt vng. Qu trnh duyt bt u t ngi
u tin, v m n M ln duyt th loi nt ra khi danh sch v tip tc qu trnh duyt. Danh
sch lin kt vng s thu hp dn, v n khi ch cn 1 nt th kt thc qu trnh duyt. R rng l
nu s dng mng cho bi ton Josephus s khng em li hiu qu cao, v qu trnh loi b 1
phn t ra khi mng phc tp hn nhiu so vi danh sch lin kt.
3.2.3.2 Danh sch lin kt kp
Trong danh sch lin kt n, mi nt ch c mt lin kt tr ti nt k tip. iu ny c
ngha danh sch lin kt n ch cho php duyt theo 1 chiu, trong khi thao tc duyt chiu
ngc li i khi cng rt cn thit. gii quyt vn ny, ta c th to cho mi nt hai lin
kt: mt tr ti nt ng trc, mt tr ti nt ng sau. Nhng danh sch nh vy c
gi l danh sch lin kt kp.

Hnh 3.3 Danh sch lin kt kp


Vic khai bo danh sch lin kt kp cng tng t nh khai bo danh sch lin kt n, ch
c im khc bit l c thm 1 lin kt na cho mi nt.
struct node {
itemstruct item;
struct node *left;
45

struct node *right;


};
typedef struct node *doublelistnode;

3.3 TM TT CHNG 3
-

Mt mng l 1 tp hp c nh cc thnh phn c cng 1 kiu d liu, c lu tr k


tip nhau v c th c truy cp thng qua mt ch s. Mng c th c mt hoc nhiu
chiu.

Mng c u im l d s dng, tc truy cp cao. Tuy nhin, mng c nhc im l


khng linh hot v kch thc v phc tp khi b tr li cc phn t.

Danh sch lin kt l 1 cu trc d liu bao gm 1 tp cc phn t, trong mi phn t


l 1 phn ca 1 nt c cha mt lin kt ti nt k tip.

Danh sch lin kt c kiu truy cp tun t, c kch thc linh hot v d dng trong
vic b tr li cc phn t.

Cc thao tc c bn trn danh sch lin kt bao gm: Khi to danh sch, chn 1 phn
t vo u, cui, gia danh sch, xo 1 phn t khi u, cui, gia danh sch, duyt
qua ton b danh sch.

Ngoi danh sch lin kt n cn mt s loi danh sch lin kt khc nh danh sch
vng, danh sch lin kt kp .v.v

3.4 CU HI V BI TP
1. Hy nu cc u v nhc im ca danh sch lin kt so vi mng.
2. Nu cc bc thm mt nt vo u, gia, v cui danh sch lin kt n.
3. Nu cc bc xo mt nt u, gia, v cui danh sch lin kt n.
4. Vit th tc in ra tt c cc phn t ca 1 danh sch lin kt n.
5. Vit chng trnh thc hin vic sp xp 1 danh sch lin kt n bao gm cc phn t
l cc s nguyn.
6. Vit chng trnh cng 2 a thc c biu din thng qua danh sch lin kt n nh
v d phn 3.2.2.9.
7. Vit chng trnh minh ho vic s dng danh sch lin kt n vi cc chc nng:
a. Khi to danh sch
b. Thm phn t
c. Xo phn t
d. In danh sch

46

CHNG 4

NGN XP V HNG I

Chng 4 trnh by v hai cu trc d liu rt gn gi vi cc hot ng trong thc t, l


ngn xp v hng i.
Phn 1 trnh by cc khi nim, nh ngha lin quan n ngn xp, khai bo ngn xp bng
mng v cc thao tc c bn nh kim tra ngn xp rng, a phn t vo ngn xp, ly phn t
ra khi ngn xp. Mt cch ci t ngn xp khc cng c gii thiu, l dng danh sch lin
kt. Vic s dng danh sch lin kt ci t s cho mt ngn xp c kch thc linh hot hn.
Phn 2 trnh by v hng i. Tng t nh phn 1, cc khi nim, cc cch ci t v cc
thao tc c bn trn ngn xp cng c trnh by chi tit.
hc tt chng 4, sinh vin cn c lin h vi cc hot ng thc t hnh dung v
ngn xp v hng i. Nm vng cch ci t v cc thao tc trn 2 kiu d liu ny. T t ra
cc bi ton ng dng thc t thc hin.
4.1 NGN XP (STACK)
4.1.1

Khi nim

Ngn xp l mt dng c bit ca danh sch m vic b sung hay loi b mt phn t u
c thc hin 1 u ca danh sch gi l nh. Ni cch khc, ngn xp l 1 cu trc d liu c
2 thao tc c bn: b sung (push) v loi b phn t (pop), trong vic loi b s tin hnh loi
phn t mi nht c a vo danh sch. Chnh v tnh cht ny m ngn xp cn c gi l
kiu d liu c nguyn tc LIFO (Last In First Out - Vo sau ra trc).
Cc v d v lu tr kiu LIFO nh ca ngn xp l: Mt chng sch trn mt bn, mt
chng a trong hp, v.v. Khi thm 1 cun sch vo chng sch, cun sch s nm trn nh ca
chng sch. Khi ly sch ra khi chng sch, cun nm trn cng s c ly ra u tin, tc l
cun mi nht oc a vo s c ly ra trc tin. Tng t nh vy vi chng a trong
hp.
Ta xt 1 v d minh ha s thay i ca ngn xp thng qua cc thao tc b sung v loi b
nh trong ngn xp.
Gi s ta c mt stack S lu tr cc k t. Ban u, ngn xp trng thi rng:

Khi thc hin lnh b xung phn t A, push(S, A), ngn xp c dng:

A
47

Tip theo l cc lnh push(S, B), push(S, C):

B
A

C
B
A

Lnh pop(S) s loi b phn t mi nht c a vo ra khi ngn xp, l C:

B
A
Lnh push(S, D) s a phn t D vo ngn xp, ngay trn phn t B:

D
B
A
Hai lnh pop(S) tip theo s ln lt loi b cc phn t nm trn l D v B ra khi ngn
xp:

B
A

4.1.2

Ci t ngn xp bng mng

Ngn xp c th c ci t bng mng hoc danh sch lin kt (s c trnh by phn


sau). ci t ngn xp bng mng, ta s dng mt mng 1 chiu s biu din ngn xp. Thit
lp phn t u tin ca mng, s[0], lm y ngn xp. Cc phn t tip theo c a vo ngn
xp s ln lt c lu ti cc v tr s[1], s[2], Nu hin ti ngn xp c n phn t th s[n-1] s
l phn t mi nht c a vo ngn xp. lu gi nh hin ti ca ngn xp, ta s dng 1
con tr top. Chng hn, nu ngn xp c n phn t th top s c gi tr bng n-1. Cn khi ngn xp
cha c phn t no th ta quy c top s c gi tr -1.

48

max

top

Phn t u tin
Phn t th 2

Phn t cui cng

Hnh 4.1 Ci t ngn xp bng mng


Nu c 1 phn t mi c a vo ngn xp th n s c lu ti v tr k tip trong mng
v gi tr ca bin top tng ln 1. Khi ly 1 phn t ra khi ngn xp, phn t ca mng ti v tr
top s c ly ra v bin top gim i 1.
C 2 vn xy ra khi thc hin cc thao tc trn trong ngn xp. Khi ngn xp y, tc
l khi bin top t ti phn t cui cng ca mng th khng th tip tc thm phn t mi vo
mng. V khi ngn xp rng, tc l cha c phn t no, th ta khng th ly c phn t ra t
ngn xp. Nh vy, ngoi cc thao tc a vo v ly phn t ra khi ngn xp, cn c thao tc
kim tra xem ngn xp c rng hoc y hay khng.
Khai bo bng mng cho 1 ngn xp cha cc s nguyn vi ti a 100 phn t nh sau:
#define MAX 100
typedef struct
{
int top;
int nut[MAX];
} stack;
Khi , cc thao tc trn ngn xp c ci t nh sau:
Thao tc khi to ngn xp
Thao tc ny thc hin vic gn gi tr -1 cho bin top, cho bit ngn xp ang trng thi
rng.
void StackInitialize(stack *s){
s-> top = -1;
return;
}

Thao tc kim tra ngn xp rng


int StackEmpty(stack s){
return (s.top = = -1);
}
Thao tc kim tra ngn xp y
int StackFull(stack s){
return (s.top = = MAX-1);
49

Thao tc b sung 1 phn t vo ngn xp


void Push(stack *s, int x){
if (StackFull(*s)){
printf(Ngan xep day !);
return;
}else{
s-> top ++;
s-> nut[s-> top] = x;
return;
}
}
Thao tc ly 1 phn t ra khi ngn xp
int Pop(stack *s){
if (StackEmpty(*s)){
printf(Ngan xep rong !);
}else{
return s-> nut[s-> top--];
}
}
Hn ch ca vic ci t ngn xp bng mng, cng tng t nh cu trc d liu kiu
mng, l ta cn phi bit trc kch thc ti a ca ngn xp (gi tr max trong khai bo trn).
iu ny khng phi lc no cng xc nh c v nu ta chn mt gi tr bt k th c th dn
n lng ph b nh nu kch thc qu tha so vi yu cu hoc nu thiu th s dn ti chng
trnh c th khng hot ng c. khc phc nhc im ny, c th s dng danh sch lin
kt ci t ngn xp.
4.1.3

Ci t ngn xp bng danh sch lin kt

ci t ngn xp bng danh sch lin kt, ta s dng 1 danh sch lin kt n. Theo tnh
cht ca danh sch lin kt n, vic b sung v loi b mt phn t khi danh sch c thc
hin n gin v nhanh nht khi phn t nm u danh sch. Do vy, ta s chn cch lu tr
ca ngn xp theo th t: phn t u danh sch l nh ngn xp, v phn t cui cng ca danh
sch l y ngn xp. b sung 1 phn t vo danh sch, ta to ra 1 nt mi v thm n vo u
danh sch. ly 1 phn t khi ngn xp, ta ch cn ly gi tr nt u tin v loi nt ra khi
danh sch.

nh ngn xp

NULL

y ngn xp

Hnh 4.2 Ci t ngn xp bng danh sch lin kt

50

Nh vy, ta c th thy rng ngn xp c ci t bng danh sch lin kt c kch thc
gn nh v hn (ty thuc vo b nh ca my tnh). Bt k lc no ta cng c th thm 1 nt
mi v b sung vo nh ca ngn xp. Cc thao tc push v pop i vi cc danh sch kiu ny
cng kh n gin. Tuy nhin, mt s thao tc khc li phc tp hn so vi ngn xp kiu mng,
chng hn truy cp ti 1 phn t gia ngn xp, hoc m s phn t ca ngn xp.
Khai bo 1 ngn xp bng danh sch lin kt nh sau:
struct node {
int item;
struct node *next;
};
typedef struct node *stacknode;
typedef struct {
stacknode top;
}stack;
Khi , cc thao tc trn ngn xp c ci t nh sau:
Thao tc khi to ngn xp
Thao tc ny thc hin vic gn gi tr null cho nt u ngn xp, cho bit ngn xp ang
trng thi rng.
void StackInitialize(stack *s){
s-> top = NULL;
return;
}
top

NULL

Thao tc kim tra ngn xp rng


int StackEmpty(stack s){
return (s.top == NULL);
}
top

NULL

Thao tc b sung 1 phn t vo ngn xp


void Push(stack *s, int x){
stacknode p;
p = (stacknode) malloc (sizeof(struct node));
p-> item = x;
p-> next = s->top;
s->top = p;
return;
51

nh ngn xp

NULL

y ngn xp

nh ngn xp

NULL

y ngn xp

p
s

nh mi

NULL

y ngn xp

Thao tc ly 1 phn t ra khi ngn xp


int Pop(stack *s){
stacknode p;
if (StackEmpty(*s)){
printf("Ngan xep rong !");
}else{
p = s-> top;
s-> top = s-> top-> next;
return p->item;
}
}

nh ngn xp

NULL

y ngn xp

p
s

nh mi

NULL

y ngn xp
52

4.1.4

Mt s ng dng ca ngn xp
Mt s v d v ng dng ca ngn xp c xem xt trong phn ny bao gm:
-

o ngc xu k t.

Tnh gi tr mt biu thc dng hu t (postfix).

Chuyn mt biu thc dng trung t sang hu t (infix to postfix).

Trong cc v d ny, ta gi s rng c mt ngn xp vi cc hm thao tc c ci t


nh phn trc (bng mng hoc danh sch).
o ngc xu k t
Bi ton o ngc xu k t yu cu hin th cc k t ca 1 xu k t theo chiu ngc
li. Tc l k t cui cng ca xu s c hin th trc, tip theo l k t st k t cui, , v
k t u tin s c hin th cui cng.
V d:
Chui ban u: stack
Chui o ngc: kcats
y l 1 ng dng kh n gin v hiu qu ca ngn xp, do yu cu ca bi ton cng
kh ph hp vi tnh cht ca ngn xp.
gii quyt bi ton, ta ch cn duyt t u n cui xu, ln lt cho cc k t vo ngn
xp. Khi , k t u tin ca xu s c cho vo trc, tip theo n k t th 2, , k t
cui c cho vo sau cng. Sau khi cho ton b k t ca xu vo ngn xp, ln lt ly cc
phn t ra khi ngn xp v hin th trn mn hnh. Theo tnh cht ca ngn xp, k t cho vo
sau cng s c ly ra trc tin. Do , k t cui cng ca xu s c ly ra u tin, , v
k t u tin ca xu s c ly ra sau cng. Nh vy, ton b cc k t trong xu c o
ngc th t.
M chng trnh o ngc xu k t nh sau:
#include<stdio.h>
#include<conio.h>
struct node {
char item;
struct node *next;
};
typedef struct node *stacknode;
typedef struct {
stacknode top;
}stack;
void StackInitialize(stack *s){
s-> top = NULL;
return;

53

}
int

StackEmpty(stack s){

return (s.top == NULL);


}
void

Push(stack *s, char c){

stacknode p;
p = (stacknode) malloc (sizeof(struct node));
p-> item = c;
p-> next = s->top;
s->top = p;
return;
}
char

Pop(stack *s){

stacknode p;
p = s-> top;
s-> top = s-> top-> next;
return p->item;
}
void main (void){
char *st;
int i;
stack *s;
clrscr();
StackInitialize(s);
printf("Nhap vao xau ky tu: ");
gets(st);
for (i=0;i<strlen(st);i++)
Push(s,st[i]);
printf("\Xau da dao nguoc: \n");
while (!StackEmpty(*s)) printf("%c",Pop(s));
getch();
return;
}

Tnh gi tr ca biu thc dng hu t


Mt biu thc ton hc thng thng bao gm cc ton t (cng, tr, nhn, chia ), cc
ton hng (cc s), v cc du ngoc cho bit th t tnh ton. Chng hn, ta c th c biu
thc ton hc sau:
3 * ( ( (5 2) * (7 + 1) 6) )
54

Nh ta thy, trong biu thc trn, cc ton t bao gi cng nm gia 2 ton hng. Do vy,
cc vit trn c gi l cc vit dng trung t (infix). tnh gi tr ca biu thc trn, ta phi
tnh gi tr ca cc php ton trong ngoc trc. i khi, ta cn lu cc kt qu tnh c ny nh
mt kt qu trung gian, sau li s dng chng nh nhng ton hng tip theo. V d, tnh
gi tr biu thc trn, u tin ta tnh 5 2 = 3, lu kt qu ny. Tip theo tnh 7 + 1 = 8. Ly kt
qu ny nhn vi kt qu lu l 3 c 24. Ly 24 - 6 = 18, v cui cng 18 x 3 = 54 l kt qu
cui cng ca biu thc.
Trong cc biu thc dng ny, v tr ca du ngoc l rt quan trng. Nu v tr cc du
ngoc thay i, gi tr ca c biu thc c th thay i theo.
Mc d i vi con ngi, cch trnh by biu thc ton hc theo dng ny c v nh l
hp l nht, nhng i vi my tnh, vic tnh ton nhng biu thc nh vy tng i phc tp.
d dng hn cho my tnh trong vic tnh ton cc biu thc, ngi ta a ra mt cch trnh
by khc cho biu thc ton hc, l dng hu t (postfix). Theo cch trnh by ny, ton t
khng nm gia 2 ton hng m nm ngay pha sau 2 ton hng. Chng hn, biu thc trn c
th c vit di dng hu t nh sau:
3 5 2 7 1 + * 6 - *
Ta tnh gi tr biu thc vit di dng ny nh sau:
Ton t tr nm ngay sau 2 ton hng 5 v 2 nn ly 5 -2 = 3, lu kt qu 3. Ton t cng
nm ngay sau 2 ton hng 7 v 1 nn ly 7 + 1 = 8, lu kt qu 8. Ton t nhn nm ngay sau 2
kt qu va lu nn ly 3 x 8 = 24, lu kt qu 24. Ton t tr nm ngay sau ton hng 6 v kt
qu va lu nn ly 24 6 = 18. Ton t nhn nm ngay sau kt qu va lu v ton hng 3 nn
ly 3 x 18 = 54 l kt qu cui cng ca biu thc.
Nh ta thy, biu thc dng hu t khng cn dng bt k du ngoc no. Cch tnh gi tr
ca biu thc dng ny cn n 1 s bc lu kt qu trung gian khi gp ton t li ly ra
tnh ton tip, do vy rt ph hp vi vic s dng ngn xp.
Thut ton tnh gi tr ca biu thc hu t bng cch s dng ngn xp nh sau:
Duyt biu thc t tri qua phi.
-

Nu gp ton hng, a vo ngn xp.

Nu gp ton t, ly ra 2 ton t t ngn xp, s dng ton hng trn tnh, a kt


qu vo ngn xp.

Chng hn vi biu thc dng hu t trn, cc bc tnh nh sau:


Duyt t tri sang phi, gp cc ton hng 3, 5, 2, ln lt a vo ngn xp.

2
5
3
Duyt tip, gp ton t tr. Ly ra 2 ton hng t ngn xp l 2 v 5, thc hin php tr
c kt qu 3 a vo ngn xp.

3
3
55

Duyt tip, gp 2 ton hng 7, 1 ln lt a vo ngn xp.


1
7
3
3
Duyt tip, gp ton t cng. Ly 2 ton hng trong ngn xp l 1 v 7, thc hin php cng
c kt qu 8. a vo ngn xp.

8
3
3

Duyt tip, gp ton t nhn. Ly 2 ton hng trong ngn xp l 8 v 3. Thc hin php
cng, c kt qu 24, cho vo ngn xp.

24
3

Duyt tip, gp ton hng 6, cho vo ngn xp.

6
24
3

Duyt tip, gp ton t tr. Ly ra 2 ton hng trong ngn xp l 6 v 24. Thc hin php
tr, c kt qu 18, a vo ngn xp.

18
3

56

Duyt tip gp ton t nhn l phn t cui ca biu thc. Ly ra 2 ton hng trong ngn
xp l 18 v 3. Thc hin php nhn c kt qu 54. Do ht biu thc nn 54 l kt qu cui
cng v chnh l gi tr biu thc.
Chuyn i biu thc dng trung t sang hu t
Nh vy, ta c th thy rng biu thc dng hu t c th c tnh d dng nh my tnh
thng qua ngn xp. Tuy nhin, biu thc dng trung t vn gn gi v c s dng ph bin
hn trong thc t. Vy bi ton t ra l cn phi c thut ton bin i biu thc dng trung t
sang dng hu t. Trong thut ton ny, ngn xp vn c s dng nh mt cng c hu hiu
cha cc phn t trung gian trong qu trnh chuyn i.
Thut ton chuyn i biu thc t dng trung t sang dng hu t nh sau:
Duyt biu thc t tri qua phi.
- Nu gp du m ngoc: B qua
- Nu gp ton hng: a vo biu thc mi.
- Nu gp ton t: a vo ngn xp.
- Nu gp du ng ngoc: Ly ton t trong ngn xp, a vo biu thc mi.
Ta xem xt thut ton vi biu thc trn (ch rng ta phi in y cc du ngoc):
( 3 * ( ( (5 2) * (7 + 1) ) 6) )
Bc 1: Gp du m ngoc b qua, gp ton hng 3, a vo biu thc mi.
Biu thc mi: 3
Ngn xp:

Bc 2: Gp ton t *, a vo ngn xp.


Biu thc mi: 3
Ngn xp:
Bc 3: Gp 3 du m*ngoc, b qua.
Biu thc mi: 3
Ngn xp:
*

Bc 4: Gp ton hng 5, a vo biu thc mi.


Biu thc mi: 3 5

57

Ngn xp:

Bc 5: Gp ton t -, a vo ngn xp.


Biu thc mi: 3 5
Ngn xp:
*

Bc 6: Gp ton hng 2, a vo biu thc mi.


Biu thc mi: 3 5 2
Ngn xp:
*

Bc 7: Gp du ng ngoc, ly ton t ra khi ngn xp, a vo biu thc mi.


Biu thc mi: 3 5 2 Ngn xp:
*

Bc 8: Gp ton t *, a vo ngn xp.


Biu thc mi: 3 5 2 Ngn xp:
*
*

Bc 9: Gp du m ngoc, b qua.
Biu thc mi: 3 5 2 -

Ngn xp:

*
*

58

Bc 10: Gp ton hng 7, a vo biu thc mi.


Biu thc mi: 3 5 2 7

Ngn xp:

*
*

Bc 11: Gp ton t +, a vo ngn xp.


Biu thc mi: 3 5 2 - 7
Ngn xp:

+
*
*

Bc 12: Gp ton hng 1, a vo biu thc mi.


Biu thc mi: 3 5 2 7 1
Ngn xp:

+
*
*

Bc 13: Gp du ng ngoc, ly ton t ra khi ngn xp ( + ), a vo biu thc mi.


Biu thc mi: 3 5 2 7 1 +
Ngn xp:
*
*

Bc 14: Gp du ng ngoc, ly ton t ra khi ngn xp ( * ), a vo biu thc mi.


Biu thc mi: 3 5 2 7 1 + *

Ngn xp:
*

Bc 15: Gp ton t -, a vo ngn xp.


59

Biu thc mi: 3 5 2 7 1 + *


Ngn xp:
*

Bc 16: Gp ton hng 6, a vo biu thc mi.


Biu thc mi: 3 5 2 7 1 + * 6
Ngn xp:
*

Bc 17: Gp 2 du ng ngoc, ln lt ly cc ton t ra khi ngn xp vo a vo biu


thc mi.
Biu thc mi: 3 5 2 7 1 + * 6 - *
Ngn xp:

Vy ta c kt qu biu thc dng hu t l:


3 5 2 7 1 + * 6 - *
4.2 HNG I (QUEUE)
4.2.1

Khi nim

Hng i l mt cu trc d liu gn ging vi ngn xp, nhng khc vi ngn xp


nguyn tc chn phn t cn ly ra khi tp phn t. Tri ngc vi ngn xp, phn t c ly ra
khi hng i khng phi l phn t mi nht c a vo m l phn t c lu trong hng
i lu nht.
iu ny nghe c v hp vi quy lut thc t hn l ngn xp ! Quy lut ny ca hng i
cn c gi l Vo trc ra trc (FIFO - First In First Out). V d v hng i c rt nhiu
trong thc t. Mt dng ngi xp hng ch ct tc 1 tim ht tc, ch vo rp chiu phim, hay
siu th l nhng v d v hng i. Trong lnh vc my tnh cng c rt nhiu v d v hng i.
Mt tp cc tc v ch phc v bi h iu hnh my tnh cng tun theo nguyn tc hng i.
Hng i cn khc vi ngn xp ch: phn t mi c a vo hng i s nm pha
cui hng, trong khi phn t mi a vo ngn xp li nm nh ngn xp.
Nh vy, ta c th nh ngha hng i l mt dng c bit ca danh sch m vic ly ra
mt phn t, get, c thc hin 1 u (gi l u hng), cn vic b sung 1 phn t, put, c
thc hin u cn li (gi l cui hng).

60

Tr li vi v d v vic b sung v loi b cc phn t ca 1 ngn xp cc k t nh


phn trc, ta s xem xt vic b sung v loi b tng t nhng p dng cho hng i cc k t.
Gi s ta c hng i Q lu tr cc k t. Ban u Q trng thi rng:
u hng

Cui hng

Khi thc hin lnh b sung phn t A, put(Q, A), hng i c dng:
u hng

Cui hng

Tip theo l cc lnh put(Q, B), put(Q, C):


u hng

Cui hng

Khi thc hin lnh get ly ra 1 phn t t hng i th phn t c lu tr lu nht


trong hng s c ly ra. l phn t u tin u hng.
u hng

Cui hng

Tip theo, thc hin lnh put(Q, D) b sung phn t D. Phn t ny s c b sung
pha cui ca hng.
u hng

Cui hng

Hai lnh get tip theo s ln lt ly ra 2 phn t u hng l B v C.


u hng

u hng
4.2.2

Cui hng

Cui hng

Ci t hng i bng mng

Tng t nh ngn xp, hng i c th c ci t bng mng hoc danh sch lin kt.
i vi ngn xp, vic b sung v loi b mt phn t u c thc hin nh ngn xp, do
vy ta ch cn s dng 1 bin top lu gi nh ny. Tuy nhin, i vi hng i vic b sung
v loi b phn t c thc hin 2 u khc nhau, do vy ta cn s dng 2 bin l head v tail
lu gi im u v im cui ca hng i. Cc phn t thuc hng i l cc phn t nm
gia im u v im cui ny.

61

max

0
head

tail

Hnh 4.3 Ci t hng i bng mng


ly ra 1 phn t ca hng, im u tng ln 1 v phn t u hng s c ly ra.
b sung 1 phn t vo hng i, phn t ny s c b sung vo cui hng v im cui s tng
ln 1.
Ta thy rng bin tail lun tng khi b sung phn t v cng khng gim khi loi b phn
t. Do , sau 1 s hu hn thao tc, bin ny s tin n cui mng v cho d phn u mng c
th cn trng do mt s phn t ca hng i c ly ra, ta vn khng th b sung thm phn
t vo hng i. gii quyt vn ny, ta s dng phng php quay vng. Khi bin tail tin
n cui mng v phn u mng cn trng th ta s cho bin ny quay tr li u mng. Tng
t vy, ta cng cho bin head quay li u mng khi n tin ti cui mng.
Khai bo bng mng cho 1 hng i cha cc s nguyn vi ti a 100 phn t nh sau:
#define MAX 100
typedef struct
{
int head, tail, count;
int node[MAX];
} queue;
Trong khai bo ny, thun tin cho vic kim tra hng i y hoc rng, ta dng thm 1
bin count cho bit s phn t hin ti ca hng i.
Khi , cc thao tc trn hng i c ci t nh sau:
Thao tc khi to hng i
Thao tc ny thc hin vic gn gi tr 0 cho bin head, gi tr MAX -1 cho bin tail, v gi
tr 0 cho bin count, cho bit hng i ang trng thi rng.
void QueueInitialize(queue *q){
q-> head = 0;
q-> tail = MAX-1;
q-> count = 0;
return;
}
Thao tc kim tra hng i rng
Hng i rng nu c s phn t nh hn hoc bng 0.
int QueueEmpty(queue q){
return (q.count <= 0);
}

62

Thao tc thm 1 phn t vo hng i


void Put(queue *q, int x){
if (q-> count == MAX)
printf(Hang doi day !);
else{
if (q->tail == MAX-1 )
q->tail=0;
else
(q->tail)++;
q->node[q->tail]=x;
q-> count++;
}
return;
}
thm phn t vo cui hng i, im cui tng ln 1 (nu im cui v tr cui
mng th quay vng im cui v 0). Trc khi thm phn t vo hng i, cn kim tra xem
hng i y cha (hng i y khi gi tr bin count = MAX).
Ly phn t ra khi hng i
ly phn t ra khi hng i, tin hnh ly phn t ti v tr im u v cho im u
tng ln 1 (nu im u v tr cui mng th quay vng im u v 0). Tuy nhin, trc
khi lm cc thao tc ny, ta phi kim tra xem hng i c rng hay khng.
int Get(queue *q){
int x;
if (QueueEmpty(*q))
printf("Hang doi rong !");
else{
x = q-> node[q-> head];
if (q->head == MAX-1 )
q->head=0;
else
(q->head)++;
q-> count--;
}
return x;
}
4.2.3

Ci t hng i bng danh sch lin kt

ci t hng i bng danh sch lin kt, ta cng s dng 1 danh sch lin kt n v 2
con tr head v tail lu gi nt u v nt cui ca danh sch. Vic b sung phn t mi s c
tin hnh cui danh sch v vic ly phn t ra s c tin hnh u danh sch.

63


head

NULL

tail
Hnh 4.4 Ci t hng i bng danh sch lin kt

Khai bo 1 hng i bng danh sch lin kt nh sau:


struct node {
int item;
struct node *next;
};
typedef struct node *queuenode;
typedef struct {
queuenode head;
queuenode tail;
}queue;
Khai bo tng t nh ngn xp, tuy nhin, hng i s dng 2 bin l hea v tail lu
gi im u v im cui ca hng. Khi , cc thao tc trn hng i c ci t nh sau:
Thao tc khi to hng i
Thao tc ny thc hin vic gn gi tr null cho nt u v cui ca hng i, cho bit hng
i ang trng thi rng.
void QueueInitialize(queue *q){
q-> head = q-> tail = NULL;
return;
}
Thao tc kim tra hng i rng
Hng i rng nu nt u tr n NULL.
int QueueEmpty(queue q){
return (q.head == NULL);
}
Thao tc thm 1 phn t vo hng i
void Put(queue *q, int x){
queuenode p;
p = (queuenode) malloc (sizeof(struct node));
p-> item = x;
p-> next = NULL;
q-> tail-> next = p;
q-> tail = q-> tail-> next;

64

if (q-> head == NULL) q-> head = q-> tail;


return;
}

thm phn t vo cui hng i, to v cp pht b nh cho 1 nt mi. Gn gi tr thch


hp cho nt ny, sau cho con tr tip ca nt cui hng i tr n n. Nt ny by gi tr
thnh nt cui ca hng i. Nu hng i cha c phn t no th n cng chnh l nt u ca
hng i.
Ly phn t ra khi hng i
ly phn t ra khi hng i, tin hnh ly phn t ti v tr nt u v cho nt u
chuyn v nt k tip. Tuy nhin, trc khi lm cc thao tc ny, ta phi kim tra xem hng i c
rng hay khng.
int Get(queue *q){
queuenode p;
if (QueueEmpty(*q)){
printf("Ngan xep rong !");
return 0;
}else{
p = q-> head;
q-> head = q-> head-> next;
return p->item;
}
}

4.3 TM TT CHNG 4
-

Ngn xp l mt dng c bit ca danh sch m vic b sung hay loi b mt phn t
u c thc hin 1 u ca danh sch. Ngn xp cn c gi l kiu d liu c
nguyn tc LIFO (Last In First Out - Vo sau ra trc).

Ngn xp c th c ci t bng mng hoc danh sch lin kt.

Cc thao tc c bn trn ngn xp bao gm: Khi to ngn xp, kim tra ngn xp rng
(y), thm 1 phn t vo ngn xp, loi b 1 phn t khi ngn xp.

Hng i l mt cu trc d liu gn ging vi ngn xp, nhng phn t c ly ra


khi hng i khng phi l phn t mi nht c a vo m l phn t c lu
trong hng i lu nht. Quy lut ca hng i l vo trc ra trc (FIFO - First In
First Out).

Hng i cng c th c ci t bng mng hoc danh sch lin kt. Cc thao tc c
bn cng bao gm: Khi to hng i, kim tra hng i rng (y), thm 1 phn t vo
hng i, loi b 1 phn t khi hng i.

4.4 CU HI V BI TP
1. ci t ngn xp bng mng 1 chiu, ta cn b tr ngn xp trong mng nh th no?
Cn dng thm cc bin ph no?
2. Hn ch ca ci t ngn xp bng mng so vi danh sch lin kt l g?
65

3. ci t ngn xp bng danh sch lin kt cn b tr danh sch nh th no?


4. Hon thin m ngun ca chng trnh tnh biu thc dng hu t.
5. Hon thin m ngun chng trnh chuyn i biu thc dng trung t sang hu t.
6. Vit chng trnh i 1 s nguyn t h thp phn sang nh phn s dng ngn xp.
7. S khc bit c bn gia hng i v ngn xp l g?
8. Hon thin m ngun ca chng trnh ci t ngn xp bng mng v danh sch lin
kt bao gm khai bo v cc thao tc nh hng dn trong ti liu.
9. Hon thin m ngun ca chng trnh ci t hng i bng mng v danh sch lin
kt bao gm khai bo v cc thao tc nh hng dn trong ti liu.

66

CHNG 5

CU TRC D LIU KIU CY

Chng 5 gii thiu mt cu trc d liu rt gn gi v c nhiu ng dng trong thc t,


l cu trc d liu kiu cy.
Cc ni dung chnh c trnh by trong chng bao gm:
-

nh ngha v cc khi nim v cy.

Ci t cy : Ci t bng mng hoc danh sch lin kt.

Php duyt cy: Duyt th t trc, th t gia, v th t sau.

Ngoi ra, chng ny cn gii thiu mt loi cy c bit, c nhiu ng dng trong thc
tin v nghin cu khoa hc, l cy nh phn. Loi cy c bit hn na l cy nh phn tm
kim s c gii thiu trong chng 7.
5.1 KHI NIM
Cy l mt cu trc d liu c vai tr quan trng trong vic phn tch v thit k cc thut
ton. Lu tr v biu din d liu kiu cy c th thy trong nhiu lnh vc ca cuc sng. V d
mt cun gia ph lu tr thng tin v cc thnh vin trong mt dng h, trong cc thnh vin
thc bc khc nhau c phn thnh cc cp khc nhau trong biu din hnh cy ca gia ph. S
t chc ca 1 n v cng thng c biu din thng qua cu trc cy. Cc n v con nm
cp di n v trc tip qun l. Cc n v ngang hng nm cng cp. Trong lnh vc my
tnh, cch lu tr d liu ca h iu hnh cng p dng kiu lu tr cy. Cc tp tin c lu tr
trong cc cy th mc, trong cc th mc con nm trong cc th mc cha.
Cy c th c nh ngha nh sau:
Cy l mt tp hp cc nt (cc nh) v cc cnh, tha mn mt s yu cu no . Mi
nt ca cy u c 1 nh danh v c th mang thng tin no . Cc cnh dng lin kt cc
nt vi nhau. Mt ng i trong cy l mt danh sch cc nh phn bit m nh trc c lin
kt vi nh sau.
Mt tnh cht rt quan trng hnh thnh nn cy, l c ng mt ng i ni 2 nt bt
k trong cy. Nu tn ti 2 nt trong cy m c t hoc nhiu hn 1 ng i th ta c mt th
(s xem xt chng sau).
Mi cy thng c mt nt c gi l nt gc. Mi nt u c th coi l nt gc ca cy
con bao gm chnh n v cc nt bn di n. Trong biu din hnh hc ca cy, nt gc thng
nm v tr cao nht, tip theo l cc nt k tip.

67

Gc
Nt cha
Nt

Nt l

Nt con
Hnh 5.1 Cy
Nh vy ta c th thy rng cy bao gm gc v cc cy con ni vi gc. Qua , ta c th
nh ngha cy di dng qui nh sau. Cy c th l:
-

Mt nt ng ring l (v n chnh l gc ca cy ny).

Hoc mt nt kt hp vi mt s cy con bn di.

Mi nt trong cy (tr nt gc) c ng 1 nt nm trn n, gi l nt cha (parent). Cc nt


nm ngay di nt c gi l cc nt con (subnode). Cc nt nm cng cp c gi l cc
nt anh em (sibling). Nt khng c nt con no c gi l nt l (leaf) hoc nt tn cng.
Chiu cao ca nt l ng i di nht t nt ti mt l. Chiu cao ca cy chnh l chiu
cao ca nt gc. su ca 1 nt l di ng i duy nht gia nt gc v nt .
Mt cy c gi l c th t nu cc nt con ca 1 nt c b tr theo th t no .
Ngc li gi l cy khng c th t.
5.2 CI T CY
5.2.1

Ci t cy bng mng cc nt cha

Gi s ta cn ci t 1 cy c n nt l cc nt 1, 2, .., n. Khi biu din cy bng mng,


ta s dng mt mng A lu tr cc nt cha ca cc nt trong cy: A[i] = j nu j l nt cha ca
nt i. Nu i l nt gc th ta gn gi tr A[i] = 0.
Cy c biu din theo cch ny da trn tnh cht: Mi nt trong cy ch c duy nht 1
nt cha. tm ng i t 1 nt ln gc, ta tm nt cha ca nt , ri tm nt cha ca nt va
tm c, v.v. cho ti khi ln n nt gc. Hnh 5.2 cho thy biu din bng mng ca 1 cy.
Gc
1
2

6
8

8 9

7 7

Hnh 5.2 Biu din cy bng mng cc nt cha

68

Vi phng php biu din ny, ta c th d dng tm nt cha ca 1 nt trn cy, nhng
nhc im l vic tm nt con ca 1 nt kh phc tp, c bit l tm tt c cc nt con ca mt
nt s tn rt nhiu cng sc. Ngoi ra, vi cch biu din ny, ta cng khng n nh c th t
ca cc nt con.
5.2.2

Ci t cy thng qua danh sch cc nt con

Cy c th c ci t mt cch hiu qu hn bng cch to ra 1 danh sch cc nt con


cho mi nt ca cy. Danh sch cc nt cn ny c th s dng bt k loi danh sch no nh
trnh by chng 3. Tuy nhin, do s nt con ca 1 nt l khng xc nh trc, do vy nn
dng danh sch lin kt biu th danh sch cc nt con.
Quay tr li vi cy phn trc, biu din cy theo danh sch cc nt con nh sau:
1

NULL

NULL

NULL

NULL

4567
89Hnh 5.3 Ci t cy bng danh sch cc nt con
R rng biu din cy theo phng php ny cho php duyt cy d dng v hp logic hn.
Xut pht t gc, ta tm cc nt con ca gc, ri tm cc nt con ca cc nt va tm c, v.v.
cho ti khi n cc nt l.
Khai bo cho cy theo theo phng php ny trong C nh sau:
#define max = 100;
struct node {
int item;
struct node *next;
};
typedef struct node *listnode;
typedef struct {
int root;
listnode subnode[max];
} tree;
69

Trong khai bo trn, thnh phn subnode[i] l con tr tr n danh sch cc nt con ca nt
i.
5.3 DUYT CY
Duyt cy l hnh ng duyt qua tt c cc nt ca mt cy theo mt trnh t no .
Trong qu trnh duyt, ti mi nt ta c th tin hnh mt thao tc x l no . i vi cc danh
sch lin kt, vic duyt qua danh sch n gin l i t nt u, qua cc lin kt v ti nt cui
cng. Tuy nhin, i vi cy, mi nt c th c nhiu lin kt ti cc nt con, v vy th t duyt
qua cc nt s cho cc phng php duyt cy theo trnh t khc nhau.
Nhn chung, c 3 trnh t duyt cy ph bin nht, l:
-

Duyt cy theo th t trc.

Duyt cy theo th t gia.

Duyt cy theo th t sau.

5.3.1

Duyt cy th t trc
Gi s ta c mt cy T vi gc n v k cy con l T1, T2, ..., Tk nh hnh v.
Gc
n

T1

T2

...

Tk

Hnh 5.4 Duyt cy th t trc


Qu trnh duyt cy th t trc c tin hnh theo trnh t nh sau:
-

Thm nt gc n.

Thm cy con T1 theo phng php th t trc.

Thm cy con T2 theo phng php th t trc.

...

Thm cy con Tk theo phng php th t trc.

Chng hn vi cy nh phn trc, trnh t thm cy theo th t trc nh sau:

70

Gc
1
2

7
8

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9


5.3.2

Duyt cy th t gia
Qu trnh duyt cy th t gia c tin hnh theo trnh t nh sau:
-

Thm cy con T1 theo phng php th t gia.

Thm nt gc n.

Thm cy con T2 theo phng php th t gia.

...

Thm cy con Tk theo phng php th t gia.

Vi cy nh phn trc, trnh t thm cy theo th t gia nh sau:


Gc
1
2

6
8

3
4

7
9

4 -> 3 -> 5 -> 2 -> 1 -> 6 -> 8 -> 7 -> 9


5.3.3

Duyt cy th t sau
Qu trnh duyt cy th t sau c tin hnh theo trnh t nh sau:
-

Thm cy con T1 theo phng php th t sau.

Thm cy con T2 theo phng php th t sau.

...

Thm cy con Tk theo phng php th t sau.

Thm nt gc n.

Vi cy nh phn trc, trnh t thm cy theo th t sau nh sau:

71

Gc
1
2

6
8

3
4

7
9

4 -> 5 -> 3 -> 2 -> 6 -> 8 -> 9 -> 7 -> 1


5.4 CY NH PHN
Cy nh phn l mt loi cy c bit m mi nt ca n ch c nhiu nht l 2 nt con. Khi
, 2 cy con ca mi nt c gi l cy con tri v cy con phi.

1
2
4

3
5

Hnh 5.5 Cy nh phn


Cy nh phn l loi cy c cu trc n gin v c nhiu ng dng trong tin hc. Mt s
dng cy nh phn c bit v c ng dng nhiu nht l:
-

Cy nh phn y : L cy nh phn m mi nt khng phi l u c ng 2 nt con


v cc nt l phi c cng su.
10

23
9

31
15

87

22

Hnh 5.6 Cy nh phn y


-

Cy nh phn tm kim: L cy nh phn c tnh cht kha ca nt con bn tri bao gi


cng nh hn kha ca nt cha, cn kha ca cy con bn phi bao gi cng ln hn
hoc bng kha ca nt cha.
72

20

12
8

30
25

15

37

Hnh 5.7 Cy nh phn tm kim


5.4.1

Ci t cy nh phn bng mng

i vi cy nh phn y , mi nt u c ng 2 nt con, ta c th s dng 1 mng


biu din cy theo quy tc:
-

Nt u tin (nt th 1) ca mng l nt gc.

Nt th i (i 1) ca cy c 2 nt con l nt th 2i v 2i + 1. iu ny ng ngha vi
nt cha ca nt j l nt [j/2].

Vi cch lu tr ny, ta c th d dng tm c cc nt con ca 1 nt cho trc cng nh


d dng tm c nt cha ca n.
V d, cy nh phn y nh phn trc c th c biu din bng mng A nh sau:
10

23
9

31
15

87

A[0] A[1] A[2] A[3] A[4] A[5] A[6]


22

10

23

31

15

87

22

Hnh 5.8 Ci t cy nh phn bng mng


i vi cy nh phn khng cn bng, do s nt con ca mt nt c th < 2 nn dng cch
biu din trn khng thch hp. Khi , ta c th dng mt mng cc nt, mi nt ny c 2 thnh
phn l nt con tri v nt con phi.
typedef struct {
int item;
int leftchild;
int rightchild;
} node;
node tree[max];
5.4.2

Ci t cy nh phn bng danh sch lin kt

Mi nt trong cy nh phn c ti a 2 nt con, do vy s dng danh sch lin kt ci t


cy nh phn l mt phng php hu hiu. Mi nt ca cy nh phn khi s c 3 thnh phn:
-

Thnh phn item ch thng tin v nt.

Con tr left tr n nt con bn tri.


73

Con tr right tr n nt con bn phi.

Nu nt c t hn 2 nt con th mt trong hai con tr hoc c 2 s c gn gi tr NULL.


Ngoi ra, tng cng kh nng di chuyn trong cy, ta c th thm mt thnh phn na cho nt
l con tr parent tr n nt cha.
V d, cy nh phn hnh bn di c th c biu din bng danh sch lin kt nh sau:
1
2
4

1
3

2
4

Hnh 5.9 Ci t cy nh phn bng danh sch lin kt


Khai bo cy nh phn bng danh sch lin trn trong C nh sau:
struct node {
int item;
struct node *left;
struct node *right;
}
typedef struct node *treenode;
treenode root;
5.4.3

Duyt cy nh phn

Php duyt cy nh phn cng c chia lm 3 kiu: duyt th t trc, duyt th t sau, v
duyt th t cui.
Duyt th t trc
void
PreOrder (treenode root ) {
if (root !=NULL) {
printf(%d, root.item);
PreOrder(root.left);
PreOrder(root.right);
}
}
Duyt th t gia
void
InOrder (treenode root ) {
if (root !=NULL) {
PreOrder(root.left);
74

printf(%d, root.item);
PreOrder(root.right);
}
}

Duyt th t sau
void
PostOrder (treenode root ) {
if (root !=NULL) {
PreOrder(root.left);
PreOrder(root.right);
printf(%d, root.item);
}
}
5.5 TM TT CHNG 5
-

nh ngha qui ca cy:


Cy c th l:
(1)

Mt nt ng ring l (v n chnh l gc ca cy ny).

(2)

Hoc mt nt kt hp vi mt s cy con bn di.

Mi nt trong cy (tr nt gc) c ng 1 nt nm trn n, gi l nt cha (parent). Cc


nt nm ngay di nt c gi l cc nt con (subnode). Cc nt nm cng cp
c gi l cc nt anh em (sibling). Nt khng c nt con no c gi l nt l (leaf)
hoc nt tn cng.

Chiu cao ca nt l ng i di nht t nt ti mt l. Chiu cao ca cy chnh l


chiu cao ca nt gc. su ca 1 nt l di ng i duy nht gia nt gc v nt
.

Cy c th c ci t bng mng cc nt cha hoc thng qua danh sch cc nt con.

Duyt cy l thao tc thm tt c cc nt ca cy, mi nt ng 1 ln.

Duyt cy c th theo 3 phng php: Duyt th t u, th t gi, v th t cui.

Cy nh phn l mt loi cy c bit m mi nt ca n ch c nhiu nht l 2 nt con.


Khi , 2 cy con ca mi nt c gi l cy con tri v cy con phi.

5.6 CU HI V BI TP
1. Nu khi nim cy v mt s tnh cht ca cy.
2. Vi cy nh hnh bn di, nu ci t cy bng mng cc nt cha th gi tr ca
mng s nh th no?
Gc
3
4

1
2

5
8

9
7

75

3. Cng vi cy trn, hy cho bit biu din cy theo phng php dng danh sch cc
nt con.
4. Cho bit trnh t thm cc nt ca cy trn khi tin hnh duyt theo th t trc, th
t gia, v th t sau.
5. Vi cy nh phn bn di, hy biu th cy theo phng php dng mng v danh sch
lin kt.
50

10
7

23
69

71

11

76

CHNG 6

TH
Chng 6 gii thiu cc khi nim c bn v th, th c hng, th v hng,
th c trng s.
Hai phng php biu din th thng dng nht cng c trnh by trong chng, l
biu din th bng ma trn k v danh sch k.
i vi thao tc duyt th, hai phng php duyt c xem xt l duyt theo chiu rng
v duyt theo chiu su.
hc tt chng ny, ngoi vic nm vng cc thut ton, sinh vin cn t t ra cho
mnh cc th c th v thc hin cc bc thut ton trn cc th ny.
6.1 CC KHI NIM C BN
6.1.1

th c hng
th c hng G = <V, E> bao gm:
-

V l mt tp hu hn cc nh.

E l mt tp hu hn, c th t cc cp nh ca V, gi l cc cnh.

V d, th c hng G1 = <V1, E1>, vi V1 v E1 c xc nh nh sau:


-

V1 = {a, b, c, d}

E1 = {(a, b); (a, c}; (b, d); (c, b), (d, d)}

Khi , biu din hnh hc ca th ny nh sau:


a

Hnh 6.1 th c hng


Ch rng, trong th c hng, cnh l 1 cp c th t cc nh, v vy cnh (a, c) v
(c, a) l khc nhau. Ngoi ra, mt nh cng c th ni ti chnh n to thnh 1 cnh.
Mi thnh phn thuc V c gi l 1 nh hoc 1 nt ca th, v vy V c gi l tp
cc nh ca th. Mi thnh phn thuc E c gi l 1 cnh hoc 1 cung, v vy E c gi l
tp cc cnh ca th.
Mt cnh (u, v) ca th c hng c th c biu th dng u v. nh u khi c
gi l nh k ca v. Cnh (u, v) c gi l cnh xut pht t u. Ta k hiu A(u) l tp cc cnh
xut pht t u. Cnh (u, v) cng c gi l cnh i ti v, v ta k hiu I(v) l tp cc cnh i ti
b.
Bc ngoi ca 1 nh l s cc cnh xut pht t nh . Do , bc ngoi ca u = | A(u) |.
77

Bc trong ca 1 nh l s cc cnh i ti nh . Do , bc trong ca v = | I(v) |.


Trong v d trn, bc ngoi ca a l 2, bc trong l 0. Bc ngoi ca b l 1, bc trong l 2.
nh ngha v ng i v di ng i, chu trnh, th lin thng :
Mt ng i trong th c hng G(V, E) l mt chui cc nh
P = {v1, v2, , vk}
Trong , vi V (i = 1.. k), v (vi, vi+1) E (i = 1.. k-1).
di ca ng i trong trng hp ny l k - 1.
V d, vi th trn, ta c cc ng i:
{a, b, c}, {a, b}, {a, c}, {a, a} ...
Chu trnh l mt ng i m nh u v nh cui trng nhau. th lin thng l mt
th m lun tn ti ng i gia 2 nh bt k.
6.1.2

th v hng

th v hng l th c cc cnh khng c hng. Hai nt hai u ca cnh c vai


tr nh nhau. nh ngha v th v hng nh sau:
th v hng G = <V, E> bao gm:
-

V l mt tp hu hn cc nh.

E l mt tp hu hn cc cp nh phn bit ca V, gi l cc cnh.

V d, th c hng G2 = <V2, E2>, vi V2 v E2 c xc nh nh sau:


-

V2 = {a, b, c, d}

E2 = {(a, b); (a, c}; (b, d); (c, b) }

Khi , biu din hnh hc ca th ny nh sau:


a

Hnh 6.2 th v hng


Ch rng cc cnh ca th l khng c hng, do vy cnh (u, v) ~ cnh (v, u). Trong
th v hng, cnh (u, v) c coi l cnh xut pht v ng thi l cnh i ti u hoc v. Bc
ca 1 nh l tng s cnh xut pht (cng nh i ti) nh .
6.1.3

th c trng s

Vi cc th nh trnh by trn, mi cnh ca th ch biu th rng c mt lin kt no


t nh ny ti nh khc ca th. Tuy nhin, trong thc t c rt nhiu ng dng ca th
cn thm mt s thng tin cho lin kt ny. Chng hn khong cch gia 2 nt ca th l 2
thnh ph trn bn , th biu th vic chuyn trng thi ca mt loi my di tc ng ca
mt s thao tc, .v.v.

78

40km

Bc Ninh

H Ni
Ninh Bnh

96km
115km

45km
Thi Bnh

Hnh 6.3 th c trng s


6.2 BIU DIN TH
6.2.1

Biu din th bng ma trn k

Gi s ta c mt th c hng G = <V, E> bao gm n nh {v1, v2, vn}. Phng php


biu din th bng ma trn k s dng 1 ma trn A (n x n) c xc nh nh sau:

Ai, j =

1 nu (vi, vj) E
0 nu (vi, vj) E

C ngha l phn t hng i, ct j ca ma trn A c gi tr 1 khi c mt cnh ni t vi n


vj. Ngc li, phn t c gi tr 0.
Ma trn trn c gi l ma trn k ca th c hng (V, E).
V d, vi th c hng (V, E) nh trong hnh v di, ma trn k ca n l:

0
0
A1 =
0
0

1
0
1
0

1
0
0
0

0
1
0
1

v0 = a, v1 = b
v2 = c, v3 = d

Hnh 6.4 Biu din th c hng bng ma trn k


R rng l s phn t c gi tr 1 ca ma trn ng bng vi s cnh ca th.
Mt trong nhng u im ni bt ca ma trn k l da vo ma trn ny, ta d dng xc
nh c cc cnh i ti hoc xut pht t 1 nh cho trc. V d xt nh vi, mi phn t c gi
tr 1 trong hng i ca ma trn tng ng vi 1 cnh xut pht t nh vi. Tng t nh vy, mi
phn t c gi tr 1 ct i tng ng vi 1 cnh i ti nh vi.

79

Ma trn k cng c th s dng biu din th v hng theo quy tc trn. Ch rng
trong th v hng th cnh (u, v) v (v, u) l mt nn ma trn k ca th v hng l ma
trn i xng qua ng cho, tc l Ai, j = Aj, i.
V d, vi th v hng (V, E) nh trong hnh v di, ma trn k ca n l:

0
1
A2 =
1
0

1
0
1
1

1
1
0
0

0
1
0
1

v0 = a, v1 = b
v2 = c, v3 = d

Hnh 6.5 Biu din th v hng bng ma trn k


biu din th c trng s bng ma trn k, ta thay cc phn t c gi tr 1 trong ma
trn bng chnh trng s ca cnh tng ng, v vi cc phn t c gi tr 0, ta thay bng 1 gi tr
cho bit khng c cnh ni 2 nh tng ng.
Chng hn, vi th c trng s v d trc, ta c th biu din bng ma trn k nh sau:

40km

Bc Ninh

H Ni
Ninh Bnh

96km
115km

45km
Thi Bnh

40 115 96
40
A3 =
115 45
96 45

v0 = H Ni, v1 = Bc Ninh, v2 = Thi Bnh, v3 = Ninh Bnh

Hnh 6.6 Biu din th c trng s bng ma trn k


u im ca phng php biu din th bng ma trn k l ta c th d dng bit c
c mt cnh ni 2 nh vi, vj hay khng v c trng s bao nhiu. Tuy nhin, phng php ny c
nhc im l kch thc ma trn k lun lun l n x n bt k th c bao nhiu cnh.
6.2.2

Biu din th bng danh sch k

R rng l i vi cc th c s cnh t th vic s dng ma trn k biu din th


gy ra lng ph khng gian nh. Trong trng hp ny, ngi ta thng s dng phng php
danh sch k biu din th.

80

Phng php ny s dng mt danh sch lin kt cho mi nh ca th. Danh sch lin
kt ca mt nh s cha cc nh khc k vi n, do vy cc danh sch ny c gi l cc danh
sch k.
V d, vi th c hng nh hnh 6.1, cc danh sch k ca n l:
a

NULL

NULL

NULL

NULL

Cn vi th v hng nh hnh 6.2, cc danh sch k ca n l:


a

NULL

NULL

NULL

NULL

Hnh 6.7 Biu din th bng danh sch k


6.3 DUYT TH
Duyt th l hnh ng thm tt c cc nh ca th, mi nh ng 1 ln, theo mt
trnh t no . Tng t nh duyt cy, c nhiu phng php duyt th ty theo trnh t
thm cc nt trong qu trnh duyt. Tuy nhin, c 2 phng php duyt ph bin nht l duyt
theo chiu su v duyt theo chiu rng.
6.3.1

Duyt theo chiu su

Qu trnh duyt theo chiu su bt u t mt nh no ca th. Sau khi thm nh


ny, qu trnh duyt theo chiu su c lp li vi tt c cc nh k ca n. Tuy nhin, th c
th tn ti cc chu trnh, do vy, ta cn phi nh du cc nh duyt trnh duyt li nh
ny mt ln na.
Vi trnh t duyt nh trn, qu trnh duyt s duyt ht mt nhnh ca th ri mi
sang nhnh khc. Do vy, phng php duyt ny c gi l duyt theo chiu su.
a

Hnh 6.8 Duyt th theo chiu su


81

V d, vi th trn, qu trnh duyt theo chiu su bt u t nh a s cho th t duyt


nh sau:
-

Sau khi thm nh a, tin hnh thm nh k vi a l b. Tip theo thm nh k b l d.


nh d khng k nh no, do vy quay li bc trc.

nh b ch c 1 nh k l d thm, do vy quay tr li bc trc.

nh a cn nh k l c cha thm, do vy tin hnh thm nh ny.

Nh vy, th t cc nh trong qa trnh duyt l: a, b, d, c


Qu trnh duyt s ch duyt theo cc cnh dn ti cc nh cha thm. Cc cnh dn ti cc
nh thm ri s c b qua. Chng hn, trong qu trnh duyt th trn, khi duyt n nh c,
cnh ni ti b s c b qua v nh b c thm ri.
Ci t phng php duyt theo chiu su nh sau:
kim tra vic duyt mi nh ng mt ln, chng ta s dng mt mng daxet gm n
phn t (tng ng vi n nh). Nu nh th i c duyt, daxet[i]=1, ngc li, daxet[i]=0.
Thut ton tm kim theo chiu su bt u t nh v no s duyt tt c cc nh lin thng
vi v. Thut ton c th c m t bng th tc qui DeepFirstSearch.
void DeepFirstSearch(int v){
Thm nh v;
daxet[v] = 1;
for mi nh u k vi v {
if (daxet[u]=0 )
DeepFirstSearch(v);
}
}
Th tc DeepFirstSearch s thm tt c cc nh cng thnh phn lin thng vi v mi nh
ng mt ln. m bo duyt tt c cc nh ca th (c th c nhiu thnh phn lin
thng), chng ta ch cn thc hin :
for( i=1; in; i++)
daxet[i] = 0;
for( i:=1;i n; i++)
if (daxet[i]=0)
DeepFirstSearch(i);

6.3.2

Duyt theo chiu rng

Qu trnh duyt theo chiu rng cng bt u t mt nh no ca th. Tip n, cc


nh k ca n s c thm, ri tip tc n cc nh k ca cc nh va thm .v.v.
Nh vy, qu trnh duyt theo chiu rng khng duyt theo tng nhnh ca th m
duyt theo su ca cc nh so vi nh ban u. T nh bt u, cc nh c khong cch vi
nh ban u l 1 c duyt, tip n l cc nh c khong cch 2, v.v.

82

Hnh 6.9 Duyt th theo chiu rng


V d, vn vi th nh phn trc, qu trnh duyt theo chiu rng vi nh bt u l a
s cho th t duyt nh sau:
-

Sau khi thm nh a, tin hnh thm cc nh k vi a l b v c.

Tip theo, thm cc nh k vi b l d.

nh k vi c l b c thm ri nn b qua.

Nh vy, th t cc nh c thm l: a, b, c, d.
Duyt theo chiu rng c th c ci t khng qui bng cch s dng hng i lu
cc nh cn c thm. Cc bc nh sau:
u tin, a nh bt u v vo hng i, sau lp li qu trnh sau cho n khi hng i
khng cn phn t no:
-

Ly phn t ra khi hng i, a vo bin v.

Thm nh v.

Vi mi nh k vi v, nu nh ny cha c thm th a vo hng i.

V d, i vi th hnh trn, cc bc thc hin nh sau:


u tin, a nh a vo hng i.
a
-

Ly nh a ra khi hng i, thm nh a.

a 2 nh k vi a l b v c vo hng i.
b

Ly nh b ra khi hng i, thm nh b


c

a nh k vi b l d vo hng i
c

Ly nh c ra khi hng i, thm nh c


d
83

nh k vi c l b thm, v vy khng a vo hng i. Ly nh d ra khi hng i,


thm nh d.

Hng i ht phn t, qu trnh duyt kt thc. Th t thm cc nh l: a, b, c, d

Ci t cho thun ton duyt theo chiu rng nh sau:


void BreadthFirstSearch(int v){
queue = ;
a v vo hng i;
daxet[v] = 1;
while (queue ){
Ly phn t ra khi hng i, a vo bin u;
Thm nh u;
for

mi nh w k vi u {
if (daxet[w]=0 ) {
a w vo hng i;
daxet[w] = 1;
}

}
}

Tng t nh duyt theo chiu su, th tc BreadthFirstSearch s thm tt c cc nh cng


thnh phn lin thng vi v. thm tt c cc nh ca th, chng ta ch cn thc hin:
for( v=1; vn; v++)
daxet[v] = 0;
for(v=1; vn; v++)
if (daxet[v]=0)
BreadthFirstSearch(u);

6.3.3

ng dng duyt th kim tra tnh lin thng

Nh ni trn, duyt th (theo chiu rng hay theo chiu su) s thm tt c cc nh
cng thnh phn lin thng vi nh bt u duyt. V vy, ta c th s dng th tc duyt th
kim tra tnh lin thng ca th, hoc thm ch c th m c s thnh phn lin thng
ca th.
lm c iu ny, ta thc hin duyt t u n cui danh sch cc nh ca th. Ti
mi bc, ta kim tra nu nh cha c thm th ta tin hnh gi th tc duyt th cho nh
ny. Nh vy, nu th lin thng hon ton th ch mt mt ln gi th tc duyt cho nh u
tin. Ngc li, s ln gi th tc duyt chnh l s thnh phn lin thng ca th.
int lt=0;
for( v=1; vn; v++)
daxet[v] = 0;
for(v=1; vn; v++)
if (daxet[v]=0){

84

BreadthFirstSearch(u);
lt++;
}
if (lt ==1) printf(Do thi lien thong!);
else printf(Do thi khong lien thong, so thanh phan lien thong
la %d, lt);

6.4 TM TT CHNG 6
-

Khi nim th c hng:


th c hng G = <V, E> bao gm:
(1) V l mt tp hu hn cc nh.
(2) E l mt tp hu hn, c th t cc cp nh ca V, gi l cc cnh.

Khi nim th v hng:


th v hng G = <V, E> bao gm:
(1) V l mt tp hu hn cc nh.
(2) E l mt tp hu hn cc cp nh phn bit ca V, gi l cc cnh.

th c th c biu din bng ma trn k hoc danh sch k.

th biu din bng ma trn k A c tnh cht: Phn t hng i, ct j ca ma trn A


c gi tr 1 khi c mt cnh ni t vi n vj. Ngc li, phn t c gi tr 0.

Biu din th bng danh sch k: S dng mt danh sch lin kt cho mi nh ca
th. Danh sch lin kt ca mt nh s cha cc nh khc k vi n

Duyt theo chiu su bt u t mt nh no ca th. Sau khi thm nh ny, qu


trnh duyt theo chiu su c lp li vi tt c cc nh k ca n.

Duyt theo chiu rng cng bt u t mt nh no ca th. Tip n, cc nh k


ca n s c thm, ri tip tc n cc nh k ca cc nh va thm .v.v.

6.5 CU HI V BI TP
1. Cho bit biu din bng ma trn k v danh sch k ca th bn di:

2. Cho bit ma trn k ca th trng s sau:


5

85

3. Vi th cu 1, cho bit trnh t thm cc nh khi thc hin duyt theo chiu su bt
u t nh a.
4. Vi th cu 2, cho bit trnh t thm cc nh khi thc hin duyt theo chiu rng bt
u t nh a.
5. Cho bit s thnh phn lin thng ca th bn di.
a

e
d

86

CHNG 7

SP XP V TM KIM

Sp xp v tm kim l cc vn rt c bn trong tin hc cng nh trong thc tin.


Chng 7 gii thiu cc phng php sp xp v tm kim thng dng nht, bao gm cc gii
thut t n gin n phc tp.
i vi cc gii thut sp xp, cc phng php sp xp n gin c trnh by bao gm:
sp xp chn, sp xp chn, sp xp ni bt. Cc phng php sp xp phc tp v hiu qu hn
c xem xt l gii thut sp xp nhanh (quick sort), sp xp vun ng (heap sort) v sp xp
trn (merge sort). Vi mi phng php sp xp, ngoi vic trnh by cc bc thc hin thut
ton, phc tp ca gii thut cng c tnh ton v nh gi.
i vi cc phng php tm kim, ngoi phng php tm kim tun t n gin, cc
phng php tm kim phc tp v hiu qu hn cng c xem xt l tm kim nh phn v tm
kim bng cy nh phn tm kim.
hc tt chng ny, sinh vin cn nghin cu k cc bc thc hin cc thut ton v
ly v d c th, sau thc hin tng bc trn v d.
7.1 BI TON SP XP
Sp xp l qu trnh b tr li cc phn t ca 1 tp hp theo th t no . Mc ch chnh
ca sp xp l lm cho thao tc tm kim phn t trn tp c d dng hn. V d v tp cc
i tng c sp ph bin trong thc t l: danh b in thoi c sp theo tn, cc t trong t
in c sp theo vn, sch trong th vin c sp theo m s, theo tn, .v.v.
Nhn chung, c rt nhiu thao tc x l d liu cn n vic sp xp cc phn t d liu
theo trnh t no . Trn thc t, sp xp l mt thao tc kh n gin. Tuy nhin, nh chng ta
s thy, c rt nhiu gii thut sp xp khc nhau, t n gin ti phc tp. V cc k thut c
s dng trong cc gii thut sp xp ny c nghin cu v phn tch nhiu hn l chnh bn
thn gii thut sp xp. Cc k thut ny c coi l c s xy dng nhiu gii thut quan
trng khc. Do , cc thut ton sp xp c trnh by v phn tch k trong hu ht cc ti liu
v gii thut.
Cc gii thut sp xp cn l mt v d in hnh cho s a dng ca thut ton. Cng mt
mc ch, nhng c rt nhiu cch thc hin, mi cch ti u trn mt kha cnh no , v c
mt s cch sp xp c nhiu u im hn nhng cch khc. Do , sp xp cng c s dng
nh mt v d in hnh trong vic phn tch thut ton.
Thng thng, cc gii thut sp xp c chia lm 2 loi. Loi th nht l cc gii thut
c ci t n gin, nhng khng hiu qu (phi s dng nhiu thao tc). Loi th hai l cc
gii thut c ci t phc tp, nhng hiu qu hn v mt tc (dng t thao tc hn). i vi
cc tp d liu t phn t, tt nht l nn la chn loi th nht. i vi tp c nhiu phn t, loi
th hai s mang li hiu qu hn.
Cc i tng d liu cn sp xp thng c nhiu thuc tnh, v ta cn chn mt thuc
tnh lm kha sp xp d liu theo kha ny. V d, i tng v ngi thng c cc thuc

87

tnh c bn nh h tn, ngy sinh, gii tnh, v.v., tuy nhin h tn thng c chn lm kha
sp xp.
Tham s tnh ton hiu qu ca gii thut thng l thi gian thc hin. i vi cc
phng php sp xp n gin, thi gian thc hin (s thao tc thc hin) t l vi N2, trong N
l s phn t ca tp. Cc gii thut sp xp phc tp v tinh xo hn c thi gian thc hin t l
vi NlogN. Ngi ta chng mnh c rng, khng c gii thut no c th c thi gian thc hin
nh hn NlogN. Ngoi thi gian thc hin, dung lng b nh b chim cng l mt tham s
nh gi tnh hiu qu ca gii thut.
Mt vn na cn phi ch khi thc hin sp xp, l tnh n nh ca gii thut sp
xp. Mt gii thut c gi l n nh nu sau khi sp xp, n gi nguyn v tr ca cc phn t
c cng gi tr kha. Chng hn, vi danh sch theo vn h tn cc sinh vin trong mt lp. Nu
ta tin hnh sp danh sch ny theo im, th cc sinh vin c cng im vn c sp theo vn
h tn. Hu ht cc gii thut sp xp n gin c tnh n nh, trong khi cc gii thut tinh xo
hn li khng c tnh cht ny.
7.2 CC GII THUT SP XP N GIN
7.2.1

Sp xp chn
y l mt trong nhng gii thut sp xp n gin nht. tng ca gii thut nh sau:

La chn phn t c gi tr nh nht, i ch cho phn t u tin. Tip theo, la chn phn
t c gi tr nh th nh, i ch cho phn t th 2. Qu trnh tip tc cho ti khi ton b dy
c sp.
V d, cc bc thc hin sp xp chn dy s bn di nh sau:
32

17

49

98

06

25

53

61

53

61

Bc 1: Chn c phn t nh nht l 06, i ch cho 32.


06

17

49

98

32

25

Bc 2: Chn c phn t nh th nh l 17, chnh l phn t th 2 nn gi nguyn.


06

17

49

98

32

25

53

61

53

61

53

61

Bc 3: Chn c phn t nh th ba l 25, i ch cho 49.


06

17

25

98

32

49

Bc 4: Chn c phn t nh th t l 32, i ch cho 98.


06

17

25

32

98

49

88

Bc 5: Chn c phn t nh th nm l 49, i ch cho 98.


06

17

25

32

49

98

53

61

98

61

61

98

Bc 6: Chn c phn t nh th su l 53, i ch cho 98.


06

17

25

32

49

53

Bc 7: Chn c phn t nh th by l 61, i ch cho 98.


06

17

25

32

49

53

Nh vy, ton b dy c sp.


Gii thut c gi l sp xp chn v ti mi bc, mt phn t c chn v i ch cho
phn t v tr cn thit trong dy.
Th tc thc hin sp xp chn trong C nh sau:
void selection_sort(){
int i, j, k, temp;
for (i = 0; i< N; i++){
k = i;
for (j = i+1; j < N; j++){
if (a[j] < a[k]) k = j;
}
temp = a[i]; a[i] =a [k]; a[k] = temp;
}
}
Trong th tc trn, vng lp u tin duyt t u n cui dy. Ti mi v tr i, tin hnh
duyt tip t i ti cui dy chn ra phn t nh th i v i ch cho phn t v tr i.
Thi gian thc hin thut ton t l vi N2, v vng lp ngoi (bin chy i) duyt qua N
phn t, v vng lp trong duyt trung bnh N/2 phn t. Do , phc tp trung bnh ca thut
ton l O(N * N/2) = O(N2/2) = O(N2).
7.2.2

Sp xp chn

Gii thut ny coi nh dy c chia lm 2 phn. Phn u l cc phn t c sp. T


phn t tip theo, chn n vo v tr thch hp ti na sp sao cho n vn c sp.
chn phn t vo na sp, ch cn dch chuyn cc phn t ln hn n sang tri 1 v
tr v a phn t ny vo v tr trng trong dy.
V d, na dy sp l:

89

06

17

49

98

chn phn t 32 vo na dy ny, ta tin hnh dch chuyn cc phn t ln hn 32 v


bn tri 1 v tr:
06

17

49

98

Sau , chn 32 vo v tr trng trong na dy:


06

17

32

49

98

Quay tr li vi dy s phn trc, cc bc thc hin sp xp chn trn dy nh sau:


Dy ban u: Na sp trng, na cha sp l ton b dy.
32

17

49

98

06

25

53

61

Bc 1: Chn phn t u ca na cha sp l 32 vo na sp. Do na sp l trng


nn c th chn vo v tr bt k.
32

17

49

98

sp

06

25

53

61

Cha sp

Bc 2: Chn phn t 17 vo na sp. Dch chuyn 32 sang phi 1 v tr v a 17 vo


v tr trng.
17

32

49

98

06

25

53

61

53

61

sp
Cha sp
Bc 3, 4: Ln lt chn phn t 49, 98 vo na sp.
17

32

49

98

06

sp

25

Cha sp

Bc 5: Chn phn t 06 vo na sp. Dch chuyn cc phn t 17, 32, 49, 98 sang
phi 1 v tr v a 06 vo v tr trng.
06

17

32
sp

49

98

25

53

61

Cha sp
90

Bc 6: Chn phn t 25 vo na sp. Dch chuyn cc phn t 32, 49, 98 sang phi 1
v tr v a 25 vo v tr trng.
06

17

25

32

49

98

sp

53

61

Cha sp

Bc 7: Chn phn t 53 vo na sp. Dch chuyn phn t 98 sang phi 1 v tr v


a 53 vo v tr trng.
06

17

25

32

49

53

98

sp

61
Cha sp

Bc 8: Chn phn t cui cng 61 vo na sp. Dch chuyn phn t 98 sang phi 1
v tr v a 61 vo v tr trng.
06

17

25

32

49

53

61

98

sp
Th tc thc hin sp xp chn trong C nh sau:
void insertion_sort(){
int i, j, k, temp;
for (i = 1; i< N; i++){
temp = a[i];
j=i-1;
while ((a[j] > temp)&&(j>=0)) {
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
Thut ton s dng 2 vng lp. Vng lp ngoi duyt khong N ln, v vng lp trong
duyt trung bnh N/4 ln (gi s duyt n gia na sp th gp v tr cn chn). Do ,
phc tp trung bnh ca thut ton l O(N2/4) = O(N2).
7.2.3

Sp xp ni bt

Gii thut sp xp ni bt c thc hin theo nguyn tc: Duyt nhiu ln t cui ln u
dy, tin hnh i ch 2 phn t lin tip nu chng ngc th t. n mt bc no , khi
khng c php i ch no xy ra th ton b dy c sp.
91

Nh vy, sau ln duyt u tin, phn t nh nht ca dy s ln lt c i ch cho cc


phn t ln hn v ni ln u dy. Ln duyt th 2, phn t nh th 2 s ni ln v tr th nh
dy .v.v. Chu rng, khng nht thit phi tin hnh tt c N ln duyt, m ti mt ln duyt no
, nu khng cn php i ch no xy ra tc l tt c cc phn t nm ng th t v ton b
dy c sp.
Vi dy s nh phn trc, cc bc tin hnh gii thut sp xp ni bt trn dy nh
sau:
Bc 1: Ti bc ny, khi duyt t cui dy ln, ln lt xut hin cc cp ngc th t l
(06, 98), (06, 49), (06, 17), (06, 32). Phn t 06 ni ln u dy.
32

32

32

32

06

17

17

17

06

32

49

49

06

17

17

98

06

49

49

49

06

98

98

98

98

25

25

25

25

25

53

53

53

53

53

61

61

61

61

61

Bc 2: Duyt t cui dy ln, ln lt xut hin cc cp ngc th t l (25, 98), (25, 49),
(17, 32). Phn t 17 ni ln v tr th 2.

06

06

06

06

32

32

32

17

17

17

17

32

49

49

25

25

98

25

49

49

25

98

98

98

53

53

53

53

61

61

61

61

Bc 3: Duyt t cui dy ln, ln lt xut hin cc cp ngc th t l (53, 98), (25, 32).
Phn t 25 ni ln v tr th 3.

92

06

06

06

17

17

17

32

32

25

25

25

32

49

49

49

98

53

53

53

98

98

61

61

61

Bc 4: Duyt t cui dy ln, xut hin cp ngc th t l (61, 98).


06

06

17

17

25

25

32

32

49

49

53

53

98

61

61

98

Bc 5: Duyt t cui dy ln, khng cn xut hin cp ngc no. Ton b dy c


sp.
Th tc thc hin sp xp ni bt trong C nh sau:
void bubble_sort(){
int i, j, temp, no_exchange;
i = 1;
do{
no_exchange = 1;
for (j=n-1; j >= i; j--){
if (a[j-1] > a[j]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
no_exchange = 0;
}
}
93

i++;
} until (no_exchange || (i == n-1));
}

Ln duyt u tin cn khong N-1 php so snh v i ch lm ni phn t nh nht


ln u. Ln duyt th 2 cn khong N-2 php ton, .v.v. Tng cng, s php so snh cn thc
hin l:
(N-1) + (N-2) + + 2 + 1 = N(N-1)/2
Nh vy, phc tp cng gii thut sp xp ni bt cng l O(N2).
7.3 QUICK SORT
7.3.1

Gii thiu

Quick sort l mt thut ton sp xp c pht minh ln u bi C.A.Hoare vo nm 1960.


y c l l thut ton c nghin cu nhiu nht v c s dng rng ri nht trong lp cc
thut ton sp xp.
Quick sort l mt thut ton d ci t, hiu qu trong hu ht cc trng hp, v tiu tn t
ti nguyn hn so vi cc thut ton khc. phc tp trung bnh ca gii thut l O(NlogN).
Nhc im ca gii thut ny l phi ci t bng qui (c th khng dng qui, tuy nhin
ci t phc tp hn nhiu) v trong trng hp xu nht th phc tp l O(N2). Ngoi ra, ci
t cho Quick sort phi i hi cc k chnh xc. Ch cn mt sai st nh c th lm cho chng
trnh ngng hot ng.
K t khi Quick sort ra i ln u tin, c rt nhiu n lc nhm ci tin thut ton ny.
Tuy nhin, hu ht cc ci tin ny u khng mang li hiu qu nh mong i, v bn thn Quick
sort l mt thut ton rt cn bng. Mt s ci tin mt phn ny ca thut ton c th dn n
mt tc dng ngc li phn kia v lm cho thut ton tr nn mt cn bng.
tng c bn ca Quick sort da trn phng php chia tr nh trnh by trong
chng 2. Gii thut chia dy cn sp thnh 2 phn, sau thc hin vic sp xp cho mi phn
c lp vi nhau. thc hin iu ny, u tin chn ngu nhin 1 phn t no ca dy lm
kha. Trong bc tip theo, cc phn t nh hn kho phi c xp vo pha trc kho v cc
phn t ln hn c xp vo pha sau kho. c c s phn loi ny, cc phn t s c so
snh vi kho v hon i v tr cho nhau hoc cho kho nu n ln hn kha m li nm trc
hoc nh hn kho m li nm sau. Khi lt hon i u tin thc hin xong th dy c chia
thnh 2 on: 1 on bao gm cc phn t nh hn kho, on cn li bao gm cc phn t ln
hn kho.

94

Kho
Hnh 7.1 Quick sort
p dng k thut nh trn cho mi on v tip tc lm nh vy cho n khi mi on
ch cn 2 phn t. Khi ton b dy c sp.
7.3.2

Cc bc thc hin gii thut

chia dy thnh 2 phn tho mn yu cu nh trn, ta ly mt phn t ca dy lm kho


(chng hn phn t u tin). Tin hnh duyt t bn tri dy v dng li khi gp 1 phn t ln
hn hoc bng kho. ng thi tin hnh duyt t bn phi dy cho ti khi gp 1 phn t nh hn
hoc bng kho. R rng 2 phn t ny nm nhng v tr khng ph hp v chng cn phi c
i ch cho nhau. Tip tc qu trnh cho ti khi 2 bin duyt gp nhau, ta s chia c dy thnh
2 na: Na bn phi kho bao gm nhng phn t ln hn hoc bng kho v na bn tri l
nhng phn t nh hn hoc bng kho.
Ta hy xem xt qu trnh phn i dy s cho phn trc.
32

17

49

98

06

25

53

61

Chn phn t u tin ca dy, phn t 32, lm kho. Qu trnh duyt t bn tri vi bin
duyt i s dng li 49, v y l phn t ln hn kho. Qu trnh duyt t bn phi vi bin
duyt j s dng li 25 v y l phn t nh hn kho. Tin hnh i ch 2 phn t cho nhau.
32

Kho

17

25
i

98

06

49

53

61

Qu trnh duyt tip tc. Bin duyt i dng li 98, cn bin duyt j dng li 06. Li tin
hnh i v tr 2 phn t 98 v 06.

95

32

17

25

Kho

06

98

49

53

61

Tip tc qu trnh duyt. Cc bin duyt i v j gp nhau v qu trnh duyt dng li.
32

17

Kho

25

06

98

49

53

61

Nh vy, dy c chia lm 2 na. Na u t phn t u tin n phn t th j, bao


gm cc phn t nh hn hoc bng kho. Na sau t phn t th i n phn t cui, bao gm cc
phn t ln hn hoc bng kho.
Qu trnh duyt v i ch c lp li vi 2 na dy va c to ra, v c tip tc nh
vy cho ti khi dy c sp hon ton.
7.3.3

Ci t gii thut

ci t gii thut, trc ht ta xy dng mt th tc sp mt phn on ca dy. Th


tc ny l 1 th tc qui, bao gm vic chia phn on thnh 2 on con tha mn yu cu trn,
sau thc hin li gi qui vi 2 on con va to c. Gi s phn on c gii hn bi 2
tham s l left v right cho bit ch s u v cui ca phn on, khi th tc c ci t nh
sau:
void quick(int left, int right) {
int i,j;
int x,y;
i=left; j=right;
x= a[left];
do {
while(a[i]<x && i<right) i++;
while(a[j]>x && j>left) j--;
if(i<=j){
y=a[i];a[i]=a[j];a[j]=y;
i++;j--;
}
}while (i<=j);
if (left<j) quick(left,j);
if (i<right) quick(i,right);
}
Tip theo, thc hin sp ton b dy, ta ch cn gi th tc trn vi tham s left l ch s
u v right l ch s cui ca mng.

96

void quick_sort(){
quick(0, n-1);
}

Nhc im ca Quick sort l hot ng rt km hiu qu trn nhng dy c sp sn.


Khi , cn phi mt N ln gi qui v mi ln ch loi c 1 phn t. Thi gian thc hin
thut ton trong trng hp xu nht ny l khong N2/2, c ngha l O(N2).
Trong trng hp tt nht, mi ln phn chia s c 2 na dy bng nhau, khi thi gian
thc hin thut ton T(N) s c tnh l:
T(N) = 2T(N/2) + N
Khi , T(N) NlogN.
Trong trng hp trung bnh, thut ton cng c phc tp khong 2NlogN = O(NlogN).
Nh vy, quick sort l thut ton rt hiu qu trong a s trng hp. Tuy nhin, i vi cc
trng hp vic sp xp ch phi thc hin mt vi ln v s lng d liu cc ln th nn thc thi
mt s thut ton khc c thi gian thc hin trong mi trng hp l O(NlogN), s xem xt
phn sau, m bo trng hp xu nht khng xy ra khi dng quick sort.
7.4 HEAP SORT
7.4.1

Gii thiu

Heap sort l mt gii thut m bo k c trong trng hp xu nht th thi gian thc hin
thut ton cng ch l O(NlogN).
tng c bn ca gii thut ny l thc hin sp xp thng qua vic to cc heap, trong
heap l 1 cy nh phn hon chnh c tnh cht l kha nt cha bao gi cng ln hn kha
cc nt con.
Vic thc hin gii thut ny c chia lm 2 giai on. u tin l vic to heap t dy
ban u. Theo nh ngha ca heap th nt cha bao gi cng ln hn cc nt con. Do vy, nt gc
ca heap bao gi cng l phn t ln nht.
Giai on th 2 l vic sp dy da trn heap to c. Do nt gc l nt ln nht nn n s
c chuyn v v tr cui cng ca dy v phn t cui cng s c thay vo gc ca heap. Khi
ta c 1 cy mi, khng phi heap, vi s nt c bt i 1. Li chuyn cy ny v heap v lp
li qu trnh cho ti khi heap ch cn 1 nt. chnh l phn t b nht ca dy v c t ln
u.
7.4.2

Cc thut ton trn heap

Nh vy, vic u tin cn lm l phi to c 1 heap t 1 dy phn t cho trc. lm


vic ny, cn thc hin thao tc chn 1 phn t vo 1 heap c. Khi , kch thc ca heap
tng ln 1, v ta t phn t mi vo cui heap. Vic ny c th lm vi phm nh ngha heap v
nt mi c th ln hn nt cha ca n. Vn ny c gii quyt bng cch i v tr nt mi
cho nt cha, v nu vn vi phm nh ngha heap th ta li gii quyt theo cch tng t cho n
khi c mt heap mi hon chnh.
Gi s ta c 1 heap nh sau:

97

98
53

49
17

32

25

06

chn phn t 61 vo heap, u tin, ta t n vo v tr cui cng trong cy.


98
53

49
17

06

32

25

61
R rng cy mi vi phm nh ngha heap v nt con 61 ln hn nt cha 17. Tin hnh i
v tr 2 nt ny cho nhau:

98
53

49
61

32

25

06

17
Cy ny vn tip tc vi phm nh ngha heap do nt con 61 ln hn nt cha 49. Li i v
tr 61 cho 49.
98
53

61
49

06

25

32

17
98

Do nt con 61 nh hn nt cha 98 nn cy tho mn nh ngha heap. Nh vy, ta c mt


heap vi nt mi c thm vo l 61.
chn mt phn t x vo 1 heap c k phn t, ta gn phn t th k +1, a[k], bng x, ri
gi th tc upheap(k).
void upheap(int m){
int x;
x=a[m];
while ((a[(m-1)/2]<=x) && (m>0)){
a[m]=a[(m-1)/2];
m=(m-1)/2;
}
a[m]=x;
}
void insert_heap(int x){
a[m]=x;
upheap(m);
m++;
}

Nh vy, vi heap ban u ch c 1 phn t l phn t u tin ca dy, ta ln lt ly cc


phn t tip theo ca dy chn vo heap s to c 1 heap gm ton b n phn t.
Ta hy xem xt qu trnh to heap vi dy s cho phn trc.
32

17

49

98

06

25

53

61

u tin, to 1 heap vi ch 1 phn t l 32:


32

Bc 1: Tin hnh chn 17 vo heap.

32
17
Do khng vi phm nh ngha heap nn khng thay i g.
Bc 2: Tin hnh chn 49 vo heap.

99

32
17

49

Cy ny vi phm nh ngha heap do 49>32 nn i v tr 32 v 49 cho nhau.


49
17

32

Cy mi tho mn nh ngha heap.


Bc 3: Tin hnh chn 98 vo heap.

49
17

32

98

Cy ny vi phm nh ngha heap do 98>17 nn i v tr 98 v 17 cho nhau.


49
98

32

17

Cy mi li vi phm nh ngha heap, do 98>49, nn i v tr 98 cho 49.


98
49

32

17
Cy ny tho mn nh ngha heap.
100

Bc 4: Tin hnh chn 06 vo heap.

98
49

32

17

06

Cy ny tho mn nh ngha heap do 06<49.


Bc 5: Tin hnh chn 25 vo heap.

98
32

49
17

25

06

Cy ny tho mn nh ngha heap do 25<32.


Bc 6: Tin hnh chn 53 vo heap.

98
32

49
17

53

25

06

Cy ny vi phm nh ngha heap do 53>32 nn i v tr 53 v 32 cho nhau.

98
53

49
17
06
Cy mi tho mn nh ngha heap.

25

32

101

Bc 7: Tin hnh chn 61 vo heap.

98
53

49
17

32

25

06

61
Cy ny vi phm nh ngha heap do 61>17 nn i v tr 61 v 17 cho nhau.

98
53

49
61

06

32

25

17
Cy mi tip tc vi phm nh ngha heap do 61>49 nn i v tr 61 v 49 cho nhau.
98
53

61
49

06

25

32

17

Cy ny thon mn nh ngha heap, v chnh l heap cn to.


Sau khi to c heap, tin hnh sp xp, ta cn ly phn t u v l phn t ln nht
ca cy v thay th n bng phn t cui ca dy. iu ny c th lm vi phm nh ngha heap v
phn t mi a ln gc c th nh hn 1 trong 2 nt con.
Do , thao tc th 2 cn thc hin trn heap l tin hnh chnh li heap khi c 1 nt no
nh hn 1 trong 2 nt con ca n. Khi , ta s tin hnh thay th nt ny cho nt con ln hn.
102

Nu vn vi phm nh ngha heap th ta li lp li qu trnh cho ti khi n ln hn c 2 nt con


hoc tr thnh nt l.
Ta xem xt v d vi heap va to c phn trc:
98
53

61
49

32

25

06

17
Ly nt gc 98 ra khi heap v thay th bi nt cui l 17.
17
53

61
49

32

25

06

Cy ny khng tho mn nh ngha heap v 17 nh hn c 2 nt con l 61 v 53. Tin hnh


i ch 17 cho nt con ln hn l 61.
61
53

17
49

32

25

06

Vn tip tc vi phm nh ngha heap do 17 nh hn nt con l 49. Tin hnh i ch 17


cho 49, ta c heap mi hon chnh.
61
53

49
17

06

25

32

Ta c th tc downheap chnh li heap khi nt k khng tho mn nh ngha heap nh


sau:
103

void downheap(int k){


int j, x;
x=a[k];
while (k<=(m-2)/2){
j=2*k+1;
if (j<m-1) if (a[j]<a[j+1]) j++;
if (x>=a[j]) break;
a[k]=a[j]; k=j;
}
a[k]=x;
}

Trong th tc ny, nt k s c kim tra. Nu n vi phm nh ngha heap th s c thay


bi 1 trong 2 nt con (nt ln hn) ti v tr 2*k v 2*k+1. Sau khi hon i v tr, nu vn tip tc
vi phm nh ngha heap th vic hon i li c thc hin. Qu trnh tip tc cho n khi
khng cn vi phm hoc ti nt l.
Cui cng, th tc heap sort thc hin vic sp xp trn heap to nh sau:
int remove_node(){
int temp;
temp=a[0];
a[0]=a[m];
m--;
downheap(0);
return temp;
}
void heap_sort(){
int i;
m=0;
for (i=0; i<=n-1; i++) insert_heap(a[i]);
m=n-1;
for (i=n-1; i>=0; i--) a[i]=remove_node();
}

Trong on m trn, hm remove() s tr v gi tr l nt gc ca heap. Nt ny s c


chuyn xung cui heap, v nt cui c i ln gc. Kch thc ca heap gim i 1, tin hnh
gi th tc downheap chnh li heap mi.
Th tc heap sort u tin to 1 heap bng cch ln lt chn cc phn t ca dy vo heap.
Tip theo, cc nt gc ln lt c ly ra, heap mi c to v chnh li. Qu trnh kt thc khi
heap khng cn phn t no.
Mt trong nhng tnh cht ca heap sort khin n rt c quan tm trong thc t l thi
gian thc hin thut ton lun l O(NlogN) trong mi trng hp, bt k d liu u vo c tnh
104

cht nh th no. y cng l u im ca heap sort so vi quick sort, thut ton c thi gian thc
hin nhanh nhng trong trng hp xu nht th thi gian ln ti O(N2).
7.5 MERGE SORT (SP XP TRN)
7.5.1

Gii thiu

Tng t nh heap sort, merge sort cng l mt gii thut sp xp c thi gian thc hin l
O(NlogN) trong mi trng hp.
tng ca gii thut ny bt ngun t vic trn 2 danh sch c sp xp thnh 1 danh
sch mi cng c sp. R rng vic trn 2 dy sp thnh 1 dy mi c sp c th tn dng
c im sp ca 2 dy con.
thc hin gii thut sp xp trn i vi 1 dy bt k, u tin, coi mi phn t ca dy
l 1 danh sch con gm 1 phn t c sp. Tip theo, tin hnh trn tng cp 2 dy con 1
phn t k nhau to thnh cc dy con 2 phn t c sp. Cc dy con 2 phn t c sp ny
li c trn vi nhau to thnh dy con 4 phn t c sp. Qu trnh tip tc n khi ch cn 1
dy con duy nht c sp, chnh dy ban u.
7.5.2

Trn 2 dy sp

Thao tc u tin cn thc hin khi sp xp trn l vic tin hnh trn 2 dy sp thnh 1
dy mi cng c sp. lm vic ny, ta s dng 2 bin duyt t u mi dy. Ti mi bc,
tin hnh so snh gi tr ca 2 phn t ti v tr ca 2 bin duyt. Nu phn t no c gi tr nh
hn, ta a phn t xung dy mi v tng bin duyt tng ng ln 1. Qu trnh lp li cho
ti khi tt c cc phn t ca c 2 dy c duyt v xt.
Gi s ta c 2 dy sp nh sau:
i
17

j
32

49

98

06

25

53

61

trn 2 dy, ta s dng mt dy th 3 cha cc phn t ca dy tng. Mt bin duyt k


dng lu gi v tr cn chn tip theo trong dy mi.
Bc 1: Phn t ti v tr bin duyt j l 06 nh hn phn t ti v tr bin duyt i l 17 nn
ta a 06 xung dy mi v tng j ln 1. ng thi, bin duyt k cng tng ln 1.
i

17

j
32

49

98

06

25

53

61

k
06

105

Bc 2: Phn t ti v tr i l 17 nh hn phn t ti v tr j l 25 nn ta a 17 xung dy


mi v tng i ln 1, bin duyt k cng tng ln 1.
i

17

32

j
49

98

06

25

53

61

k
06

17

Bc 3: Phn t ti v tr j l 25 nh hn phn t ti v tr i l 32 nn ta a 25 xung dy


mi v tng j ln 1, bin duyt k cng tng ln 1.
i

17

32

j
49

98

06

25

53

61

k
06

17

25

Bc 4: Phn t ti v tr i l 32 nh hn phn t ti v tr j l 53 nn ta a 32 xung dy


mi v tng i ln 1, bin duyt k cng tng ln 1.
i
17

32

49

j
98

06

25

53

61

k
06

17

25

32

Bc 5: Phn t ti v tr i l 49 nh hn phn t ti v tr j l 53 nn ta a 49 xung dy


mi v tng i ln 1, bin duyt k cng tng ln 1.
i

17

32

49

98

06

25

53

61

k
06

17

25

32

49

106

Bc 6: Phn t ti v tr j l 53 nh hn phn t ti v tr i l 98 nn ta a 53 xung dy


mi v tng j ln 1, bin duyt k cng tng ln 1.
i

17

32

49

98

06

25

53

61

k
06

17

25

32

49

53

Bc 7: Phn t ti v tr j l 61 nh hn phn t ti v tr i l 98 nn ta a 61 xung dy


mi v tng j ln 1, bin duyt k cng tng ln 1.
i

17

32

49

98

06

25

53

61

k
06

17

25

32

49

53

61

Bc 8: Bin duyt j duyt ht dy th 2. Khi , ta tin hnh a ton b phn cn li


ca dy 1 xung dy mi.
i

17

32

49

98

j
06

25

53

61

k
06

17

25

32

49

53

61

98

Nh vy, ta c dy mi l dy sp, bao gm cc phn t ca 2 dy ban u.


Th tc tin hnh trn 2 dy sp nh sau:
void merge(int *c, int cl, int *a, int al, int ar, int *b, int
bl, int br){
int i=al, j=bl, k;
for (k=cl; k< cl+ar-al+br-bl+1; k++){
if (i>ar){
c[k]=b[j++];

107

continue;
}
if (j>br){
c[k]=a[i++];
continue;
}
if (a[i]<b[j]) c[k]=a[i++];
else c[k]=b[j++];
}
}

Th tc ny tin hnh trn 2 dy a v b, vi cc ch s u v cui tng ng l al, ar, bl,


br. Kt qu trn c lu trong mng c, c ch s u l cl.
Tuy nhin, ta thy rng thc hin sp xp trn th 2 dy c trn khng phi l 2 dy
ring bit, m nm trn cng 1 mng. Hay ni cch khc l ta trn 2 phn ca 1 dy ch khng
phi 2 dy ring bit a v b nh trong th tc trn. Ngoi ra, kt qu trn li c lu ngay ti dy
ban u ch khng lu ra mt dy c khc.
Do vy, ta phi ci tin th tc trn thc hin trn 2 phn ca 1 dy v kt qu trn c
lu li ngay trn dy .
void merge(int *a, int al, int am, int ar){
int i=al, j=am+1, k;
for (k=al; k<=ar; k++){
if (i>am){
c[k]=a[j++];
continue;
}
if (j>ar){
c[k]=a[i++];
continue;
}
if (a[i]<a[j]) c[k]=a[i++];
else c[k]=a[j++];
}
for (k=al; k<=ar; k++) a[k]=c[k];
}

Th tc ny tin hnh trn 2 phn ca dy a. Phn u c ch s t al n am, phn sau c


ch s t am+1 n ar. Ta dng 1 mng tm c lu kt qu trn, sau sao chp li kt qu vo
mng ban u a.
7.5.3

Sp xp trn

108

tin hnh sp xp trn, u tin ta coi cc phn t ca dy nh cc dy con 1 phn t.


Tin hnh trn tng cp 2 dy con ny c cc dy con c sp gm 2 phn t. Tip tc tin
hnh trn tng cp dy con 2 phn t sp to thnh cc dy con c sp gm 4 phn t v.v.
Qu trnh lp li cho ti khi ton b dy c sp.
Ta xt qu trnh sp xp trn vi dy phn trc.
32

17

49

98

06

25

53

61

u tin, coi mi phn t ca dy nh 1 dy con sp gm 1 phn t. Tin hnh trn tng


cp dy con 1 phn t vi nhau:
32

17

49

98

06

25

53

61

Sau bc ny ta c cc dy con sp gm 2 phn t. Tin hnh trn cc cp dy con


sp gm 2 phn t to thnh dy con c sp gm 4 phn t.
17

32

49

98

06

25

53

61

Sau bc ny ta c cc dy con sp gm 4 phn t. Tin hnh trn 2 dy con sp


gm 4 phn t.
17

32

49

98

06

25

53

61

49

53

61

98

Cui cng, ta c ton b dy c sp:


06

17

25

32

Ci t cho thut ton merge_sort bng qui nh sau :


void merge_sort(int *a, int left, int right){
int middle;
if (right<=left) return;
middle=(right+left)/2;
merge_sort(a, left, middle);
merge_sort(a, middle+1, right);
merge(a, left, middle ,right);
}

109

Trong th tc ny, u tin ta tin hnh chia dy cn sp lm 2 na, sau thc hin li gi
qui merge_sort cho mi na dy. Hai li gi qui ny m bo rng mi na dy ny s c
sp. Cui cng, th tc merge c gi trn 2 na dy sp ny.
7.6 BI TON TM KIM
Tm kim l mt thao tc rt quan trng i vi nhiu ng dng tin hc. Tm kim c th
nh ngha l vic thu thp mt s thng tin no t mt khi thng tin ln c lu tr
trc . Thng tin khi lu tr thng c chia thnh cc bn ghi, mi bn ghi c mt gi tr
kho phc v cho mc ch tm kim. Mc tiu ca vic tm kim l tm tt c cc bn ghi c
gi tr kho trng vi mt gi tr cho trc. Khi tm c bn ghi ny, cc thng tin i km trong
bn ghi s c thu thp v x l.
Mt v d v ng dng thc tin ca tm kim l t in my tnh. Trong t in c rt
nhiu mc t, kho ca mi mc t chnh l cch vit ca t. Thng tin i km l nh ngha ca
t, cch pht m, cc thng tin khc nh loi t, t ng ngha, khc ngha v.v. Ngoi ra cn rt
nhiu v d khc v ng dng ca tm kim, chng hn mt ngn hng lu tr cc bn ghi thng
tin v khch hng v mun tm trong danh sch ny mt bn ghi ca mt khch hng no
kim tra s d v thc hin cc giao dch, hoc mt chng trnh tm kim duyt qua cc tp vn
bn trn my tnh tm cc vn bn c cha cc t kho no .
Trong phn tio theo, chng ta s xem xt 2 phng php tm kim ph bin nht, l tm
kim tun t v tm kim nh phn.
7.7 TM KIM TUN T
Tm kim tun t l mt phng php tm kim rt n gin, ln lt duyt qua ton b cc
bn ghi mt cch tun t. Ti mi bc, kho ca bn ghi s c so snh vi gi tr cn tm. Qu
trnh tm kim kt thc khi tm thy bn ghi c kho tho mn hoc duyt ht danh sch.
Th tc tm kim tun t trn mt mng cc s nguyn nh sau:
int sequential_search(int *a, int x, int n){
int i;
for (i=0; i<n ; i ++){
if (a[i] == X)
return(i);
}
return(-1);
}

Th tc ny tin hnh duyt t u mng. Nu ti v tr no , gi tr phn t bng vi gi


tr cn tm th hm tr v ch s tng ng ca phn t trong mng. Nu khng tm thy gi tr
trong ton b mng th hm tr v gi tr -1.
Thut ton tm kim tun t c thi gian thc hin l O(n). Trong trng hp xu nht,
thut ton mt n ln thc hin so snh v mt khong n/2 ln so snh trong trng hp trung bnh.
7.8 TM KIM NH PHN
Trong trng hp s bn ghi cn tm rt ln, vic tm kim tun t c th l 1 gii php
khng hiu qu v mt thi gian. Mt gii php tm kim khc hiu qu hn c th c s dng
110

da trn m hnh chia tr nh sau: Chia tp cn tm lm 2 na, xc nh na cha bn ghi cn


tm v tp trung tm kim trn na .
lm c iu ny, tp cc phn t cn phi c sp, v s dng ch s ca mng
xc nh na cn tm. u tin, so snh gi tr cn tm vi gi tr ca phn t gia. Nu n nh
hn, tin hnh tm na u dy, ngc li, tin hnh tm na sau ca dy. Qa trnh c lp
li tng t cho na dy va c xc nh ny.
Hm tm kim nh phn c ci t nh sau (gi s dy a c sp):
int binary_search(int *a, int x){
int k, left =0, right=n-1;
do{
k=(left+right)/2;
if (x<a[k]) right=k-1;
else l=k+1;
}while ((x!=a[k]) && (left<=right))
if (x=a[k]) return k;
else return -1;
}

Trong th tc ny, x l gi tr cn tm trong dy a. Hai bin left v right dng gii hn


phn on ca mng m qu trnh tm kim s c thc hin trong mi bc. u tin 2 bin
ny c gn gi tr 0 v n-1, tc l ton b mng s c tm kim.
Ti mi bc, bin k s c gn cho ch s gia ca on ang c tin hnh tm kim.
Nu gi tr x nh hn gi tr phn t ti k, bin right s c gn bng k-1, cho bit qu trnh tm
ti bc sau s c thc hin trong na u ca on. Ngc li, gi tr left c gn bng k+1,
cho bit qu trnh tm ti bc sau s c thc hin trong na sau ca on.
06

17

25

32

49

53

61

98

Xt 1 v d vi dy sp trn, tm kim gi tr 61 trong dy, ta tin hnh cc bc


nh sau:
Bc 1: Phn chia dy lm 2 na, vi ch s phn cch l 3.
0

06

17

25

32

49

53

61

98

Gi tr phn t ti ch s ny l 32, nh hn gi tr cn tm l 61. Do vy, tin hnh tm kim


phn t ti na sau ca dy.
Bc 2: Tip tc phn chia on cn tm lm 2 na, vi ch s phn cch l 5.

111

49

53

61

98

Gi tr phn t ti ch s ny l 53, nh hn gi tr cn tm l 61. Do vy, tin hnh tm kim


phn t ti na sau ca on.
Bc 3: Tip tc phn chia on, vi ch s phn cch l 6.
6

61

98

Gi tr phn t ti ch s ny l 61, bng gi tr cn tm. Do vy, qu trnh tm kim kt thc,


ch s cn tm l 6.
Thut ton tm kim nh phn c thi gian thc hin l lgN. Tuy nhin, thut ton i hi
dy c sp trc khi tin hnh tm kim. Do vy, nn p dng tm kim nh phn khi vic
tm kim phi thc hin nhiu ln trn 1 tp phn t cho trc. Khi , ta ch cn tin hnh sp tp
phn t 1 ln v thc hin tm kim nhiu ln trn tp phn t sp ny.
7.9 CY NH PHN TM KIM
Tm kim bng cy nh phn l mt phng php tm kim rt hiu qu v c xem nh l
mt trong nhng thut ton c s ca khoa hc my tnh. y cng l mt phng php n gin
v c la chn p dng trong rt nhiu tnh hung thc t.
tng c bn ca phng php ny l xy dng mt cy nh phn tm kim. l mt
cy nh phn c tnh cht sau: Vi mi nt ca cy, kho ca cc nt ca cy con bn tri bao gi
cng nh hn v kho ca cc nt ca cy con bn phi bao gi cng ln hn hoc bng kho ca
nt .
Nh vy, trong mt cy nh phn tm kim th tt c cc cy con ca n u tho mn tnh
cht nh vy.

49
61

25
17

32

53

98

06
Hnh 7.2 V d v cy nh phn tm kim
7.9.1

Tm kim trn cy nh phn tm kim

112

Vic tin hnh tm kim trn cy nh phn tm kim cng tng t nh phng php tm
kim nh phn ni trn. tm mt nt c kho l x, u tin tin hnh so snh n vi kho
ca nt gc. Nu nh hn, tin hnh tm kim cy con bn tri, nu bng nhau th dng qu
trnh tm kim, v nu ln hn th tin hnh tm kim cy con bn phi. Qu trnh tm kim trn
cy con li c lp li tng t.
Ti mi bc, ta loi b c mt phn ca cy m chc chn l khng cha nt c kho
cn tm. Phm vi tm kim lun c thu hp li v qu trnh tm kim kt thc khi gp c nt
c kho cn tm hoc khng c nt no nh vy (c ngha l cy con tm l cy rng).
struct node {
int item;
struct node *left;
struct node *right;
}
typedef struct node *treenode;
treenode tree_search(int x, treenode root){
int found=0;
treenode temp=root;
while (temp!=NULL){
if (x < temp.item) temp=temp.left;
elseif (x > temp.item)temp=temp.right;
else break;
}
return temp;
}
Xt cy nh phn tm kim nh hnh 7.2. Gi s ta cn tm nt 32 trn cy ny. Qu trnh
tm kim nh sau:
Bc 1: So snh 32 vi nt gc l 49. Do 32 nh hn 49 nn tin hnh tm kim cy con
bn tri.
49
61

25
17

32

53

98

06

Bc 2: So snh 32 vi nt gc ca cy tm kim hin ti l 25. Do 32 ln hn 25 nn tin


hnh tm kim cy con bn phi.

113

25
17

32

06
Bc 3: So snh 32 vi nt gc ca cy tm kim hin ti cng l 32. Do 2 gi tr bng nhau
nn qu trnh tm kim kt thc thnh cng.
Nh vy, ch sau 3 php so snh, thao tc tm kim trong 1 danh sch gm 7 phn t kt
thc v cho kt qu.
7.9.2

Chn mt phn t vo cy nh phn tm kim

chn mt phn t vo cy nh phn tm kim, u tin tin hnh qu trnh tm kim nt


cn chn trong cy theo cc bc nh ni trn. Nu tm thy nt trong cy, c ngha l cy
tn ti mt nt c kho bng nt cn chn v vic chn thm nt ny vo cy l khng hp l. Nu
khng tm thy nt trong cy th qa trnh tm kt thc khng thnh cng v ta tin hnh chn nt
vo im kt thc ca qu trnh tm kim.
void tree_insert(int x, treenode *root){
treenode p;
p = (treenode) malloc (sizeof(struct node));
p.item=x;
p.left=p.right=NULL;
if (root==NULL)
root=p;
else if (x < root->item)
tree_insert(x, root->left)
else
tree_insert(x, root->right)
}
}

Th tc trn l mt th tc qui. chn 1 phn t x l cy c gc l root. Tin hnh so


snh x vi kho ca gc. Nu n nh hn kho ca gc th tin hnh chn vo cy con bn tri,
ngc li chn vo cy con bn phi.
49
61

25
17

32

53

98

06
114

Xt cy nh phn hnh 7.2 tin hnh chn nt c kho l 30 vo cy, ta tin hnh cc
bc nh sau:
Bc 1: So snh 30 vi kho nt gc l 49. Do 30 nh hn 49 nn tin hnh chn 30 vo
cy con bn tri.
49
61

25
17

98

53

32

06

Bc 2: So snh 30 vi kho nt gc ca cy hin ti l 25. Do 30 ln hn 25 nn tin hnh


chn 30 vo cy con bn phi.
49
61

25
17

98

53

32

06
Bc 3: So snh 30 vi kho nt gc ca cy hin ti l 32. Do 30 nh hn 32 nn tin hnh
chn 30 vo cy con bn tri.
49
61

25
17

32

53

98

06

Bc 4: Do cy hin ti l rng, do vy chnh l v tr nt mi cn chn.


115

49
61

25
17

06

32

53

98

30

T th tc chn mt nt vo cy nh phn tm kim trn, ta c th tc to cy nh phn tm


kim t mt mng cho trc nh sau (cho trc 1 mng a gm n phn t):
void tree_creation(treenode *root){
int i;
for (i=0; i<n; i++) tree_insert(a[i], root);
}
7.9.3

Xo mt nt khi cy nh phn tm kim


xo mt nt khi cy nh phn, ta xt cc trng hp sau:
-

Xo 1 nt l: Tho tc xo 1 nt khng c nt con no l trng hp n gin nht. Ch


cn tin hnh loi b nt ra khi cy.

Xo nt c 1 nt con: Tin hnh loi b nt khi cy v thay n bng nt con.

Xo nt c 2 nt con: Tin hnh loi b nt v thay th n bng nt con ngoi cng bn


tri ca cy con bn phi hoc nt con ngoi cng bn phi ca cy con bn tri.

7.10

TM TT CHNG 5
-

Sp xp l qu trnh b tr li cc phn t ca 1 tp hp theo th t no i vi 1 tiu


ch no .

Cc gii thut sp xp n gin d dng trong vic ci t nhng thi gian thc hin ln.

Cc gii thut sp xp phc tp ci t kh khn hn nhng c thi gian chy nhanh


hn.

Cc gii thut sp xp n gin c thi gian thc hin l O(N2) trong khi cc gii thut
sp xp phc tp c thi gian thc hin l O(NlogN).

116

7.11

Quick sort l gii thut sp xp da trn phng php chia tr: Chia dy cn sp
thnh 2 phn, sau thc hin vic sp xp cho mi phn c lp vi nhau. Cc phn t
trong 1 phn lun nh hn 1 gi tr kho, cn cc phn t trong phn cn li lun ln
hn gi tr kho.

Heap sort l 1 gii thut sp xp da trn heap. l mt cy nh phn hon chnh c


tnh cht kho ca nt cha bao gi cng ln hn kho ca cc nt con. Qu trnh sp xp
s i ch nt gc ca heap cho nt cui, chnh li heap v li lp li qa trnh cho ti
khi dy c sp hon ton.

Sp xp trn l phng php sp xp da trn vic trn 2 danh sch sp thnh 1 danh
sch cng c sp. Qu trnh sp xp s trn tng cp 2 dy con 1 phn t k nhau
to thnh cc dy con 2 phn t c sp. Cc dy con 2 phn t c sp ny li c
trn vi nhau to thnh dy con 4 phn t c sp. Qu trnh tip tc n khi ton b
dy c sp.

Tm kim l vic thu thp mt s thng tin no t mt khi thng tin ln c lu


tr trc .

Tm kim tun t ln lt duyt qua ton b cc bn ghi mt cch tun t. Ti mi


bc, kho ca bn ghi s c so snh vi gi tr cn tm. Qu trnh tm kim kt thc
khi tm thy bn ghi c kho tho mn hoc duyt ht danh sch.

Tm kim nh phn s dng phng php chia tr: Chia tp cn tm lm 2 na, xc


nh na cha bn ghi cn tm v tp trung tm kim trn na .

Cy nh phn tm kim l cy nh phn c tnh cht sau: Vi mi nt ca cy, kho ca


cc nt ca cy con bn tri bao gi cng nh hn v kho ca cc nt ca cy con bn
phi bao gi cng ln hn hoc bng kho ca nt .

Qu trnh tm kim trn cy nh phn tm kim nh sau: tm mt nt c kho l x,


u tin tin hnh so snh n vi kho ca nt gc. Nu nh hn, tin hnh tm kim
cy con bn tri, nu bng nhau th dng qu trnh tm kim, v nu ln hn th tin
hnh tm kim cy con bn phi. Qu trnh tm kim trn cy con li c lp li
tng t.
CU HI V BI TP

1. Cho dy s:
15

37

12

58

07

24

67

Nu cc bc trong qu trnh thc hin sp xp chn, sp xp chn, v sp xp ni


bt cho dy trn.

Vi cch chn kho l phn t u tin, nu cc bc trong qu trnh phn chia dy


lm 2 na vi tnh cht nh trong gii thut Quick sort.

Nu cc bc to heap t dy s trn.

Nu cc bc trong qu trnh sp xp trn cho dy s trn.

Nu cc bc trong qu trnh to cy nh phn tm kim t dy trn. Tin hnh cc


bc tm phn t 07 trong cy.

2. Hon thin m ngun v tin hnh chy cho ra kt qu tt c cc thut ton sp xp c


trnh by trong ti liu.
117

Ph lc 1

HNG DN GII BI TP
CHNG I
1. Sinh vin t gii.
2. Bi ton c th c thit k tng t nh bi ton nt giao thng, s dng thut ton
tham n. Khi , xem mi cp cha u nh l 1 nt ca th v nu 2 cp c th u
trong cng 1 tun th tn ti 1 cnh ni 2 nt tng ng, ngc li khng tn ti
cnh.Tin hnh t mu cho th ny v s mu c t chnh l s tun cn tnh.
3. Sinh vin t gii.
4. Sinh vin t gii.
5. Sinh vin t gii.
6. Sinh vin t gii.
CHNG II
1. Sinh vin t tm kim cc v d v qui trong thc t
2. Sinh vin t gii.
3. Sinh vin t gii.
4. vit chng trnh tnh tng cc s l t 1 n 2n+1, s dng cng thc qui:
tong (2*n+1) = 2*n+1 + tong(2*n-1)

5. Sinh vin t gii.


6. Lm tng t nh bi M i tun.
CHNG III
1. Sinh vin t gii.
2. Sinh vin t gii.
3. Sinh vin t gii.
4. in ra tt c cc phn t ca danh sch, tin hnh duyt t u n cui danh sch. Ti
mi v tr, tin hnh thao tc in gi tr thng tin ca nt.
5. sp xp cc phn t trong mt danh sch c th s dng mt trong cc thut ton
c trnh by chng 7. Tuy nhin, i ch cho 2 phn t trong danh sch, ta
khng cn i ch c nt, m ch cn i gi tr bin item ca mi nt.
6. vit chng trnh cng 2 a thc c biu din thng qua danh sch lin kt, ta cn
s dng mt danh sch lin kt th 3 cha a thc tng. S dng 2 bin duyt duyt
t u mi danh sch, nu trng bc th tin hnh cng 2 h s v a kt qu xung
danh sch tng. Nu khng trng bc th tin hnh a h s ca phn t c bc b hn
xung danh sch tng, chuyn con tr tng ng n phn t tip theo v lp li qu
trnh.
118

7. Tham kho m ngun ti ph lc 2.


CHNG IV
1. Sinh vin t gii.
2. Sinh vin t gii.
3. Sinh vin t gii.
4. Sinh vin t gii.
5. Sinh vin t gii.
6. Thun ton i s nguyn t h thp phn sang h nh phn s dng ngn xp nh sau:
1) Chia s thp phn cho 2.
2) Ly s d a vo ngn xp.
3) Nu thng = 0 th dng
4) Nu thng ln hn 0 th gn s bng thng v quay li bc 1
5) Ln lt ly cc s lu trong ngn xp hin th ra mn hnh, chnh l dng nh
phn ca s ban u.
7. Sinh vin t gii.
8. Tham kho m ngun ti ph lc 2.
9. Tham kho m ngun ti ph lc 2.
CHNG V
1. Sinh vin t gii.
2. Sinh vin t gii.
3. Sinh vin t gii.
4. Sinh vin t gii.
5. Sinh vin t gii.
CHNG VI
1. Sinh vin t gii.
2. Sinh vin t gii.
3. Sinh vin t gii.
4. Sinh vin t gii.
5. Sinh vin t gii.
CHNG VII
1. Sinh vin t gii.
2. Tham kho m ngun ti ph lc 2.

119

Ph lc 2

M NGUN THAM KHO


DANH SCH LIN KT N
#include<stdio.h>
#include<conio.h>
struct node{
int item;
struct node *next;
};
typedef struct node *listnode;
void Insert_Begin(listnode *p, int x);
void Insert_End(listnode *p, int x);
void PrintList(listnode p);
void Insert_Begin(listnode *p, int x){
listnode q;
q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q-> next = *p;
*p = q;
printf("\nThem nut vao dau danh sach thanh cong, bam phim bat
ky de tiep tuc!");
getch();
}
void Insert_End(listnode *p, int x){
listnode q, r;
q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q->next=NULL;
if (*p==NULL) *p=q;
else{
r = *p;
while (r->next != NULL) r = r->next;
r->next = q;

120

}
printf("\nThem nut vao cuoi danh sach thanh cong, bam phim bat
ky de tiep tuc!");
getch();
}
void Insert_Middle(listnode *p, int position, int x){
int count=1, found=0;
listnode q, r;
r = *p;
while ((r != NULL)&&(found==0)){
if (count == position){
q = (listnode)malloc(sizeof(struct node));
q-> item = x;
q-> next = r-> next;
r-> next = q;
found = 1;
}
count ++;
r = r-> next;
}
if (found==0)
printf("Khong tim thay vi tri can chen !");
else
printf("\nThem nut vao vi tri %d thanh cong, bam phim bat
ky de tiep tuc!", position);
getch();
}
void Remove_Begin(listnode *p){
listnode q;
if (*p == NULL) return;
q = *p;
*p = (*p)-> next;
q-> next = NULL;
free(q);
printf("\nXoa nut dau danh sach thanh cong, bam phim bat ky de
tiep tuc!");
getch();
}
void Remove_End(listnode *p){
listnode q, r;

121

if (*p == NULL) return;


if ((*p)-> next == NULL){
Remove_Begin(*p);
return;
}
r = *p;
while (r-> next != NULL){
q = r;
r = r-> next;
}
q-> next = NULL;
free(r);
printf("\nXoa nut cuoi danh sach thanh cong, bam phim bat ky de
tiep tuc!");
getch();
}
void Remove_Middle(listnode *p, int position){
int count=1, found=0;
listnode q, r;
r = *p;
while ((r != NULL)&&(found==0)){
if (count == position){
q = r-> next;
r-> next = q-> next;
q-> next = NULL;
free (q);
found = 1;
}
count ++;
r = r-> next;
}
if (found==0)
printf("Khong tim thay vi tri can xoa !");
else
printf("\nXoa nut o vi tri %d thanh cong, bam phim bat ky
de tiep tuc!", position);
getch();
}
void PrintList(listnode p){
listnode q;
q=p;

122

while (q!=NULL){
printf("%d ",q->item);
q=q->next;
}
printf("\nBam phim bat ky de tiep tuc");
getch();
}
void main(void){
listnode *p;
int x, chon, vitri;
*p=NULL;
do{
clrscr();
printf("CHUWONG TRINH MINH HOA SU DUNG DANH SACH LIEN KET
DON\n\n");
printf("Moi ban chon chuc nang:\n");
printf("

1. Khoi tao danh sach\n");

printf("

2. Them phan tu vao dau danh sach\n");

printf("

3. Them phan tu vao cuoi danh sach\n");

printf("

4. Them phan tu va giua danh sach\n");

printf("

5. Xoa phan tu o dau danh sach\n");

printf("

6. Xoa phan tu o cuoi danh sach\n");

printf("

7. xoa phan tu o giua danh sach\n");

printf("

8. In danh sach\n");

printf("

9. Thoat khoi chuong trinh\n");

printf("Lua chon: ");


scanf("%d",&chon);
switch (chon) {
case 1:
*p=NULL;
break;
case 2:
clrscr();
printf("Cho x= ");
scanf("%d",&x);
Insert_Begin(p, x);
break;
case 3:
clrscr();
printf("Cho x= ");

123

scanf("%d",&x);
Insert_End(p, x);
break;
case 4:
clrscr();
printf("Cho vi tri can chen: ");
scanf("%d",&vitri);
printf("\nCho x= ");
scanf("%d",&x);
Insert_Middle(p, vitri, x);
break;
case 5:
clrscr();
Remove_Begin(p);
break;
case 6:
clrscr();
Remove_End(p);
break;
case 7:
clrscr();
printf("Cho vi tri can xoa: ");
scanf("%d",&vitri);
Remove_Middle(p,vitri);
break;
case 8:
PrintList(*p);
break;
default:
break;
}
}while (chon!=9);
return;
}

CI T NGN XP BNG MNG


#include<stdio.h>
#include<conio.h>
#define MAX 100

124

typedef struct {
int top;
int nut[MAX];
}stack;
void StackInitialize(stack *s);
int StackEmpty(stack s);
int StackFull(stack s);
void Push(stack *s, int x);
int Pop(stack *s);
void StackInitialize(stack *s){
s->top=-1;
return;
}
int StackEmpty(stack s){
return (s.top ==-1);
}
int StackFull(stack s){
return (s.top==MAX-1);
}
void Push(stack *s, int x){
if (StackFull(*s)){
printf("Ngan xep day");
return;
}else{
s-> top ++;
s-> nut[s-> top] = x;
return;
}
}
int

Pop(stack *s){
if (StackEmpty(*s)){
printf("Ngan xep rong !");
}else{
return s-> nut[s-> top--];
}

CI T NGN XP BNG DANH SCH LIN KT


125

#include<stdio.h>
#include<conio.h>
struct node {
int item;
struct node *next;
};
typedef struct node *stacknode;
typedef struct {
stacknode top;
}stack;
void StackInitialize(stack *s){
s-> top = NULL;
return;
}
int

StackEmpty(stack s){
return (s.top == NULL);

}
void

Push(stack *s, int x){


stacknode p;
p = (stacknode) malloc (sizeof(struct node));
p-> item = x;
p-> next = s->top;
s->top = p;
return;

}
int

Pop(stack *s){
stacknode p;
if (StackEmpty(*s)){
printf("Ngan xep rong !");
}else{
p = s-> top;
s-> top = s-> top-> next;
return p->item;
}

126

CI T HNG I BNG MNG


#include<stdio.h>
#include<conio.h>
#define MAX 10
typedef struct

int

head, tail, count;

int

node[MAX];

} queue;
void QueueInitialize(queue *);
int QueueEmpty(queue);
void Put(queue *, int);
int Get(queue *);
void QueueInitialize(queue *q){
q-> head = 0;
q-> tail = MAX-1;
q-> count = 0;
return;
}
int QueueEmpty(queue q){
return (q.count <= 0);
}
void Put(queue *q, int x){
if (q->count >= MAX) printf("Hang doi day !\n");
else {
if (q->tail==MAX-1 ) q->tail=0;
else q->tail++;
q->node[q->tail]=x;
q->count++;
}
return;
}
int Get(queue *q){
int x;
if (QueueEmpty(*q)){

127

printf("Hang doi rong !");


}else{
x = q-> node[q-> head];
if (q->head==MAX-1 ) q->head=0;
else (q->head)++;
q-> count--;
}
return x;
}

CI T HNG I BNG DANH SCH LIN KT


#include<stdio.h>
#include<conio.h>
struct node {
int item;
struct node *next;
};
typedef struct node *queuenode;
typedef struct {
queuenode head;
queuenode tail;
}queue;
void QueueInitialize(queue *q){
q-> head = q-> tail = NULL;
return;
}
int

QueueEmpty(queue q){
return (q.head == NULL);

}
void

Put(queue *q, int x){


queuenode p;
p = (queuenode) malloc (sizeof(struct node));
p-> item = x;
p-> next = NULL;
q-> tail-> next = p;

128

q-> tail = q-> tail-> next;


if (q-> head == NULL) q-> head = q-> tail;
return;
}
int

Get(queue *q){
queuenode p;
if (QueueEmpty(*q)){
printf("Ngan xep rong !");
return 0;
}else{
p = q-> head;
q-> head = q-> head-> next;
return p->item;
}

CHNG TRNH SP XP CHN


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
int *a, n, m;
void selection_sort();
void Init();
void In();
void Init(){
int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void selection_sort(){

129

int i, j, k, temp;
for (i = 0; i< n; i++){
k = i;
for (j = i+1; j < n; j++){
if (a[j] < a[k]) k = j;
}
temp = a[i]; a[i] =a [k]; a[k] = temp;
}
}
void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
Init();
selection_sort();
printf("\n\n Day da sap: ");
In();
free(a);
}

CHNG TRNH SP XP CHN


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
int *a, n, m;
void Init();
void In();
void Init(){

130

int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void insertion_sort(){
int i, j, k, temp;
for (i = 1; i< n; i++){
temp = a[i];
j=i-1;
while ((a[j] > temp)&&(j>=0)) {
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
Init();
insertion_sort();
printf("\n\n Day da sap: ");
In();
free(a);
}

CHNG TRNH SP XP NI BT

131

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
int *a, n, m;
void Init();
void In();
void Init(){
int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void bubble_sort(){
int i, j, temp, no_exchange;
i = 1;
do{
no_exchange = 1;
for (j=n-1; j >= i; j--){
if (a[j-1] > a[j]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
no_exchange = 0;
}
}
i++;
} while (!no_exchange && (i < n-1));
}
void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);

132

printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
Init();
bubble_sort();
printf("\n\n Day da sap: ");
In();
free(a);
}

CHNG TRNH SP XP NHANH (QUICK SORT)


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
int *a, n, m;
void Init();
void In();
void Init(){
int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void quick(int left, int right) {
int i,j;
int x,y;
i=left; j=right;

133

x= a[left];
do {
while(a[i]<x && i<right) i++;
while(a[j]>x && j>left) j--;
if(i<=j){
y=a[i];a[i]=a[j];a[j]=y;
i++;j--;
}
}while (i<=j);
if (left<j) quick(left,j);
if (i<right) quick(i,right);
}
void quick_sort(){
quick(0, n-1);
}
void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
Init();
quick_sort();
printf("\n\n Day da sap: ");
In();
free(a);
}

CHNG TRNH SP XP VUN NG (HEAP SORT)


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>

134

#include<dos.h>
int *a, n, m;
void Init();
void In();
void Init(){
int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void upheap(int m){
int x;
x=a[m];
while ((a[(m-1)/2]<=x) && (m>0)){
a[m]=a[(m-1)/2];
m=(m-1)/2;
}
a[m]=x;
}
void insert_heap(int x){
a[m]=x;
upheap(m);
m++;
}
void downheap(int k){
int j, x;
x=a[k];
while (k<=(m-2)/2){
j=2*k+1;
if (j<m-1) if (a[j]<a[j+1]) j++;
if (x>=a[j]) break;
a[k]=a[j]; k=j;
}
a[k]=x;

135

}
int remove_node(){
int temp;
temp=a[0];
a[0]=a[m];
m--;
downheap(0);
return temp;
}
void heap_sort(){
int i;
m=0;
for (i=0; i<=n-1; i++) insert_heap(a[i]);
m=n-1;
for (i=n-1; i>=0; i--) a[i]=remove_node();
}

void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
Init();
heap_sort();
printf("\n\n Day da sap: ");
In();
free(a);
}

CHNG TRNH SP XP TRN (MERGE SORT)


#include<stdio.h>

136

#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#include<dos.h>
int *a, *c, n, m;
void Init();
void In();
void Init(){
int i;
printf("\n Tao lap day so:");
for (i=0; i<n;i++){
a[i]=random(100);
printf("%5d",a[i]);
}
delay(1000);
}
void merge2(int *c, int cl, int *a, int al, int ar, int *b, int bl,
int br){
int i=al, j=bl, k;
for (k=cl; k< cl+ar-al+br-bl+1; k++){
if (i>ar){
c[k]=b[j++];
continue;
}
if (j>br){
c[k]=a[i++];
continue;
}
if (a[i]<b[j]) c[k]=a[i++];
else c[k]=b[j++];
}
}
void merge(int *a, int al, int am, int ar){
int i=al, j=am+1, k;
for (k=al; k<=ar; k++){
if (i>am){
c[k]=a[j++];
continue;

137

}
if (j>ar){
c[k]=a[i++];
continue;
}
if (a[i]<a[j]) c[k]=a[i++];
else c[k]=a[j++];
}
for (k=al; k<=ar; k++) a[k]=c[k];
}
void merge_sort(int *a, int left, int right){
int middle;
if (right<=left) return;
middle=(right+left)/2;
merge_sort(a, left, middle);
merge_sort(a, middle+1, right);
merge(a, left, middle ,right);
}
void In(){
register int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
getch();
}
void main(void){
clrscr();
printf("\n Nhap n="); scanf("%d",&n);
a=(int *) malloc(n*sizeof(int));
c=(int *) malloc(n*sizeof(int));
Init();
merge_sort(a, 0, n-1);
printf("\n\n Day da sap: ");
In();
free(a);
}

138

TI LIU THAM KHO

[1] Aho, Hopcroft & Ullman, Data Structures and Algorithms,Addison Wesley, 2001.
[2] Robert Sedewick, Algorithms in Java Third Edition,Addison Wesley, 2002.
[3] Niklaus Wirth, Data Structures and Algorithms,Prentice Hall, 2004.
[4] Robert Sedewick, Algorithms,Addison Wesley, 1983.
[5] Bruno R. Preiss, Data Structures and Algorithms with Object-Oriented Design, Jon Wiley &
Sons, 1998.

139

MC LC

CHNG I: PHN TCH V THIT K GII THUT ................................................................. 1


1.1 GII THUT V NGN NG DIN T GII THUT ......................................................... 3
1.1.1 Gii thut ...................................................................................................................................... 3
1.1.2 Ngn ng din t gii thut v k thut tinh chnh tng bc ................................................... 8
1.2 PHN TCH THUT TON ....................................................................................................... 10
1.2.1 c lng thi gian thc hin chng trnh.............................................................................. 11
1.2.2 Tnh ton thi gian thc hin chng trnh................................................................................ 12
1.3 TM TT CHNG 1 ................................................................................................................ 13
1.4 CU HI V BI TP ............................................................................................................... 14
CHNG 2: QUI ........................................................................................................................ 14
2.1 KHI NIM.................................................................................................................................. 15
2.1.1 iu kin c th vit mt chng trnh qui ...................................................................... 16
2.1.2 Khi no khng nn s dng qui............................................................................................. 16
2.2 THIT K GII THUT QUI............................................................................................... 18
2.2.1 Chng trnh tnh hm n! ........................................................................................................... 18
2.2.2 Thut ton Euclid tnh c s chung ln nht ca 2 s nguyn dng...................................... 18
2.2.3 Cc gii thut qui dng chia tr (divide and conquer)....................................................... 19
2.2.4 Thut ton quay lui (backtracking algorithms) .......................................................................... 23
2.3 TM TT CHNG 2 ................................................................................................................ 31
2.4 CU HI V BI TP ............................................................................................................... 32
CHNG 3: MNG V DANH SCH LIN KT ........................................................................ 34
3.1 CU TRC D LIU KIU MNG (ARRAY) ........................................................................ 33
3.2 DANH SCH LIN KT............................................................................................................. 34
3.2.1 Khi nim ................................................................................................................................... 34
3.2.2 Cc thao tc c bn trn danh sch lin kt................................................................................ 35
3.2.3 Mt s dng khc ca danh sch lin kt ................................................................................... 44
3.3 TM TT CHNG 3 ................................................................................................................ 46
3.4 CU HI V BI TP ............................................................................................................... 46
CHNG 4: NGN XP V HNG I ....................................................................................... 49
4.1 NGN XP (STACK) .................................................................................................................. 47
4.1.1 Khi nim ................................................................................................................................... 47
4.1.2 Ci t ngn xp bng mng ...................................................................................................... 48
140

4.1.3 Ci t ngn xp bng danh sch lin kt................................................................................... 50


4.1.4 Mt s ng dng ca ngn xp................................................................................................... 53
4.2 HNG I (QUEUE) .................................................................................................................. 60
4.2.1 Khi nim ................................................................................................................................... 60
4.2.2 Ci t hng i bng mng ....................................................................................................... 61
4.2.3 Ci t hng i bng danh sch lin kt ................................................................................... 63
4.3 TM TT CHNG 4 ................................................................................................................ 65
4.4 CU HI V BI TP ............................................................................................................... 65
CHNG 5: CU TRC D LIU KIU CY ............................................................................. 70
5.1 KHI NIM.................................................................................................................................. 67
5.2 CI T CY ............................................................................................................................. 68
5.2.1 Ci t cy bng mng cc nt cha ............................................................................................ 68
5.2.2 Ci t cy thng qua danh sch cc nt con ............................................................................. 69
5.3 DUYT CY ................................................................................................................................ 70
5.3.1 Duyt cy th t trc................................................................................................................ 70
5.3.2 Duyt cy th t gia ................................................................................................................. 71
5.3.3 Duyt cy th t sau................................................................................................................... 71
5.4 CY NH PHN........................................................................................................................... 72
5.4.1 Ci t cy nh phn bng mng................................................................................................. 73
5.4.2 Ci t cy nh phn bng danh sch lin kt............................................................................. 73
5.4.3 Duyt cy nh phn..................................................................................................................... 74
5.5 TM TT CHNG 5 ................................................................................................................ 75
5.6 CU HI V BI TP ............................................................................................................... 75
CHNG 6: TH ......................................................................................................................... 80
6.1 CC KHI NIM C BN......................................................................................................... 77
6.1.1 th c hng.......................................................................................................................... 77
6.1.2 th v hng.......................................................................................................................... 78
6.1.3 th c trng s ....................................................................................................................... 78
6.2 BIU DIN TH..................................................................................................................... 79
6.2.1 Biu din th bng ma trn k................................................................................................ 79
6.2.2 Biu din th bng danh sch k ............................................................................................ 80
6.3 DUYT TH ........................................................................................................................... 81
6.3.1 Duyt theo chiu su .................................................................................................................. 81
6.3.2 Duyt theo chiu rng ................................................................................................................ 82
6.3.3 ng dng duyt th kim tra tnh lin thng..................................................................... 84
6.4 TM TT CHNG 6 ................................................................................................................ 85
141

6.5 CU HI V BI TP ............................................................................................................... 85
CHNG 7: SP XP V TM KIM ............................................................................................ 90
7.1 BI TON SP XP ................................................................................................................... 87
7.2 CC GII THUT SP XP N GIN ................................................................................. 88
7.2.1 Sp xp chn .............................................................................................................................. 88
7.2.2 Sp xp chn............................................................................................................................... 89
7.2.3 Sp xp ni bt........................................................................................................................... 91
7.3 QUICK SORT ............................................................................................................................... 94
7.3.1 Gii thiu.................................................................................................................................... 94
7.3.2 Cc bc thc hin gii thut..................................................................................................... 95
7.3.3 Ci t gii thut......................................................................................................................... 96
7.4 HEAP SORT ................................................................................................................................. 97
7.4.1 Gii thiu.................................................................................................................................... 97
7.4.2 Cc thut ton trn heap ............................................................................................................. 97
7.5 MERGE SORT (SP XP TRN) ............................................................................................ 105
7.5.1 Gii thiu.................................................................................................................................. 105
7.5.2 Trn 2 dy sp ..................................................................................................................... 105
7.5.3 Sp xp trn.............................................................................................................................. 108
7.6 BI TON TM KIM .............................................................................................................. 110
7.7 TM KIM TUN T................................................................................................................ 110
7.8 TM KIM NH PHN .............................................................................................................. 110
7.9 CY NH PHN TM KIM ..................................................................................................... 112
7.9.1 Tm kim trn cy nh phn tm kim ...................................................................................... 112
7.9.2 Chn mt phn t vo cy nh phn tm kim.......................................................................... 114
7.9.3 Xo mt nt khi cy nh phn tm kim ................................................................................. 116
7.10 TM TT CHNG 5 ............................................................................................................ 116
7.11 CU HI V BI TP ........................................................................................................... 117
PH LC I: HNG DN GII CU HI V BI TP .......................................................... 118
PH LC II: M NGUN THAM KHO ................................................................................... 120
TI LIU THAM KHO................................................................................................................. 139

142

HC VIN CNG NGH BU CHNH VIN THNG

CU TRC D LIU
V GII THUT
Bin son :

THS. DNG TRN C

CU TRC D LIU
V GII THUT
M s: 412CDG240
Chu trch nhim bn tho
TRUNG TM O TO BU CHNH VIN THNG 1

You might also like