Professional Documents
Culture Documents
Cấu trúc dữ liệu và giải thuật học viện bưu chính viễn thông
Cấu trúc dữ liệu và giải thuật học viện bưu chính viễn thông
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
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
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
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
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.
a) th ban u
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
AB
AC
AD
BA
BC
BD
DA
DB
DC
EA
EB
EC
ED
AB
AC
AD
BA
BC
BD
DA
DB
DC
EA
EB
EC
ED
Ng r
Xanh
BC, BD, EA
Lc
DA, DB
Vng
EB, EC
Bng 1.2 Bng tng hp mu
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
{
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;
}
}
T mu mi cho nh v;
a v vo tp Mau_moi;
}
}
}
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
D liu u vo
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
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:
-
13
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.
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
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
F(0) = 0
F(1) =1
4
3
2
1
2
1
1
0
2
1
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
18
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
Mi ln chuyn 1 a.
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
Chuyn a ln t cc A sang cc ch C.
Cc A
Cc B
Cc C
Cc A
Cc B
Cc C
Cc A
Cc B
Cc C
20
Cc A
Cc B
Cc C
sang
coc
%c
21
22
2.2.4
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
25
#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;
}
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
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).
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
32
CHNG 3
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
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
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
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.
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
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;
}
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
p
q
NULL
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;
}
}
NULL
NULL
NULL
38
NULL
NULL
NULL
39
p
- Ngt lin kt ca bin tm q vi nt tip theo, gii phng b nh cho q.
NULL
NULL
r
NULL
40
NULL
NULL
NULL
41
NULL
NULL
r
p
NULL
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 .
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
10
};
typedef struct node *listnode;
3.2.3
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
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.
3.3 TM TT CHNG 3
-
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
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
B
A
C
B
A
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
48
max
top
Phn t u tin
Phn t th 2
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
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
NULL
nh ngn xp
NULL
y ngn xp
nh ngn xp
NULL
y ngn xp
p
s
nh mi
NULL
y ngn xp
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.
53
}
int
StackEmpty(stack s){
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;
}
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.
-
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
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
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:
57
Ngn xp:
Bc 9: Gp du m ngoc, b qua.
Biu thc mi: 3 5 2 -
Ngn xp:
*
*
58
Ngn xp:
*
*
+
*
*
+
*
*
Ngn xp:
*
Khi nim
60
Cui hng
Khi thc hin lnh b sung phn t A, put(Q, A), hng i c dng:
u hng
Cui hng
Cui 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
u hng
4.2.2
Cui hng
Cui hng
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
62
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
64
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).
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 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
66
CHNG 5
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:
-
6
8
8 9
7 7
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
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:
-
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
Thm nt gc n.
...
70
Gc
1
2
7
8
Duyt cy th t gia
Qu trnh duyt cy th t gia c tin hnh theo trnh t nh sau:
-
Thm nt gc n.
...
6
8
3
4
7
9
Duyt cy th t sau
Qu trnh duyt cy th t sau c tin hnh theo trnh t nh sau:
-
...
Thm nt gc n.
71
Gc
1
2
6
8
3
4
7
9
1
2
4
3
5
23
9
31
15
87
22
20
12
8
30
25
15
37
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].
23
9
31
15
87
10
23
31
15
87
22
1
3
2
4
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
-
(2)
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.
V1 = {a, b, c, d}
E1 = {(a, b); (a, c}; (b, d); (c, b), (d, d)}
th v hng
V l mt tp hu hn cc nh.
V2 = {a, b, c, d}
th c trng s
78
40km
Bc Ninh
H Ni
Ninh Bnh
96km
115km
45km
Thi Bnh
Ai, j =
1 nu (vi, vj) E
0 nu (vi, vj) E
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
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
40km
Bc Ninh
H Ni
Ninh Bnh
96km
115km
45km
Thi Bnh
40 115 96
40
A3 =
115 45
96 45
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
NULL
NULL
NULL
NULL
6.3.2
82
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:
-
Thm nh v.
a 2 nh k vi a l b v c vo hng i.
b
a nh k vi b l d vo hng i
c
mi nh w k vi u {
if (daxet[w]=0 ) {
a w vo hng i;
daxet[w] = 1;
}
}
}
6.3.3
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
-
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
6.5 CU HI V BI TP
1. Cho bit biu din bng ma trn k v danh sch k ca th bn di:
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
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
17
49
98
32
25
17
49
98
32
25
53
61
53
61
53
61
17
25
98
32
49
17
25
32
98
49
88
17
25
32
49
98
53
61
98
61
61
98
17
25
32
49
53
17
25
32
49
53
Sp xp chn
89
06
17
49
98
17
49
98
17
32
49
98
17
49
98
06
25
53
61
17
49
98
sp
06
25
53
61
Cha sp
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
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
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
06
17
17
25
25
32
32
49
49
53
53
98
61
61
98
i++;
} until (no_exchange || (i == n-1));
}
Gii thiu
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
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
Ci t gii thut
96
void quick_sort(){
quick(0, n-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
97
98
53
49
17
32
25
06
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
17
49
98
06
25
53
61
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
32
49
17
32
98
32
17
32
17
Cy ny tho mn nh ngha heap.
100
98
49
32
17
06
98
32
49
17
25
06
98
32
49
17
53
25
06
98
53
49
17
06
Cy mi tho mn nh ngha heap.
25
32
101
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
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
17
49
32
25
06
49
17
06
25
32
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
17
j
32
49
98
06
25
53
61
k
06
105
17
32
j
49
98
06
25
53
61
k
06
17
17
32
j
49
98
06
25
53
61
k
06
17
25
32
49
j
98
06
25
53
61
k
06
17
25
32
17
32
49
98
06
25
53
61
k
06
17
25
32
49
106
17
32
49
98
06
25
53
61
k
06
17
25
32
49
53
17
32
49
98
06
25
53
61
k
06
17
25
32
49
53
61
17
32
49
98
j
06
25
53
61
k
06
17
25
32
49
53
61
98
107
continue;
}
if (j>br){
c[k]=a[i++];
continue;
}
if (a[i]<b[j]) c[k]=a[i++];
else c[k]=b[j++];
}
}
Sp xp trn
108
17
49
98
06
25
53
61
17
49
98
06
25
53
61
32
49
98
06
25
53
61
32
49
98
06
25
53
61
49
53
61
98
17
25
32
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);
}
17
25
32
49
53
61
98
06
17
25
32
49
53
61
98
111
49
53
61
98
61
98
49
61
25
17
32
53
98
06
Hnh 7.2 V d v cy nh phn tm kim
7.9.1
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
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
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
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
49
61
25
17
06
32
53
98
30
7.10
TM TT CHNG 5
-
Cc gii thut sp xp n gin d dng trong vic ci t nhng thi gian thc hin ln.
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.
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.
1. Cho dy s:
15
37
12
58
07
24
67
Nu cc bc to heap t dy s trn.
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)
119
Ph lc 2
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
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("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
8. In danh sach\n");
printf("
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;
}
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--];
}
#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
}
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
int
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
QueueEmpty(queue q){
return (q.head == NULL);
}
void
128
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;
}
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);
}
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);
}
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);
}
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);
}
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
[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
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
CU TRC D LIU
V GII THUT
Bin son :
CU TRC D LIU
V GII THUT
M s: 412CDG240
Chu trch nhim bn tho
TRUNG TM O TO BU CHNH VIN THNG 1