Professional Documents
Culture Documents
TRNG I HC HNG HI
B MN: KHOA HO C MA Y TI NH
KHOA: CNG NGH THNG TIN
BI GING
PHN TCH THIT K V NH GI
THUT TON
TN HC PHN : Phn tch thit k v nh gi thut ton
M HC PHN : 17208
TRNH O TO : I HC CHNH QUY
DNG CHO SV NGNH : CNG NGH THNG TIN
HI PHNG - 2010
i
Tn hc phn: Phn ti
ch thi t k va
nh gia
thu t toa
n Loi hc phn: 2
B mn ph trch ging dy: Khoa hc My tnh Khoa ph trch: CNTT
M hc phn: 17208 Tng s TC: 3
TS tit L thuyt Thc hnh/Xemina T hc Bi tp ln n mn hc
60 45 15 0 0 0
iu kin tin quyt:
Sinh vin phi hc xong cc hc phn sau mi c ng k hc phn ny:
Ky thut lp trinh, C u tru
c d
li u, Ton ri rac
Mc tiu ca hc phn:
- Cung cp cc kin thc c bn v thut ton, cu trc d liu.
- Cung c p ca
c ki n th
c v chi n l c xy d ng va
nh gia
thu t toa
n
- Rn luyn t duy khoa hc.
Ni dung ch yu
Gm 4 phn:
- Cc kin thc c bn v thut ton.
- Cc kin thc c bn v sp xp v tim kim d liu.
- Cc chin lc thi t k thu t toa
c c ba
n v a
nh gia
ph
c ta p thu t toa
n.
Ni dung chi tit ca hc phn:
TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
Chng I. Cc khi nim c bn 5 4 0 1 0
1.1. Gii thiu v thut ton
1.1.1 Khi nim v thut ton.
1.1.2. Cc phng php biu din thut ton
1.1.3. Cc v d biu din thut ton s khi
1.2. phc tap thut ton
1.2.1. Cc k hiu , hm nh gi phc tap
thu t toa
n
1.2.2. Cc lp thut ton
1.3. M i quan h gi
a c u tru
c d
li u va
gia
i
thu t
1.4. M t s vi
du
1
2
0,5
0,5
1
Chng II. S p x p va
ti
m ki m 15 7 5 2 1
2.1. Bi ton sp xp
2.1.1. S p x p trong
2.1.2. S p x p ngoa
i
2.1.3. a
nh gia
thu t toa
n s p x p
2.2. Cc thut ton sp xp c bn
2.2.1. S p x p cho n (Selection Sort)
2.2.2. S p x p i ch tr c ti p (Exchange Sort)
2.2.3. S p x p che
n (Insertion Sort)
2.2.4. S p x p n i bo t (Bubble Sort)
2.2.5. So sa
nh ca
c thu t toa
n s p x p c ba
n
0,5
3
2,5
1
ii
TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
2.3. S p x p vun ng
2.3.1. C u tru
c Heap
2.3.2. Thu t toa
n xy d ng c u tru
c Heap
2.3.3. Thu t toa
n s p x p vun ng
2.4. Tim kim tuyn tnh
2.4.1. Bi ton tim kim
2.4.2. Thu t toa
n ti
m ki m tuy n ti
nh
2,5
1
1,5
1
1
Chng III. qui va
chi n l c ve
t ca n 11 6 3 2 0
3.1. Khi nim v quy
3.1.1. Gii thut quy v th tc quy
3.1.2. Thit k gii thut quy
3.1.3. Hiu lc ca quy.
3.1.4. quy v quy nap ton hc.
3.2. Chi n l c ve
t ca n (Bruteforce)
3.3. Chi n l c qui quay lui (backtracking)
3.3.1. Vector nghi m
3.3.2. Th tc qui
3.3.3. Cc gi tr c
3.3.4. i u ki n ch p nh n
3.3.5. M t s ba
i toa
n backtracking i n hi
nh
1
0,5
1
1
1
0,5
1
1
2
1
1
Chng IV. Chi n l c chia tri 11 6 3 1 1
4.1. C s
cu
n s p x p b ng tr n
4.2.1. Thu t toa
n tr n hai Run
4.2.2. S p x p b ng tr n
4.3. S p x p nhanh (Quick sort)
4.3.1. Chi n l c phn hoa ch
4.3.2. Quick sort
4.4. Tim kim nh phn
4.5. Thu t ton nhn s nguyn
4.5.1. Thu t toa
n nhn tay
4.5.2. Thu t toa
n chia tri
4.6. M t s ba
i toa
n kha
c
0,5
1,5
1,5
1
1
0,5
1
1
1
1
Chng V. Qui hoa ch ng 12 6 3 2 1
5.1. Chi n l c qui hoa ch ng
5.1.1. Cc iu kin p dng
5.1.2. Cc bc trong qui hoach ng
5.1.3. Cc kiu qui hoach ng
5.2. Bi ton day s Fibonaci
5.2.1. Thu t toa
n qui
5.2.2. Thu t toa
n qui hoa ch ng
5.3. Bi ton day con chung di nht
5.4. Bi ton nhn ma trn
5.5. M t s vi
du kha
c
1,5
1
1
1,5
1
0,5
1
1
0,5
1
1
Chng VI. Chi n l c tham lam 6 4 1 1 0
6.1. Nguyn t c tham lam
6.2. Bi ton i tin
6.3. Bi ton sp lch cc s kin
6.3.1. Thu t toa
n qui
0,5
1
2
1
iii
TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
6.3.2. Thu t toa
i chi n l c
qui hoa ch ng
0,5
1
Nhim v ca sinh vin :
Tham d cc bui thuyt trinh ca gio vin, t hc, t lm bi tp do gio vin giao,
tham d cc bi kim tra nh k v cui k.
Ti liu hc tp :
- Nguyn Hu in, Gio trnh mt s vn v thut ton, NXB Gio dc,
2003
- inh Manh Tng. Cu trc d liu v thut ton. NXB ai hc Quc gia H
ni. 2002.
- Nguyn Quc Lng, Hong c Hi. Cu trc d liu + gii thut = chng
trnh. NXB Gio dc. 1996
- Richard Neapolitan v Kumarss Naimipour, Foundations of Algorithms Using
C++ Pseudocode, Third Edition, Jones and Bartlett Publishers, 2004.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein,
Introduction to Algorithms, Second Edition, MIT Press, 2001.
Hnh thc v tiu chun nh gi sinh vin:
- Hinh thc thi cui k : Thi vn p.
- Sinh vin phi m bo cc iu kin theo Quy ch ca Nh trng v ca B
Thang im: Thang im ch A, B, C, D, F
im nh gi hc phn: Z = 0,3X + 0,7Y.
Bi ging ny l ti liu chnh thc v thng nht ca B mn Khoa hc My tnh,
Khoa Cng ngh Thng tin v c dng ging day cho sinh vin.
Ngy ph duyt: / /20
Trng B mn: ThS. Nguyn Hu Tun (k v ghi r h tn)
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
iv
MC LC
LI NI U ............................................................................................................................ 1
CHNG I: CAC KHAI NIM C BN ................................................................................ 2
1. Thu t toa
a thu t toa
n ............................................................................................. 2
1.2. c trng ca thut ton ........................................................................................ 2
2. Bi u di n thu t toa
n ...................................................................................................... 2
2.1. M t cc bc thc hin ....................................................................................... 2
2.2. S dng s (lu ) gii thut (flowchart) ....................................................... 3
3. phc tap thut ton Algorithm Complexity .......................................................... 4
3.1. Cc tiu ch nh gi thut ton ............................................................................. 4
3.2. a
nh gia
th
c d
P X
ch thi t k va
nh gi gii thut
v
2.5. So snh cc thut ton sp xp c bn ................................................................. 23
3. C u tru
c d
c .......................................................................................................... 33
6. Bi tp ......................................................................................................................... 33
CHNG III: QUI V CHIN LC VET CN .......................................................... 34
1. Khi nim qui ..................................................................................................... 34
2. Chi n l c ve
N L C CHIA
TRI ......................................................................... 38
1. C s ca chin lc chia tri (Divide and Conquer) .......................................... 38
2. S p x p tr n (Merge sort)........................................................................................ 38
3. S p x p nhanh (Quick sort) ..................................................................................... 43
4. Tim kim nh phn .................................................................................................. 46
5. Bi tp ..................................................................................................................... 48
CHNG V: QUI HOA CH NG ........................................................................................ 49
1. Chin lc qui hoa ch ng ..................................................................................... 49
2. Bi ton 1: Day Fibonaci ......................................................................................... 49
3. Bi ton 2: Bi ton nhn day cc ma trn .............................................................. 51
4. Phng pha
ch thi t k va
nh gi gii thut
1
LI NI U
C u tru
c d
li u va
i nhau va
la
m t trong nh
ng li
nh v c nghin c
u lu
i cu
a khoa ho c ma
y ti
nh . H u h t
cc chng trinh c vit ra , chay trn my tnh , d ln hay nho, d n gin hay phc tap ,
u phi s dng cc cu trc d liu tun theo cc trinh t , cch thc lm vic no o, chnh
l cc gii thut . Vi c hi u bi t v ca
c thu t toa
khoa ho c ma
y ti
nh co
n n ta
ng ly
thuy t v
ng ch c , co nhiu
l a cho n hn trong vi c a ra ca
c gia
i pha
p cho ca
c ba
i toa
n th c t . Vi vy vic hc tp
mn ho c Phn ti
ch thi t k va
da
nh gia
gia
c d
li u va
gia
a ca
c ta
i li u cu
a ca
c ng nghi p ,
cc tc gi trong v ngoi nc , t
c kha
i ni m c ba
n s p x p , tim kim, cc
chi n l c thi t k thu t toa
u Tun
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
2
CHNG I: CC KHI NIM C BN
1. Thu t toa
a thu t toa
n
Co rt nhiu cc nh nghia cung nh cch pht biu khc nhau v nh nghia ca thut
ton. Theo nh cu n sa
ch gia
n l Introduction to
Algorithms (Second Edition cu
n la
m t thu
tc tnh ton xc nh (well-defined) nh n ca
c gia
tri ho c m t t p ca
c gia
tri go i la
input va
sinh ra ra m t va
i gia
tri ho c m t t p gia
tri c go i la
output.
Noi mt cch khc cc thut ton ging nh l cc cch thc , qui tri
nh hoa
n tha
nh
m t cng vi c cu th xa
m t ha
m
n gia
n c ng hai s cu
ng la
m t thu t toa
n hoa
n chi
nh , m c d o l mt thut ton n
gin.
1.2. c trng ca thut ton
Tnh ng n : Thu t toa
n c n pha
i a
m ba
o cho m t k t qua
ng sau khi th c hi n
i v
i ca
c b d
li u u va
o . y co
th no
i la
i m t thu t
ton.
Tnh dng: thu t toa
n c n pha
i a
m ba
o se
ng sau m t s h
u ha n b
c.
Tnh xc nh: Cc bc ca thut ton phi c pht biu ro rng , c th, trnh gy
nh p nh ng ho c nh m l n i v
i ng
i o c va
hi u, ci t thut ton.
Tnh hiu qu: thu t toa
n c xem la
hi u qua
n u nh no
co
kha
nng gia
i quy t hi u
qu bi ton t ra trong thi gian hoc cc iu kin cho phep trn thc t p n g c yu
c u cu
a ng
i du
ng.
Tnh ph qut : thu t toa
n c go i la
co
ti
nh ph qua
t (ph bi n) n u no
co
th gia
i
quy t c m t l
p ca
c ba
i toa
n tng t .
Ngoi ra mi thut ton theo nh nghia u nhn cc gi tr u vo c gi chung l
cc gi tr d liu Input. K t qua
cu
a thu t toa
n (th
ng la
m t k t qua
cu th na
o o
tu
y theo
cc bi ton v thut ton c th) c go i la
Output.
2. Bi u di n thu t toa
n
Thng c hai cch biu din mt thut ton, cch th nht l m t cc bc thc hin
ca thut ton, cch th hai l s dng s gii thut.
2.1. M t cc bc thc hin
biu din thut ton ngi ta m t chnh xc cc bc thc hin ca thut ton,
ngn ng dng m t thut ton c th l ngn ng t nhin hoc mt ngn ng lai ghp
gia ngn ng t nhin vi mt ngn ng lp trinh no o gi l cc oan gi m lnh.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
3
V d: m t thut ton tim c s chung ln nht ca hai s nguyn.
Input: Hai s nguyn a, b.
Output: c s chung ln nht ca a, b.
Thut ton:
B
c 1;
B
c 1;
2.2. S dng s (lu ) gii thut (flowchart)
M t trong nh
ng ca
ch ph bi n bi u di n thu t toa
n la
du ng s thu t toa
n
(Algorithm Flowchart).
S thu t toa
n s
du ng ca
c ky
hi u hi
nh kh i c ba
n ta o tha
nh m t m ta
mang
tnh hinh thc (cch ny ro rng hn so vi vic m t cc bc thc hin thut ton ) ca
thu t toa
n. Chng ta co th hinh dung vic s dng s gii thut m t thut ton ging
nh du
ng ca
c ba
n ve
m ta
c u tru
c cu
a ca
c to
a nha
.
Cc khi c bn ca mt s thut ton
Bt u
Kt thc
Nhp xut d liu
Cu lnh
iu kin
S
1
2
3
4
5
Kh i 1: Kh i b t u thu t toa
c thu t toa
n, co th co nhiu ng vo;
Khi 3: Th c hi n cu lnh (co th l mt hoc nhiu cu lnh); g m m t
ng va
o va
m t
ng ra;
Khi 4: R nhnh, ki m tra bi u th
c iu kin (bi u th
ng
thu t toa
n se
i theo nha
n se
i theo nha
nh Sai
(False).
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
4
Kh i 5: Cc cu lnh nhp v xut d liu.
3. phc tp thut ton Algorithm Complexity
3.1. Cc tiu ch nh gi thut ton
Thng thng nh gi mc tt, xu v so snh cc thut ton cng loai, c th
da trn hai tiu chu n:
+ Thu t toa
n n gia
n, d hi u, d ca
i t.
+ Da vo thi gian thc hin v ti nguyn m thut ton s dng thc hin trn cc
b d liu.
Trn thc t cc thut ton hiu qu th khng d hiu, cc ci t hiu qu cung khng
d dng thc hin v hiu c mt cch nhanh chng. V mt iu c v nghch l l cc
thut ton cng hiu qu th cng kh hiu, ci t cng phc tap lai cng hiu qu (khng
phi lc no cung ng). Vi th nh gi v so snh cc thut ton ngi ta thng da
trn phc tap v thi gian thc hin ca thut ton, gi l phc tap thut ton
(algorithm complexity). V bn cht phc tap thut ton l mt hm c lng (c th
khng chnh xc) s php tnh m thut ton cn thc hin (t o d dng suy ra thi gian
thc hin ca thut ton) i vi mt b d liu input co kch thc N. N c th l s phn t
ca mng trong trng hp bi ton sp xp hoc tm kim, hoc c th l ln ca s trong
bi ton kim tra s nguyn t chng han.
3.2. a
nh gia
th
ch thi t k va
nh gi gii thut
5
}
S php tnh thut ton cn thc hin c tnh nh sau:
(N-1) + (N-2) + + 2 + 1 = N*(N-1)/2.
Phn tch chi tit hn thi N*(N-1)/2 l s php ton so snh cn thc hin, cn s ln
thc hin i ch hai phn t (s nguyn) ti a ca thut ton l N.
Ci t ca thut ton sp xp i ch trc tip:
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[j] < a[i])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
Tng t i vi thut ton sp xp chn ta c s phe
p toa
n th c hi n la
: (N-1) + (N-2)
+ +2 +1 = N*(N-1)/2. Chi tit hn, N*(N-1)/2 l s ln so snh thut ton thc hin, v
cung l s ln i ch hai phn t (hai s nguyn) ti a ca thut ton.
Trong trng hp trung bnh, thut ton sp xp chn co xu hng tt hn so vi sp
xp i ch trc tip v s thao tc i ch t hn, cn trong trng hp tt nht thi nh nhau,
trng hp ti nht th chc chn thut toa
ca
c ha
m khng gia
m i nh nghi
a trn t p ca
: f la
O l
n cu
a g) n u nh t n ta i m t h ng s c va
N
0
:
0
; ( ) . ( ) N N f N c g N > <
Pht biu thnh li nh sau : f(N) l O(g(N)) n u t n ta i c sao cho h u h t ph n thi
ca hm f nm di phn th ca hm c *g. Ch l hm f tng nhiu nht l nhanh b ng
hm c*g.
Thay vi
no
c na
y khng co
ti
nh i x
ng co
nghi
a la
chu
ng ta co
th vi t ng c la i O(g(N)) = f(N)
nhng khng th suy ra g(N) = O(f(N)).
nh nghia trn c gi l k hiu O ln (big-O notation) v thng c s dng
chi nh cc chn trn ca hm tng.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
6
Ch ng ha n i v
i vi
m N
2
.
Ch rng thm ch hm f chnh xc co cng thc nh th no khng cho chng ta cu
tr li chnh xc ca cu hoi Chng trinh co th
i gian th c hi n la
bao lu trn ma
y ti
nh cu
a
ti?. Nhng i u quan tro ng la
qua o
chu
ng ta bi t c ha
m th
i gian th c hi n cu
a thu t
ton l hm bc hai . N u chu
ng ta tng ki
ch th
c input ln 2 l n, th
i gian th c hi n cu
a
chng tri
nh se
tng ln x p xi
o t c cu
a ma
y.
Ch n trn f(N) = O(N
2
) cho chu
ng ta k t qua
g n nh th no m bo rng tng ca
hm thi gian nhiu nht l bc hai.
Do o
chu
ng ta se
du ng ky
pha
p O l
n m ta
th
i gian th c hi n cu
a thu t toa
n
(v i khi c b nh m thut ton s dng). i vi thut ton trong v d 2 chng ta co th
noi phc tap thi gian ca thut ton l O(N
2
) ho c ng n gn l thut ton l O(N
2
).
Tng t chu
ng ta co
ca
c i nh nghi
a O
(omega)v O(theta):
Chng ta noi rng hm f(N) l O(g(N)) n u nh g(N) = O(f(N)), hay noi cch khc hm
f tng i
t nh t la
nhanh b ng ha
m g.
V noi rng hm f (N) l O(g(N)) n u nh f (N) = O(g(N)) v g(N) = O(f(N)), hay no
i
cch khc c hai hm xp xi nh nhau v tng.
Hi n nhin la
ca
i vi
du :
- 0.5N
2
0.5N = O(N2)
- 47 N*log(N) = O(N*log(N))
- N*log(N) + 1000047N = O(N*log(N))
- T t ca
ca
c ha
m a th
c b c k u la
O(N
k
)
- phc tap thi gian c a thut ton sp xp chn v sp xp i ch
tr c ti p l O(N
2
)
- N u m t thu t toa
n la
O(N
2
) thi no cung l O(N
5
)
- M i thu t toa
n s p x p d a trn so sa
nh co phc tap ti u l O
(N*log(N))
- Thu t toa
n s p x p MergeSort co
s thao ta
c so sa
nh la
N *log(N). Do
o
ph
c ta p th
i gian cu
a MergeSort la
i thu t toa
n s p x p t i u.
Khi xem xe
t so snh cc thut ton cng loai ngi ta thng xet phc tap ca thut
ton trong cc trng hp: trung bi
nh (average case), tr
ch thi t k va
nh gi gii thut
7
3.4. Cc lp thut ton
Khi chu
ng ta no
i v ph
c ta p th
cu
a m t thu t toa
n thay vi
dng cc k hiu hinh thc O(f(n)) chng ta co th n gin cp ti lp ca hm f . V d
f(N) = O(N) chng ta s noi thut ton l tuyn tnh (linear). Co th tham kho thm:
f(N) = 1: h ng s (constant)
f(N) = O(log(N)): logarit
f(N) = O(N): tuy n ti
nh (linear)
f(N) = O(N*log(N)): N log N
f(N) = O(N
2
): b c hai (quadratic)
f(N) = O(N
3
): b c 3 (cubic)
f(N) = O(N
k
) v
i k la
m t s nguyn dng: a th
c (polynomial)
f(N) = O(b
N
): hm mu (exponential)
i vi cc bi ton th phc tap O(V+E) co nghia l tuyn tnh i vi kch
th
c cu
a thi .
Xc nh thi gian thc hin t mt gii han tim cn
i vi hu ht cc thut ton chng ta co th gp cc hng s b che i bi cch vit O
ho c b th
ng la
kha
nho
. Chng ha n n u ph
c ta p thu t toa
n la
O(N
2
) thi chng ta s
mong mu n chi
nh xa
c ph
c ta p th
i gian la
10N
2
ch
khng pha
i la
10
7
N
2
.
Co nghia l nu hng s l ln thi thng l theo mt cch no o lin quan ti mt vi
h ng s cu
a ba
i toa
n. Trong tr
ng h p na
y t t nh t l gn cho hng o mt ci tn v a no
vo k hiu tim cn ca hng s o.
V d: bi ton m s ln xut hin ca mi k t trong mt xu co N k t . M t thu t
ton c bn l duyt qua ton b xu i vi m i ky
t th c hi n m xem ky
t o
xu t
hi n bao nhiu l n . Kch thc ca bng ch ci l c nh (nhi u nh t la
255 i v
i ngn
ng
l p tri
nh C) do o
thu t toa
n la
tuy n ti
nh i v
i N . Nhng se
la
t t hn n u vi t la
ph
c ta p cu
a thu t toa
n la
O(S*N) trong o
S la
s ph n t
cu
a ba
ng ch
ca
i s
du ng . (Ch
l co mt thut ton tt hn gii bi ton ny vi phc tap l O(S + N).
Trong cc cu c thi l p tri
nh m t thu t toa
a ma
n ra
ng bu c th
ch thi t k va
nh gi gii thut
8
O(N4) 90
O(2N) 20
O(N!) 11
Th
i gian th c hi n cu
a ca
c thu t toa
n co
ph
c ta p kha
c nhau
O(Log(N))
10
-7
giy
O(N)
10
-6
giy
O(N*Log(N))
10
-5
giy
O(N
2
)
10
-4
giy
O(N
6
)
3 pht
O(2
N
) 10
14
nm
O(N!) 10
142
nm
Chu v phn ti
ch thu t toa
n.
Thng th
ng khi chu
ng ta tri
nh ba
y m t thu t toa
n ca
ch t t nh t no
i v ph
c ta p
th
i gian cu
a no
la
du ng ca
ng ta hay du
ng ky
pha
p
big-O cc kiu khc khng co nhiu gi tr lm , vi cch ny rt d go v cung c nhiu
ng
i bi t n va
hi u ro
hn . Nhng
ng qun la
big-O la
ch n trn va
th
ng thi
chu
ng ta
s tim mt chn trn cng nho cng t t.
V d: Cho m t ma
ng a
i r ng thu t toa
n trn la
O(N
2
): vng lp while bn trong c gi n N
l n, m i l n tng j ln t i a N l n . Nhng m t phn ti
ch t t hn se
cho chu
ng ta th y r ng
thut ton l O(N) vi trong c thi gian thc hin ca thut ton lnh tng j khng chay nhiu
hn N l n.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
9
N u chu
ng ta no
i r ng thu t toa
n la
O(N
2
) chng ta vn ng nhng nu noi l thut
ton l O(N) thi chng ta a a ra c thng tin chi
nh xa
c hn v thu t toa
n.
4. C u tru
c d
li u Data structure
Niklaus Wirth, mt lp trnh vin v nh khoa hc my tnh, ngi pht minh ra ngn
ng lp trinh Pascal a tng ni mt cu ni ni ting trong linh vc lp trinh: Chng trinh
(Programs) = Cu trc d liu (Data Structures) + Gii thut (Algorithms). Cu ni ny ni
ln bn cht ca vic lp trinh l i tim mt cu trc d liu ph hp biu din d liu ca
bi ton v t o xy dng gii thut ph hp vi cu trc d liu a chn. Ngy nay vi s
pht trin ca cc ky thut lp trnh, cu ni ca Wirth khng hn cn ng tuyt i na
nhng no vn phn nh s gn kt v tm quan trng ca cc cu trc d liu v gii thut.
Cu trc d liu c s dng biu din d liu cn cc gii thut c s dng thc
hin cc thao tc trn cc d liu ca bi ton nhm hon thnh cc chc nng ca chng
trnh
5. Cc chin lc thit k thut ton.
Khng co
m t phng pha
p na
o co
th giu
p chu
ng ta xy d ng (thi t k ) nn ca
c thu
ton cho tt c cc loai bi ton . Cc nh khoa h c my tnh a nghin c
u va
a ra ca
c
chi n l c thi t k ca
c gia
i thu t chung nh t a
p du ng cho ca
c loa i ba
i toa
n kha
c nhau.
5.1. Duyt ton b (Exhausted search)
Chin lc duyt ton b l chin lc m mi lp trinh vin phi nghi n u tin khi
gii quyt bt c bi ton no. Trong phng php duyt ton b, chng ta s xem xet tt c
cc ng c vin thuc mt khng gian co th co ca bi ton xem o co phi l nghim ca
bi ton hay khng. Phng php ny yu cu co mt hm kim tra xem mt ng c vin no
o co phi l nghim ca bi ton hay khng. Mc d d hiu song phng php ny khng
phi l d thc hin, v c bit l khng hiu qu i vi cc bi ton m kch thc input
ln. Co nhiu phng php ci tin hiu nng ca phng php duyt ton b v chng ta s
xem xet ky hn trong chng 3.
5.2. qui quay lui Backtracking
Chin lc qui quay lui l mt chin lc xy dng thut ton da trn quan h
qui. Nghim ca bi ton c m hinh hoa di dang mt vecto, mi thnh phn ca vecto
nghim s co mt tp gi tr co th nhn v thut ton s tin hnh cc bc gn cc gi tr co
th cho cc thnh phn ca nghim xc nh ng nghim ca bi ton. Mc d khng phi
bi ton no cung co th p dng song cc thut gii da trn phng php qui quay lui
lun co v p t s ngn gn, sc tch m no mang lai.
5.3. Chia tri (Divide and Conquer)
Chi n l c chia tri la
c gia
i thu t . Y
t
ng cu
a chi n l c na
y nghe r t n gia
n va
d nh n th y , o
la
: khi c n gia
i quy t m t ba
i
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
10
ton, ta se
ti n ha
nh chia ba
k t h p nghi m cu
a ca
c ba
i toa
n nho
hn o
la i tha
nh nghi m cu
a ba
i toa
n ban u.
Tuy nhin v n kho
khn
y n m
ch h p ly
tha
nh ca
c ba
i toa
n kha
c nhau thi
s rt phc tap, y u t th
hai la
vi c k t h p l
i gia
i cu
a ca
c ba
i toa
n
con se
c th c hi n nh th na
o?.
Cc thut ton sp xp trn (merge sort), s p x p nhanh (quick sort) u thuc loai thut
ton chia tr (cc thut ton ny c trinh by chng 3).
V d[6, trang 57]: Trong vi
nh
N
a ta y
cng th
c sau:
N N/2 2
N/2 2
1 nu N = 0
a (a ) nu N chn
a*(a ) nu N l
T
cng th
c trn ta suy ra ca
i t cu
a thu t toa
n nh sau:
int power(int a, int n)
{
if(n==0)
return 1;
else{
int t = power(a, n/2);
if(n%2==0)
return t*t;
else
return a*t*t;
}
}
5.4. Chi n l c tham lam (Greedy)
Chin lc tham lam l mt chin lc xy dng thut ton tim nghim ti u cc b
cho cc bi ton ti u nhm at c nghim ti u ton cc cho c bi ton (trong trng
hp tng qut). Trong trng hp cho nghim ng, li gii ca chin lc tham lam thng
rt d ci t v co hiu nng cao ( phc tap thut ton thp).
Chu : Trong m t s ba
i toa
n, thu t toa
n tham n chi
cho nghi m g n u
ng v
i nghi m t i u.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
11
5.5. Qui hoch ng (Dynamic Programming)
Qui hoach ng l chin lc xy dng thut ton gii quyt cc bi ton ti u, co
th i hoi ca bi ton khng phi l cc gi tr qu chi tit m chi dang gi tr ln nht/nho
nht l bao nhiu ch khng i hoi c th khi no, u co th at c gi tr o. Trong
chin lc qui hoach ng chng ta s xy dng cc quan h qui ca bi ton, bi ton gc
s co li gii da trn cc bi ton con (sub problems) da trn quan h qui. Cc thut ton
qui hoach ng thng s dng cc mng lu lai gi tr nghim ca cc bi ton con v c
hai cch tip cn: bottom up v top down.
6. Bi tp
Bi tp 1: Xy d ng s gia
i thu t cho ba
i toa
n ti
nh s Fibonaci th
N , bi t r ng da
y
s Fibonaci c i nh nghi
a nh sau:
F[0] = F[1] = 1, F[N] = F[N-1] + F[N-2] v
i N 2.
Bi tp 2: Xy d ng s gia
i thu t cho ba
i toa
n ti
nh bi u th
c:
... x x x + + + , v
i N s x th c n m trong ca
c d u cn b c hai , N va
x nh p t
ba
n
phm.
Bi tp 3: Trong m t ma tr n hai chi u c p MxN , m t ph n t
a[i][j] c go i la
i m
yn ng a cu
a ma tr n (saddle point) n u nh no
la
ph n t
nho
nh t trn ha
ng i va
ph n t
n
nh t trn c t j cu
a ma tr n. Ch ng ha n a[2][0] = 7 l m t ph n t
yn ng a trong ma tr n sau:
1 2 3
4 5 6
7 8 9
(
(
(
(
Hay vit chng trinh tim tt c cc im yn nga ca mt ma trn nhp vo t bn
phm v a ra phc tap ca thut ton.
Bi tp 4: Cho m t ma tr n ki
ch th
c MxN g m ca
c s nguyn (co c s m v
dng). Hay vit chng trinh tim ma trn con ca ma trn a cho sao cho tng cc phn t
trong ma tr n con o
n nh t co
nh nh p va
o ca
c h s cu
a m t a th
c (gi s cc h s l
nguyn va
a th
c co
bi n x la
c Horner sau:
N u f(x) = a
n
*x
n
+ a
n-1
*x
n-1
+ .. +a
1
*x + a
0
thi
f(x) = a
0
+ x*(a
1
+x*(a
2
+x*(.+x(a
n-1
+a
n
*x)) (Cng th
c Horner).
Bi tp 6: Cho 4 hinh hp kch thc bng nhau , m i m t cu
a hi
nh h p c t b ng 1
trong 4 mu xanh, o
c hi
nh h p tha
nh 1 day sao
cho khi nhi
n theo ca
c phi
a trn xu ng , ng tr
c va
ng sau cu
a da
y u co
ca
4 mu
xanh, o
, tm vng.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
12
Bi tp 7: Hay vit chng trinh nhanh nht co th c in ra tt c cc s nguyn
s co
hai ch
s .
Bi tp 8: Ap dng thut ton sng in ra tt c cc s nguyn t nho hn N.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
13
CHNG II: S
P X
li u c n s p x p c lu y u
trong b nh
trong thc hin thut ton sp xp.
1.2. S p x p ngoi (External Sorting)
S p x p ngoa
i (external sorting): D
li u c n s p x p co
ki
ch th
c qua
n va
khng
th lu va
o b nh
a mn ho c na
y chu
ng ta chi
xem xe
t ca
c thu t toa
n s p x p trong . C
th d
li u s p x p se
la
m t ma
ng ca
c ba
n ghi (g m hai tr
ng chi
nh la
tr
ng d
li u va
tr
ng kho
a), v tp trung vo cc thut ton chng ta chi xem xet cc trng khoa ca cc
bn ghi ny, cc v d minh ha v ci t u c thc hin trn cc mng s nguyn , coi
nh la
tr
ng kho
a cu
a ca
c ba
n ghi.
1.3. S p x p gin tip
Khi cc bn ghi c kch thc ln vic hon i cc bn ghi l rt tn kem, khi o
gim chi ph ngi ta c th s dng cc phng php sp xp gin tip. Vic ny c th c
thc hin theo nhiu cch khc nhau v mt trong nhng phng php o l tao ra mt file
mi cha cc trng kha ca file ban u, hoc con tro ti hoc l chi s ca cc bn ghi ban
u. Chng ta s sp xp trn file mi ny vi cc bn ghi co kch thc nho v sau o truy
cp vo cc bn ghi trong file ban u thng qua cc con tro hoc chi s (y l cch lm
thng thy i vi cc h qun tr c s d liu).
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
14
V d: chng ta mun sp xp cc bn ghi ca file sau y:
Index Dept Last First Age ID number
1 123 Smith Jon 3 234-45-4586
2 23 Wilson Pete 4 345-65-0697
3 2 Charles Philip 9 508-45-6859
4 45 Shilst Greg 8 234-45-5784
Sau khi sp xp xong truy cp vo cc bn ghi theo th t a sp xp chng ta s
dng th t c cung cp bi ct index (chi s). Trong trng hp ny l 3, 2, 4, 1. (chng
ta khng nht thit phi hon i cc bn ghi ban u).
1.3. Cc tiu chun nh gi mt thut ton sp xp
Cc thut ton sp xp c th c so snh vi nhau da trn cc yu t sau y:
+ Thi gian thc hin (run-time): s cc thao tc thc hin (thng l s cc php so
snh v hon i cc bn ghi).
+ B nh s dng (Memory): l dung lng b nh cn thit thc hin thut ton
ngoi dung lng b nh s dng cha d liu cn sp xp.
+ Mt vi thut ton thuc loai in place v khng cn (hoc cn mt s c nh) thm
b nh cho vic thc hin thut ton.
+ Cc thut ton khc thng s dng thm b nh ti l thun theo hm tuyn tnh hoc
hm mu vi kch thc file sp xp.
+ Tt nhin l b nh s dng cng nho cng tt mc d vic cn i gia thi gian v
b nh cn thit c th l c li.
+ S n nh (Stability):Mt thut ton c gi l n nh nu nh no co th gi c
quan h th t ca cc kha bng nhau (khng lm thay i th t ca cc kha bng nhau).
Chng ta thng lo lng nhiu nht l v thi gian thc hin ca thut ton v cc thut
ton m chng ta bn v thng s dng kch thc b nh tng ng nhau.
V d v sp xp n nh: Chng ta mun sp xp file sau y d trn k t u ca cc
bn ghi v di y l kt qu sp xp ca cc thut ton n nh v khng n nh:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
15
Chng ta s xem xt tai sao tnh n nh trong cc thut ton sp xp lai c nh gi
quan trng nh vy.
2. Cc phng php sp xp c bn
2.1. S p x p cho n (Selection sort)
M ta
thu t toa
n:
Tm phn t c kha ln nht (nho nht), t no vo ng v tr v sau o sp xp phn
cn lai ca mng.
S thu t toa
n:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
16
Bt u
Kt thc
Nhp n, a[0..n-1]
i=0
i<n
vtmin=i
j<n
j=i+1
a[j]<a[vtmin]
vtmin=j
vtmin!=i
i ch a[i], a[vtmin]
S
i=i+1
j=j+1
S
S
S
oan m sau minh ha cho thut ton:
void selection_sort(int a[], int n)
{
int i, j, vtmin;
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
17
for(i=0; i<n-1;i++)
{
vtmin = i; //bi n vtmin lu vi tri
ph n t
nho
nh t a[i..n-1]
for(j=i+1;j<n;j++)
if(a[j] < a[vtmin])
vtmin = j;
swap(a[vtmin], a[i]); // hm i ch a[vtmin], a[i]
}
}
V d:
Vi mi gi tr ca i thut ton thc hin (n i 1) php so snh v v i chay t 0 cho ti
(n2), thut ton s cn (n-1) + (n-2) + + 1 = n(n-1)/2 tc l O(n
2
) php so snh. Trong mo i
tr
ng h p s l n so sa
nh cu
a thu t toa
n la
khng i . M i l n cha y cu
a vo
ng l p i v
i bi n
i, co th co nhi u nht mt ln i ch hai phn t nn s ln i ch nhiu nht ca thut
ton l n. Nh v y trong tr
ng h p t t nh t , thu t toa
n c n 0 l n i ch , trung bi
nh c n n/2
l n i ch va
t i nh t c n n l n i ch .
2.2. S p x p i ch tr c ti p (Exchange sort)
Tng t nh thu t toa
n s p x p b ng cho n va
r t d ca
i t (th
ng bi nh m v
i thu t
ton sp xp chn) l thut ton sp xp bng i ch trc tip (m t s ta
i li u cn gi l thut
ton Interchange sort hay Straight Selection Sort ).
M ta
: B t u xe
t t
ph n t
u tin a [i] v
i i = 0, ta xe
t t t ca
ca
c ph n t
ng sau
a[i], gi l a[j] v
i j cha y t
i+1 t
i m i c p a[i], a[j] o
, l a[j]
l phn t ng sau a [i], n u a[j] < a[i], t
c la
xa
y ra sai kha
c v vi tri
thi
ta se
i ch a [i],
a[j].
V d minh ha : Gi s mng ban u l int a [] = {2, 6, 1, 19, 3, 12}. Cc bc ca
thu t toa
n se
c th c hi n nh sau:
i=0, j=2: 1, 6, 2, 19, 3, 12
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
18
i=1, j=2: 1, 2, 6, 19, 3, 12
i=2, j=4: 1, 2, 3, 19, 6, 12
i=3, j=4: 1, 2, 3, 6, 19, 12
i=4, j=5: 1, 2, 3, 6, 12, 19
K t qua
cu i cu
n:
Bt u
Kt thc
Nhp n, a[0..n-1]
i=0
i<n
j<n
j=i+1
a[j]<a[i]
S
i=i+1
j=j+1
S
S
i ch a[i], a[j]
Ci t ca thut ton:
void exchange_sort(int a[], int n)
{
int i, j;
int tam;
for(i=0; i<n-1;i++)
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
19
for(j=i+1;j<n;j++)
if(a[j] < a[i])
{
// i ch a[i], a[j]
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
}
phc tap ca thut ton: Co th thy rng so vi thut ton sp xp chn , thu t toa
n
s p x p b ng i ch tr c ti p c n s b
c so sa
nh tng ng : t
c la
n*(n-1)/2 l n so sa
nh.
Nhng s b
c i ch hai ph n t
cu
ng b ng v
i s l n so sa
nh : n*(n-1)/2. Trong tr
ng
h p x u nh t s b
c i ch cu
a thu t toa
n b ng v
i s l n so sa
nh , trong tr
ng h p trung
binh s bc i ch l n *(n-1)/4. Cn trong trng hp tt nht , s b
c i ch b ng 0.
Nh v y thu t toa
n s p x p i ch tr c ti p no
i chung la
ch m hn nhi u so v
i thu t toa
n
s p x p cho n do s l n i ch nhi u hn.
2.3. S p x p che
n (Insertion sort)
M ta
thu t toa
n:
Thu t toa
n d a va
o thao ta
c chi
nh la
i thu t cu
a thu t toa
n nh sau:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
20
Bt u
Kt thc
i=1
i<n
tam=a[i]
j=i-1
j>=0
a[j]>tam
a[j]=a[j-1]
j=j-1
S
a[j+1]=tam
i=i+1
S
S
Co th m ta
thu t toa
n b ng l
ng a[0..i-1] (g m i ph n
t
, trong tr
ti n
hnh chn a[i] vo mng a[0..i-1] sao cho sau khi chn, cc phn t vn tun theo th t tng
d n. B
c ti p theo se
che
n c
th ti n
hnh cho ti khi ht mng (chn a[n-1] vo mng a[0..n-2]). ti n ha
nh che
n a[i] vo ma
ng
a[0..i-1], ta du
ng m t bi n ta m lu a [i], sau o
du
ng m t bi n chi
s j = i-1, d t v tr j cho
t
i u ma
se
ta ga
n a [j+1] =
tam.
oan ma chng trinh nh sau:
void insertion_sort(int a[], int n)
{
int i, j, temp;
for(i=1;i<n;i++)
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
21
{
int j = i;
temp = a[i];
while(j>0 && temp < a[j-1])
{
a[j] = a[j-1];
j = j-1;
}
a[j] = temp;
}
}
V d:
Thu t toa
n s p x p che
n la
m t thu t toa
c thu t toa
n s p x p c ba
n.
Vi mi i chng ta cn thc hin so snh kha hin tai (a[i]) vi nhiu nht l i kha v
v i chay t 1 ti n-1 nn chng ta phi thc hin nhiu nht: 1 + 2 + + n-1 = n(n-1)/2 tc
l O(n
2
) phep so snh tng t nh thut ton sp xp chn. Tuy nhin vo
ng l p while khng
phi lc no cung c thc hin v nu thc hin thi cung khng nht nh l lp i ln nn
trn th c t thu t toa
n s p x p che
n nhanh hn so v
i thu t toa
n s p x p cho n . Trong tr
ng
h p t t nh t, thu t toa
n chi
c n s
du ng u
ng n l n so sa
nh va
0 l n i ch . Trn th c t m t
mng bt k gm nhiu mng con a c sp nn thut ton chn hoat ng kh hiu qu .
Thu t toa
n s p x p che
n la
thu t toa
n nhanh nh t trong ca
c thu t toa
n s p x p c ba
n (u co
ph
c ta p O(n
2
)).
2.4. S p x p n i bo t (Bubble sort)
M ta
thu t toa
n:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
22
Thu t toa
n s p x p n i bo t d a trn vi c so sa
nh va
i ch hai ph n t
k nhau:
+ Duyt qua danh sch cc bn ghi cn sp theo th t, i ch hai phn t k nhau
nu chng khng theo th t.
+ Lp lai iu ny cho ti khi khng c hai bn ghi no sai th t.
Khng kho thy rng n pha thc hin l cho vi c th c hi n xong thut ton.
Thut ton ny cung tng t nh thut ton sp xp chn ngoai tr vic c thm nhiu
thao tc i ch hai phn t.
S thu t toa
n:
Bt u
Kt thc
Nhp n, a[0..n-1]
i=0
i<n
j>i
j=n-1
a[j]<a[j-1]
S
i=i+1
j=j-1
S
S
i ch a[j], a[j-1]
Ci t thut ton:
void bubble_sort1(int a[], int n)
{
int i, j;
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
23
for(i=n-1;i>=0;i--)
for(j=1;j<=i;j++)
if(a[j-1]>a[j])
swap(a[j-1],a[j]);
}
void bubble_sort2(int a[], int n)
{
int i, j;
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(a[j-1]>a[j])
swap(a[j-1],a[j]);
}
Thu t toa
n co
ph
c ta p la
O(N*(N-1)/2) = O(N
2
), b ng s l n so sa
nh va
s l n i
ch nhi u nh t cu
a thu t toa
n (trong tr
ng h p t i nh t ). Thu t toa
n s p x p n i bo t la
thu t
ton chm nht trong s cc thut ton sp xp c bn , no cn chm hn thut ton s p x p
i ch tr c ti p m c du
co
s l n so sa
k nhau
nn s l n i ch nhi u hn.
2.5. So snh cc thut ton sp xp c bn
Sp xp chn:
+ Trung binh i hoi n
2
/2 phep so snh, n bc i ch.
+ Trng hp xu nht tng t.
Sp xp chn:
+ Trung bnh cn n2/4 php so snh, n2/8 bc i ch.
+ Xu nht cn gp i cc bc so vi trng hp trung bnh.
+ Thi gian l tuyn tnh i vi cc file hu nh a sp v l thut ton nhanh nh t
trong s ca
c thu t toa
n s p x p c ba
n.
Sp xp ni bt:
+ Trung bnh cn n2/2 php so snh, n2/2 thao tc i ch.
+ Xu nht cung tng t .
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
24
3. C u tru
c d
c Heap
Tr
c khi ti
m hi u v thu t toa
ng ta se
ti
m hi u v m t c u tru
c c bi t
gi l c u tru
n go i la
ng).
Heap la
lai mt cy nh phn y l mt cy nh phn y tt c cc tng ca cy tr tng cui
cng (co th chi y v pha tri ca cy ). Cung co th m t ky hn l mt cy nh phn m
cc nt co c im sau : n u o
la
m t nu
t trong cu
a cy va
khng
c cu i cu
ng thi
no
se
co 2 con, cn nu o l mt nt mc cui cng thi no s khng co con no nu nt anh em
bn tra
i cu
a no
khng co
con ho c chi
co
1 con va
se
co
th co
con (1 ho c 2) n u nh nu
t anh
em bn tra
i cu
a no
co
t hn s con cu
a nu
t anh em bn tra
i cu
a no
.
V d:
Chi u cao cu
a m t heap:
M t heap co
n nu
t se
co
chi u cao la
O(log n).
Ch
ng minh:
Gi s n l s nt ca mt heap co chiu cao l h.
Vi mt cy nh phn chiu cho h co s nt ti a l
2
h
-1 nn suy ra:
1
2
h
n
2
h
-1
L y logarit hai v cu
a b t ng th
c th
nh t ta c:
h 1 log n
Thm 1 vo 2 v cu
a b t ng th
c co
n la i va
ch thi t k va
nh gi gii thut
25
log(n + 1) h log(n) + 1
Cc v d v c u tru
c Heap:
Heap v
i chi u cao h = 3:
heap v
i chi u cao h = 4
Bi u di n Heap
Chng ta a bit cc biu din bng mt cy nh phn nn vi c bi u di n m t heap cu
ng
khng qua
kho
chu
ng ta b t u
b ng 0):
- Left(i) = 2*i + 1
- Right(i) = 2*i + 2
- Parent(i) = (i-1)/2
V d:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
26
Th tc heaprify
y la
thu
tu c c ba
n cho t t ca
ca
c thu
tu c kha
c thao ta
c trn ca
c heap
Input:
+ M t ma
ng A va
m t chi
s i trong ma
ng
+ Gi s hai cy con Left (i) v Right(i) u l cc heap
+ A[i] co th ph v cu trc Heap khi tao thnh cy vi Left (i) v Right(i).
Output:
+ Mng A trong o cy co gc l tai v tr i l mt Heap
Khng qua
kho
nh n ra r ng thu t toa
n na
y co
ph
c ta p la
O(log n).
Chng ta s thy y l mt th tc rt hu ch , tam thi hay tng tng l nu chng
ta thay i gia
tri cu
a m t va
i kho
c cu
a heap se
bi pha
va
i u na
y o
i
hoi phi co s sa i.
Sau y la
ca
i t b ng C cu
a thu
tu c:
void heaprify(int *A, int i, int n)
{
l = Left(i); /* l = 2*i +1*/
r = Right(i); /* r = 2*i + 2 */
if(l < n && A[l] > A[i])
largest = l;
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
27
else
largest = i;
if(r < n && A[r] > A[largest])
largest = r;
if(lagest !=i)
{
swap(A[i], A[largest]);
heaprify(A, largest, n);
}
}
V c ba
n y la
m t thu
tu c n gia
n hn nhi u so v
i nh
ng gi
chu
ng ta ca
m nh n v
no. Th tc ny n gin vi cc bc nh sau:
+ Xc nh phn t l
n nh t trong 3 ph n t
i la
ph n t
n nh t trong 3 ph n t
trn thi
i ch A [i] v
i
A[largest] trong o
nh la
A[largest]).
V d:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
28
Th tc buildheap
Th tc buildheap s chuyn mt mng bt k thnh mt heap . V c ba
n thu
tu c na
y
th c hi n go i t
i thu
ng ta bi t r ng ca
c cy con co
g c ta i ca
c i
nh con la
ca
c heap . N
a cu i cu
a
mng tng ng vi cc nt l nn chng ta khng cn p hi thc hin th tc tao heap i vi
chng.
oa n ma
C th c hi n buildheap:
void buildheap(int *a, int n)
{
int i;
for(i=n/2; i>=0; i--)
heaprify(a, i, n);
}
D a va
thu t toa
n na
y d th y thu t toa
n ta o heap t
ma
ng co
ph
c ta p la
O(n*log n).
Trn th c t thu t toa
n ta o heap co
ph
c ta p la
O(n). Th
i gian th c hi n cu
a thu t toa
n
heaprify trn m t cy con co
ki
ch th
c n ta i m t nu
t cu th i na
o o
chi
nh la i m i quan h
gi
a ca
c ph n t
i th
i gian thu
tu c na
y
th c hi n trn m t cy con co
g c ta i m t trong ca
c nu
t la
con cu
a nt i. S cy con cu
a ca
c
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
29
con cu
a nu
t i (i co
th la
g c ) nhi u nh t la
2n/3. Suy ra ta co
cng th
c ti
nh ph
c ta p cu
a
thu t toa
n la
y cu
ng suy ra ph
c ta p cu
a
thu t ton buildheap l n *log(n). Cung co th l lun khc nh sau : Kch thc ca cc cp
ca cy l: n/4, n/8, n/16, , 1 trong o
n la
s nu
t cu
a cy . Th
i gian ta o th c hi n thu t
ton heaprify i vi cc kch thc ny nh i u nh t la
x p xi
la
:
1*n/4 + 2 * n/8 + 3 * n/16 + + (log(n)-1) * 1 < n/4(1 + 2* + 3 * + 4 * 1/8 + ...) =
O(n).
V d:
Cc thao tc trn heap khc.
Ngoi vic tao heap cc thao tc sau y cung thng thc hin i vi mt heap:
+ Insert()
+ Extract_Max()
Chng ta khng bn v cc thao tc ny y nhng cc thao tc ny u khng kho
th c hi n v
i vi c s
du ng thu
tu c heaprify ma
chu
ng ta a
ca
i t
trn. V
i ca
c thao ta
c na
y
chng ta co th s dng mt heap ci t mt hng i u tin . M t ha
ng i u tin la
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
30
m t c u tru
c d
li u v
i ca
c thao ta
c c ba
n la
insert , maximum va
extractmaximum va
chu
ng
ta se
n Heap sort v y
ng r t n gia
n:
+ Th c hi n thu
tu c buildheap bi n ma
ng A tha
nh m t heap
+ Vi A l mt heap nn phn t ln nh t se
la
A[1].
+ i ch A[0] v A[n-1], A[n-1] a
n m u
ng vi tri
cu
a no
va
vi th chng ta co th bo
qua no
va
coi nh ma
ng by gi
co
ki
ch th
c la
a.
+ Vi A[0] co th li v tr nn ta s gi th tc heaprify i vi no chinh lai mng tr
thnh mt heap.
+ L p la i ca
c thao ta
c trn cho t
i khi chi
co
n m t ph n t
ma
ng a
c s p.
Ci t b ng C cu
a thu t toa
n:
void heapsort(int *A, int n)
{
int i;
buildheap(A, n);
for(i=n-1;i>0;i--)
{
swap(A[0], A[i]);
heaprify(A, 0, i-1);
}
}
Chu : go i thu t toa
n s p x p trn ma
ng a co
n ph n t
go i ha
m heapsort () nh sau:
heapsort(a, n);
phc tp ca thut ton heapsort:
Th tc buildheap co phc tap l O(n).
Th tc heaprify co phc tap l O(log n).
Heapsort go i t
i buildheap 1 l n va
n-1 l n go i t
i heaprify suy ra ph
c ta p cu
a no
la
O(n + (n-1)logn) = O(n*log n).
Trn th c t heapsort khng nhanh hn quicksort.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
31
4. Tm kim tuyn tnh
4.1. Bi ton tm kim
Tim kim l mt trong nhng vn thuc linh vc nghin cu c a nga
nh khoa ho c
my tnh v c ng dng rt rng rai trn thc t . Bn thn mi con ngi chng ta a co
nh
ng tri th
c, nh
ng phng pha
p mang ti
nh th c t , th c ha
nh v v n ti
m ki m . Trong
cc cng vic hng ng y chu
ng ta th
ng xuyn pha
i ti n ha
nh ti
c i u ki n na
o o
trong m t
c s
y chu
ng ta quan tm t
i ba
i toa
n ti
m ki m trn m t ma
ng , ho c m t
danh sa
ch ca
c ph n t
cu
ng ki u . Thng th
ng ca
c ph n t
na
y l mt bn ghi c phn
chia tha
nh hai tr
ng ring bi t : tr
ng lu tr
ca
c d
li u va
m t tr
ng phn bi t ca
c
ph n t
i nhau (cc thng tin trong trng d liu co th ging nhau hon ton ) gi l
tr
ng kho
a, t p ca
c ph n t
na
y c go i la
khng gian ti
m ki m cu
a ba
i toa
n ti
m ki m ,
khng gian ti
m ki m c lu hoa
n toa
n trn b nh
cu
a ma
y ti
nh khi ti n ha
nh ti
m ki m.
K t qua
ti
m ki m la
vi tr ca phn t thoa mn iu ki n ti
m ki m: co trng khoa
b ng v
i m t gia
tri kho
a cho tr
vi tri
ti
m th y na
y chu
ng ta co
th
truy c p t
i ca
c c ch
a trong tr
ng d
li u cu
a ph n t
ti
m th y . N u k t
qu l khng tim thy (trong tr
ng h p na
y thu t toa
n v n k t thu
c tha
nh cng ) thi gi tr tr
v se
c ga
n cho m t gia
tri c bi t na
o o
tng ng v
i vi c khng t n ta i ph n t
no co v tr o: ch ng ha n nh -1 i v
i ma
ng va
NULL i v
i danh sa
ch lin k t.
Cc thut ton tim kim cung co rt nhiu : t
ca
c thu t toa
n ti
m ki m ve
t ca n , tim kim
tu n t , tim kim nh phn , cho t
i nh
ng thu t toa
n ti
m ki m d a trn ca
c c u tru
c d
li u
c bi t nh ca
c t
en
Tuy nhin
ph n na
y chu
ng ta se
xem xe
p ti
m ki m c a
p du ng v
i c u
trc d liu mng (d
li u ti
m ki m c ch
a hoa
n toa
n trong b nh
cu
a ma
y ti
nh).
i u u tin ma
chu
ng ta c n lu y
la
i v
i c u tru
c ma
ng na
y , vi c truy c p t
i ca
c
ph n t
ca
c vi tri
kha
c nhau la
nh nhau va
d a va
o chi
s , ti p n chu
ng ta se
t p trung
vo thut ton nn co th coi nh mi phn t chi co cc trng khoa l cc s nguyn.
4.2. Tm kim tun t (Sequential search)
Y tng ca thut ton tim kim tun t rt n gin : duy t qua t t ca
ca
c ph n t
cu
a
mng, trong qua
tri
nh duy t n u ti
m th y ph n t
co
kho
a b ng v
i kho
a ti
m ki m thi
tra
v vi
tr ca phn t o . Cn nu duyt ti ht mng m vn khng co phn t no co khoa bng
vi khoa tim kim thi tr v -1 (khng ti
m th y).
Thu t toa
n co
s gia
i thu t nh sau:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
32
Ci t bng C ca thut ton:
int sequential_search(int a[], int n, int k)
{
int i;
for(i=0;i<n;i++)
if(a[i]==k)
return i;
return -1;
}
D da
ng nh n ra thu t toa
n se
tra
v k t qua
la
vi tri
cu
a ph n t
m ki m n u t n ta i ph n t
.
phc tap thut ton trong trng hp trung binh v ti nht: O(n).
Trong tr
ng h p t t nh t thu t toa
n co
ph
c ta p O(1).
Cc bi ton tim phn t ln nht v tim phn t nho nht ca mt mng , danh sa
ch
cung l thut ton tim kim tun t . M t i u d nh n th y la
khi s ph n t
cu
a ma
ng nho
(c
cu
a
mng ln n hng ty, ch ng ha n nh ti
m tn m t ng
i trong s tn ng
i cu
a ca
th gi
i thi
thu t toa
n to
ra khng hi u qua
.
Begin
mng a[0..n-1], khoa k
i = 0
k==a[i] return i;
End
u
ng
sai
i >= n
return -1;
i = i + 1;
u
ng
sai
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
33
5. Cc vn khc
Ngoi cc thut ton a c trinh by trn vn cn co m t s thut ton khc m
chng ta co th tham kho : ch ng ha n nh thu t toa
n s p x p Shell sort , s p x p b ng m
Counting sort ho c s p x p c s Radix sort . Cc thut ton ny c xem nh phn t tim
hi u cu
a sinh vin.
6. Bi tp
Bi tp 1: Ci t cc thut ton sp xp c bn b ng ngn ng
l p tri
nh C trn 1 mng
cc s nguyn, d
li u cu
a chng tri
nh c nh p va
o t
khoa
ng 10000) v so snh th
i gian th c hi n th c t cu
a ca
c thu t toa
n.
Bi tp 2: Ci t cc thut ton sp xp nng cao bng ngn ng C vi mt mng cc
c u tru
t co
da
i t i a la
nh: s
th
nh th
i gian th c hi n cu
a ca
c thu t toa
n , so sa
nh v
i
hm qsort() co sn ca C.
Bi tp 3[6, trang 52]: Ci t ca cc thut ton sp xp co th thc hin theo nhiu
cch khc nhau. Hay vit hm nh n input la
ma
ng a [0..i] trong o
ca
c ph n t
chi
s 0 t
i
chi s i -1 a
a ph n t
no, v mt s x , chn x vo
mng a[0..i-1] sao cho sau khi che
n k t qua
nh n c la
a [0..i] l mt mng c sp xp .
S
du ng ha
m v
a xy d ng ca
i t thu t toa
n s p x p che
n.
G i y
n a
c tri
nh ba
y ho c s
du ng phng pha
p qui .
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
34
CHNG III: QUI V CHIN LC VET CN
1. Khi nim qui
qui l mt ky thut c s dng trong cc ngn ng lp trinh cao cp nh C/C++,
ngy nay hu ht cc ngn ng lp trinh u h tr ky thut ny. V bn cht qui l cch
nh nghia mt i tng da trn chnh no, hay c th hn l trn cc th hin c th, n
gin ca no. Ta co th nh nghia mt bc tranh (picture) nh th ny
+ Mt im nh (pixel) l mt bc tranh
+ Nu p1 v p2 l hai bc tranh thi vic ghep p1 vi p2 s cho ta mt bc tranh mi.
Trong ton hc ngi ta hay s dng phng php chng minh qui nap, chnh l mt
nguyn l qui. Trong lp trinh ta nh nghia mt hm qui l mt hm m trong thn hm
(ci t) co li gi ti chnh no (s lng v v tr khng han ch).
V d ta co th nh nghia hm tnh giai tha (factorial) ca mt s nguyn nh sau:
Gt(0) = 1.
Gt(n) = n* Gt(n-1) vi mi n > 0.
Gii thut qui l gii thut da trn cc quan h qui v c ci t c th bng
cc hm qui.
2. Chi n l c ve
t ca n (Brute force)
y la
chi n l c n gia
n nh t nhng cu
ng la
khng hi u qua
nh t . Chi n l c ve
t
can n gin th tt c cc kh nng xem kh nng no l nghim ng ca bi ton cn gii
quy t.
V d thut ton duyt qua mng tim phn t co gi tr ln nht chnh l p dng
chi n l c ve
t c an. Ho c ba
i toa
n ki m tra va
in ra t t ca
ca
c s nguyn t co
4 ch
s abcd
sao cho ab = cd (cc s co 2 ch
s ) c th c hi n b ng thu t toa
n ve
t ca n nh sau:
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
if(ktnguyento(a*1000+b*100+c*10+d) && (10*a+b==10*c+d))
printf(%d%d%d%d, a, b, c, d);
Hm ktnguyento() ki m tra xem m t s nguyn co
pha
i la
thuy t , chi n l c na
y co
th a
p du ng cho mo i loa i ba
i toa
n , nhng co
m t ha n ch
khi n no
khng pha
i la
chi
a kho
a va n nng v m t th c t : do c n pha
i th
t t ca
ca
c kha
nng
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
35
nn s tr
ng h p c n pha
i th
cu
a ba
i toa
n th
ng ln t
i con s r t l
n va
th
ng qua
lu so
v
i yu c u cu
a ba
i toa
n t ra.
3. Chi n l c quay lui (Back tracking / try and error)
y la
m t trong nh
m t i m kha
c : no lu gi cc trang
thi trn con ng i tim nghim ca bi ton. N u t
i m t b
c na
o o
, khng th ti n ha
nh
ti p, thu t toa
n se
th c hi n thao ta
i tr
c o
va
l a
chn cc kh nng khc . Bi ton m loai thut ton ny thng p dng l tim mt nghim
co th co ca bi to n ho c ti
m t t ca
ca
c nghi m sau o
a ma
n m t
i u ki n cu th na
o o
na
o o
), ho c cu
ng co
th la
ti
m t t ca
ca
c nghi m cu
a ba
i toa
n . V cung nh chi n l c ve
i toa
n ma
ng a
p du ng la
ca
c ba
i toa
n ma
nghi m cu
a chu
ng la
ch thi t k va
nh gi gii thut
36
cho bc xy dng tip. Trng hp ny cn phi hon nguyn lai trang thi cu khi quay lui
th tip cc kh nng trong bc trc.
Th tc qui
Th tc cho thut ton quay lui c thit k kh n gin theo c cu qui ca th
tc try di y (theo c php ngn ng C).
void try(i: integer)
{
// xc nh thnh phn xi bng qui
int j;
for j e < tp cc kh nng c > do
if(chp nhn j)
{
<xc nh xi theo kh nng j >
< ghi nhn trang thi mi >
If(i=n)
< ghi nhn mt nghim>
else
try(i+1);
< tr lai trang thi cu >
}
}
Trong chng trinh chnh chi cn gi ti try(1) khi ng c cu qui hoat ng.
Tt nhin, trc y cn khi tao cc gi tr ban u cho cc bin. Thng thng vic ny
c thc hin qua mt th tc no o m ta gi l init (khi tao).
Hai im mu cht quyt nh phc tap ca thut ton ny trong cc trng hp c
th l vic xc nh cc gi tr c tai mi bc dnh cho xi v xc nh iu kin chp nhn
c cho cc gi tr ny.
Cc gi tri c
Cc gi tr c thng thng ln hn nhiu so vi s cc trng hp co th chp nhn
c. S chnh lch ny cng ln thi thi gian phi th cng nhiu, vi th cng thu hp c
iu kin c cng nhiu cng tt (nhng khng c bo sot). Vic ny ph thuc vo vic
phn tch cc iu kin rng buc ca cu hinh pht hin nhng iu kin cn ca cu hinh
ang xy dng. L tng nht l cc gi tr c c mc nhin chp nhn. Trong trng
hp ny mnh < chp nhn j > c bo qua (vi th cung khng cn cc bin trang thi).
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
37
V d 1: Sinh cc da
y nhi phn da
i N (N 20)
V d di y trinh by chng trinh sinh ca
c da
y nhi phn da
i N, m i da
y nhi phn
c t chc nh mt mng n thnh phn:
x[0], x[1], , x[n-1]
trong o mi x[i] co th ly mt trong cc gi tr t 0 ti 1, co nghia l mi phn t x [i]
ca vecto nghim co 2 gi tr c, v vi cn sinh tt c cc xu nh phn nn cc gi tr c
ny u c chp nhn. Th tc chnh ca chng trinh n gin nh sau:
void try(int k)
{
int j;
if(k==n)
in_nghiem();
else
for(j=0;j<=1;j++)
{
x[k] = j;
try(k+1);
}
}
Trong o in _nghiem() l ha
ch thi t k va
nh gi gii thut
38
CHNG IV: CHI
N L C CHIA
TRI
1. C s ca chin lc chia tri (Divide and Conquer)
Chi n l c chia tri la
c gia
i thu t . Y
t
ng cu
a chi n l c na
y nghe r t n gia
n va
d nh n th y, o
la
: khi c n gia
i quy t m t ba
i
ton, ta se
ti n ha
nh chia ba
i toa
n o
tha
nh ca
c ba
i toa
n nho
k t h p nghi m cu
a ca
c ba
i toa
n nho
hn o
la i tha
nh nghi m cu
a bi ton ban u.
Tuy nhin v n kho
khn
y n m
ch h p ly
tha
nh ca
c ba
i toa
n kha
hai la
vi c k t h p l
i gia
i cu
a ca
c ba
i toa
n
con se
c th c hi n nh th na
o?.
Cc thut ton sp xp trn (merge sort), s p x p nhanh (quick sort) u thuc loai thut
ton chia tr (cc thut ton ny c trinh by chng 3).
V d: Trong vi
du na
y chu
ng ta se
xem xe
t thu t toa
n ti
nh
N
a .
ti
nh
N
a ta y
cng th
c sau:
N N/2 2
N/2 2
1 if N = 0
a (a ) if N % 2=0
a*(a ) if N % 2 = 1
T
cng th
c trn ta suy ra ca
i t cu
a thu t toa
n nh sau:
int power(int a, int n)
{
if(n==0)
return 1;
else{
int t = power(a, n/2);
if(n%2==0)
return t*t;
else
return a*t*t;
}
}
2. S p x p tr n (Merge sort)
Cc phng php sp xp nng cao
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
39
Cc thut ton sp xp tt nht u l cc thut ton qui. Chng u tun theo chin
lc chung sau y:
Cho mt danh sch cc bn ghi L.
+ Nu L c khng nhiu hn 1 phn t thi co nghia l no a c sp
+ Ngc lai
- Chia L thnh hai dy nho hn l L1, L2
- Sp xp L1, L2 ( qui gi ti th tc ny)
- Kt hp L1 v L2 nhn c L a sp
Cc thut ton sp xp trn v sp xp nhanh u s dng ky thut ny.
V m t y
ng thu t toa
n merge sort g m ca
c b
c th c hi n nh sau:
+ Chia mng cn sp xp thnh 2 n
a
+ S p x p hai n
a o
m t ca
ch qui b ng ca
ch go i t
i thu
tu c th c hi n chi
nh
mergesort
+ Tr n hai n
a a
c s p nh n c ma
ng c s p.
oa n ma
C th c hi n thu t toa
n Merge sort:
void mergesort(int *A, int left, int right)
{
if(left >= right)
return;
int mid = (left + right)/2;
mergesort(A, left, mid);
mergesort(A, mid+1, right);
merge(a, left, mid, right);
}
s p m t ma
ng a co
n ph n t
ta go i ha
n tr n la
m vi c nh th na
o?
V d vi 2 mng sau:
Thu t toa
n 1:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
40
Thu t toa
cu
a ca
c ma
ng t
i vi tri
thi
ch h p
+ L p la i ca
c b
c th c hi n trn cho t
i khi ma
ng m
i ch
a h t ca
c ph n t
cu
a hai
mng con
oa n ma
n tr n hai ma
ng A, B tha
nh ma
ng C:
int p1 = 0, p2 = 0, index = 0;
int n = sizeA + sizeB;
while(index<n)
{
if(A[p1] < B[p2]){
C[index] = A[p1];
p1++;
index++;
}else{
C[index] = A[p2];
p2++;
index++;
}
}
Thu t toa
n 2:
Thu t toa
a m t ma
ng l
nh ma
ng a
s p thi
cung chnh l mng ban u.
Chng ta s s dng thm mt mng ph:
void merge(int *A, int l, int m, int r)
{
int *B1 = new int[m-l+1];
int *B2 = new int[r-m];
for(int i=0;i<m-l+1;i++)
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
41
B1[i] = a[i+l];
for(int i=0;i<r-m;i++)
B2[i] = a[i+m+l];
int b1=0,b2=0;
for(int k=l;k<=r;k++)
if(B1[b1]<B2[b2])
a[k] = B1[b1++];
else
a[k] = B2[b2++];
}
Thu t toa
n 3:
Thu t toa
n 2 co v kh ph hp so vi mc ch ca chng ta , nhng ca
hai phin ba
n
ca thu t toa
n tr n trn u co
m t nh c i m chi
nh o
la
khng ki m tra ca
c bin cu
a
mng. Co 3 gii php chng ta co th nghi ti:
+ Th c hi n ki m tra bin m t ca
ch cu th
+Thm 1 ph n t
li
nh canh va
o u cu
a m i ma
ng input.
+ Lm gi o thng minh hn
V y l mt cch thc hin iu o:
void merge(int *A,int l,int m,int r)
{
int *B=new int[r-l+1];
for (i=m; i>=l; i--)
B[i-l] = A[i];
for (j=m+1; j<=r; j++)
B[j-l] = A[j];
for (k=l;k<=r;k++)
if(((B[i] < B[j])&&(i<m))||(j==r+1))
A[k]=B[i++];
else
A[k]=B[j--];
}
s p x p ma
ng a co
n ph n t
ta go i ha
m nh sau:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
42
merge_sort(a, 0, n-1);
phc tp ca thut ton sp xp trn:
Gi T(n) l phc tap ca thut ton sp xp trn . Thu t toa
n lun chia ma
ng tha
nh 2
n
a b ng nhau nn su qui cu
a no
lun la
:
T(n) = O(n*log(n)).
B nh
c n du
ng thm la
O(n), y la
m t con s ch p nh n c , m t trong ca
c c
i m n i b t cu
a thu t toa
n la
ti
nh n i nh cu
a no
nh hoa
n chi
nh:
void merge(int *a,int l,int m,int r)
{
int *b=new int[r-l+1];
int i,j,k;
i = l;
j = m+1;
for (k=l;k<=r;k++)
if((a[i] < a[j])||(j>r))
b[k]=a[i++];
else
b[k]=a[j++];
for(k=l;k<=r;k++)
a[k] = b[k];
}
void mergesort(int *a, int l, int r)
{
int mid;
if(l>=r)
return;
mid = (l+r)/2;
mergesort(a, l, mid);
mergesort(a, mid+1, r);
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
43
merge(a, l, mid, r);
}
Cc chng minh cht ch v mt ton hc cho kt qu l Merge sort co phc tap l
O(n*log(n)). y la
thu t toa
n n i nh nh t trong s ca
c thu t toa
n s p x p d a trn so sa
nh
v i ch cc phn t, no cung rt thch hp cho vic thit k cc gii thut sp xp ngoi . So
v
i ca
c thu t toa
n kha
c, Merge sort o
i ho
i s
du ng thm m t vu
ng b nh
b ng v
i ma
ng c n
s p x p.
3. S p x p nhanh (Quick sort)
Quick sort la
thu t toa
n s p x p c C. A. R. Hoare a ra nm 1962.
Quick sort la
m t thu t toa
n s p x p da ng chia tri v
i ca
c b
c th c hi n nh sau:
+ Selection: chn mt phn t gi l phn t quay (pivot)
+ Partition (phn hoa ch): t t t ca
ca
c ph n t
cu
a ma
ng nho
hn ph n t
quay sang
bn tra
i ph n t
quay va
t t ca
ca
c ph n t
n hn ph n t
i ph n t
quay .
Ph n t
quay tr
quay
Thu t toa
n:
void quicksort(int *A, int l, int r)
{
if(r>l)
{
int p =partition(A, l, r);
quicksort(A, l, p -1);
quicksort(A, p+1, r);
}
}
Hm phn hoach partition:
+ L y m t s k: l k r.
+ t x = A[k] vo v tr ng ca no l p
+ Gi s A[j] A[p] n u j < p
+ A[j] A[p] n u j > p
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
44
y khng pha
i la
ca
ch duy nh t i nh nghi
a Quicksort . M t va
i phin ba
n cu
a thu t
ton quick sort khng s dng phn t quay thay vo o nh nghia cc mng con tri v
mng con phi , v gi s cc phn t ca mng con tri nho hn cc phn t ca mng con
phi.
Chn la phn t quay
Co rt nhiu cch khc nhau la chn phn t quay:
+ S
du ng ph n t
tra
i nh t la
m ph n t
quay
+ S
du ng phng th
c trung bi
nh cu
a 3 ly phn t quay
+ S
du ng m t ph n t
quay la
m th na
o t no
va
o u
ng vi tri
va
ba
o a
m ca
c ti
nh
ch t cu
c cho n ph n t
quay la
ph n t
tra
i nh t cu
a ma
ch s
i i chu
t phng th
c na
y.
Hm phn hoach:
int partition(int *A, int l, int r)
{
int p = A[l];
int i = l+1;
int j = r;
while(1){
while(A[i] p && i<r)
++i;
while(A[j] p && j>l)
--j;
if(i>=j)
{
swap(A[j], A[l]);
return j;
}else
swap(A[i], A[j]);
}
}
go i t
i ha
m trn s p x p cho ma
ng a co
n ph n t
ta go i ha
m nh sau:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
45
quicksort(a, 0, n-1);
Trong thu
tu c trn chu
ng ta cho n ph n t
tra
i nh t cu
a ma
ng la
m ph n t
quay , chng ta
duy t t
hai u va
o gi
a ma
ng va
th c hi n i ch ca
c ph n t
sai vi tri
(so v
i ph n t
quay).
Cc phng php la chn phn t quay kha
c:
Phng pha
p ng u nhin:
Chng ta chn mt phn t ngu nhin lm phn t quay
phc tap ca thut ton khi o khng ph thuc vo s phn phi ca cc phn t
input
Phng pha
p 3-trung bi
nh:
Ph n t
quay la
ph n t
c cho n trong s 3 ph n t
i
trung bi
nh c ng cu
a 3 s nh t.
Hay suy nghi v cc vn sau:
S
a i ca
i t cu
a thu
tra
i nh t nh n c ca
i t
ca 2 phng pha
p trn
Co cch ci t no tt hn khng?
Co cch no tt hn chn phn t phn hoach?
Cc vn khc:
Tnh ng n ca thut ton , xem xet tnh ng n ca thut ton chng ta cn
xem xe
t 2 yu t: th
nh t do thu t toa
n la
qui v y c n xe
t xem no
co
ng khng , th
hai
l khi dng thi mng co thc s a c sp hay cha.
Tnh ti u ca thut ton . i u gi
se
xa
y ra n u nh chu
ng ta s p x p ca
c ma
ng con
nho bng mt thut ton khc ? N u chu
ng ta bo
qua ca
c ma
ng con nho
? Co nghia l chng ta
chi s dng quicksort i vi cc mng con ln hn mt ngng no o v sau o co th kt
thc vic sp xp bng mt thut ton khc tng tnh hiu qu?
phc tp ca thut ton:
Thu t toa
n phn hoa ch co
cho ca
c l
i go i t
i thu
tc phn hoach tai bt c su no theo qui u co phc tap l O(n). Do o
ph
c
tap ca quicksort l phc tap ca thi gian phn hoach sau ca li gi qui xa nht.
K t qua
ch
ng minh ch t che
v m t toa
ph
c ta p la
O(n*log(n)), v trong h u ht cc trng hp Quick sort l thut ton sp xp nhanh nht ,
ngoai tr trng hp ti nht, khi o
Quick sort co
n ch m hn so v
i Bubble sort.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
46
4. Tm kim nhi phn
Thu t toa
n ti
m ki m nhi phn la
m t thu t toa
n r t hi u q u, nhng i u ki n a
p
dng c thut ton ny l khng gian tim kim cn phi c sp xp trc theo khoa tim
ki m.
M ta
thu t toa
n:
Input: mng a[left..right] a
c s p theo kho
n na
n chia tri , do ma
ng a
c s p x p , nn ta i m i
b
c thay vi
duy t qua ca
c ph n t
nh thu t toa
n ti
m ki m tu n t , thu t toa
n ti
m ki m nhi
phn xe
t ph n t
vi tri
gi
a ma
ng ti
m ki m a [(left+right)/2], n u o
la
ph n t
co
kho
a b ng
v
i kho
a ti
m ki m k thi
tra
v vi tri
va
k t thu
c qua
tri
nh ti
m ki m . N u khng se
co
hai
kh nng xy ra, m t la
ph n t
n hn kho
a ti
m ki m k, khi o
do ma
ng a
c s p nn
n u trong ma
ng co
ph n t
co
tr
ng kho
a b ng k thi
vi tri
cu
a ph n t
se
ph n tr
c
a[(left+right)/2], co nghia l ta s iu chinh right = (left+right)/2 - 1. Cn nu
a[(left+right)/2] < k thi
theo ly
lu n tng t ta se
i u chi
tr
ng h p na
o thi
khng gian ti
m ki m u se
gia
m i m t n
a s ph n t
sau m i
b
c ti
m ki m.
S thu t ton:
Begin
a[left..right], khoa k
mid = (left+right)/2;
k==a[mid] return mid;
End
u
ng
sai
k > a[mid]
return -1;
left = mid + 1;
sai
u
ng
left right
u
ng
sai
right = mid - 1;
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
47
Ci t bng C ca thut ton tm kim nhi phn:
int binary_search(int a[], int left, int right, int key)
{
// ci t khng qui
int mid;
while(left<=right)
{
mid = (left + right)/2;
if(a[mid] == key)
return mid;
if(a[mid] < key)
left = mid + 1;
else
right = mid 1;
}
return -1;
}
Ci t qui:
int recursive_bsearch(int a[], int left, int right, int key)
{
// ci t qui
int mid;
mid = (left + right)/2;
if(left>right)
return -1;
if(a[mid] == key)
return mid;
else
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
48
if(a[mid] < key)
return recursive_bsearch(a, mid+1, right, key);
else
return recursive_bsearch(a, left, mid-1, key);
}
go i ha
m ca
i t v
i ma
ng a co
n ph n t
ta go i nh sau:
int kq = binary_search(a, 0, n 1, k);
ho c:
int kq = recursive_bsearch(a, 0, n 1, k);
Thu t toa
n co
ph
c ta p la
ha
m logarit O(log(N)). V
c th c hi n ti
m ra tn m t ng
i trong s t t ca
dn s trn th gi
i , thu t toa
n ti
m
ki m nhi phn th c s la
m t thu t toa
n hi u qua
. Trn th c t vi c s p ca
c t
cu
a t
i n la
m t a
p du ng cu
a thu t toa
n ti
m ki m nhi phn.
Cch tip cn khc tim kim khi khng gian tim kim co s phn t ln l xy dng
cc cu trc cy (chng ta s xem xet vn ny trong chng 5), ho c s
du ng c u tru
c ba
ng
bm (hash table, khng ho c trong n i dung mn ho c na
a mn
hc ny chng ta chi xet hai phng php c bn trn.
5. Bi tp
Bi tp 1: Vi t chng tri
nh nh p va
m xem co
bao nhiu s l
n hn x va
nho hn y.
Bi tp 2: Ci t thut ton tim kim tuyn tnh theo kiu qui.
Bi tp 3: Vi t chng tri
nh nh p m t ma
ng cc s nguyn t bn phm , nh p 1 s
nguyn S, hay m xem co bao nhiu cp s ca mng ban u co tng bng S , co hiu bng
S.
Bi tp 4: Vi t chng tri
nh sinh m t da
y ca
ng trong da
y.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
49
CHNG V: QUI HOA CH NG
1. Chin lc qui hoa ch ng
Qui hoa ch ng (DP Dynamic Programming ), m t thu t ng
c nha
toa
n ho c
Rechard Bellman a ra va
nh ca
c ba
i toa
n con
c l p v
i nhau, sau o
gia
i quy t chu
ng b ng phng pha
p qui (recursive) v kt hp cc
l
i gia
i la i nh n c l
i gia
i cho ba
i toa
phng
php c a
p du ng khi ma
ca
c ba
i toa
n con cu
a ba
i toa
c tr
ng h p nh v y m t
thu t toa
n chia tri se
th c hi n nhi u vi c hn nh
ng gi
n qui hoa ch ng se
chi
gia
i quy t t t ca
cc bi ton con nho mt ln duy nht sau o lu kt qu vo mt bn g va
i u na
y giu
p no
trnh khng phi tnh ton lai cc kt qu mi khi gp mt bi ton con nho no o.
Qui hoa ch ng th
ng c a
p du ng v
i ca
c ba
i toa
n t i u . Trong ca
c ba
i toa
n t i u
o
th
ng co
nhi u nghi m (l
i gia
i). M i l
i gia
i co
m t gia
tri c l ng gia
b ng ca
ch s
dng mt hm nh gi ty thuc vo cc bi ton c th v yu cu ca bi ton l tim ra
m t nghi m co
gia
tri cu
a ha
m a
nh gia
la
t i u (l
n nh t ho c nho
nh t).
Qui hoa ch ng la
m t phng pha
p chung r t hi u qua
gia
i quy t ca
c v n t i u
ch ng ha n nh trn ca
c i t ng s p th
t t
tra
i qua pha
i , v n ti
ng i ng n nh t ,
v n i u khi n t i u Khi a
hi u ro
v qui hoa ch ng vi c
ng du ng va
o gia
i ca
c ba
i
ton ti u khng phi l qu kho khn nhng rt nhiu lp trinh vin ban u phi mt rt
nhi u th
i gian m
i co
th hi u c . Bi bo n y se
tri
nh ba
y ca
c b
c c ba
n a
p du ng
phng pha
i m t s ca
c ba
i toa
n t i u hay c ra trong ca
c ky
thi
Olympic, hc sinh gioi Tin hc cp trng, c p qu c gia thng qua t
ng vi
du cu th .
2. Bi ton 1: Dy Fibonaci
Bi ton tim s Fibonaci th n l mt trong cc bi ton quen thuc i vi nhng
ng
i a
ho c l p tri
Xy d ng thu t toa
n ti
nh F
n
v
i n la
m t s nguyn nh p t
ba
n phi
m.
Cch 1: S
du ng phng pha
p qui
V
i i nh nghi
a da
ng ta d da
ng th y thu t toa
n n gia
n nh t gii
quy t ba
i toa
n la
du ng m t ha
m qui ti
nh F
n
, ch ng ha n nh sau:
int fibonaci(int k)
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
50
{
if(k>=2)
return (fibonaci(k-1)+fibonaci(k-2));
return 1;
}
Thu t toa
n trn la
ng va
hoa
n toa
n co
th ca
i t v
i m t ngn ng
l p tri
nh b t ky
co
h tr vi c s
du ng ca
c ha
m qui . Tuy v y y la
m t thu t toa
n khng hi u qua
, gi s
chng ta cn tnh F
6
:
Ta co
1
/ (1 5) / 2 1.61803
n n
F F
+
~ + ~ suy ra 1.61803
n n
F ~ v do cy nh phn tnh F
n
chi co hai nt l F
0
v F
1
nn chu
ng ta se
co
x p xi
1.61803
n
l n go i t
i ha
m fibonaci (trn
th c t n=6 l 13 l n) hay co
th no
i ph
c ta p cu
a thu t toa
n la
ha
m mu
.
Cch 2: S
du ng phng pha
p qui hoa ch ng
Chng ta hon ton co th s dng mt thut ton co phc tap tuyn tnh tnh F
n
b ng ca
ch s
du ng m t ma
ng lu ca
c gia
tri du
ng ti
nh F
n
:
F
0
= 0
F
1
= 1
For i = 2 to n
F
i
= F
i - 1
+ F
i 2
Tuy nhin gia
m c th
i gian ti
nh toa
n thi
la i m t thm b nh
ch
a ca
c k t qua
trung gian trong qua
tri
nh ti
nh toa
n.
Qua vi
ch thi t k va
nh gi gii thut
51
+ Qui hoa ch ng la
m t ky
thu t ti
nh toa
cu
a ca
c ba
i toa
n con th
ng c lu va
o m t ma
ng.
3. Bi ton 2: Bi ton nhn dy cc ma trn
Gi s chng ta cn nhn mt day cc ma trn : .... A B C D . Hay xy dng thut
ton sao cho s phep nhn cn s dng l t nht.
Chng ta bit rng nhn mt ma trn kch thc X Y v
i m t ma tr n ki
ch th
c
Y Z (s
du ng thu t toa
n nhn ma tr n bi
nh th
m s phe
p nhn c n du
ng chu
ng ta se
tra
nh ta o ra ca
c ma tr n trung gian co
ki
ch
th
c l
n va
do phe
phep nhn ma trn khng phi l i xng nn khng th hon v th t ca chng m khng
lm thay i kt qu.
Gi s chng ta co 4 ma tr n A, B, C, D v
i ca
c ki
ch th
c tng
ng la
30 1 , 1 40 ,
40 10 , 10 25 . S gia
n v
hi u qua
ti
nh toa
n (s phe
p nhn c n du
ng ti
nh ra k t qua
cu i cu
ng sai kha
c nhau r t l
n ).
V y la
m th na
o ti
m ra k t qua
t i u nh t?
Gi M(i,j) l s lng phep nhn nho nht cn thit tnh
j
k
k i
A
=
[
ta co
nh n xe
t sau:
+ Cc du ngoc ngoi cng phn hoach day cc ma trn (i,j) tai mt v tr k no o.
+ C hai na ca day cc ma trn (i,j) tai im phn hoach k s u co th t cc du
ngo c l ti u.
T
ta ru
t ra cng th
ma tr n A
i
co kch thc l (d
i-1
, d
i
).
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
52
Cung ging nh trong trng hp ca bi ton Fibonaci nu chng ta s dng m t ca
i
t qui thi
ph
c ta p cu
a thu t toa
n se
la
ha
m mu
vi
se
co
r t nhi u l
i go i ha
m gi ng
nhau c th c hi n.
N u co
n ma tr n suy ra se
co
n +1 s nguyn la
ki
ch th
c cu
a chu
ng va
se
co
t h p
ch p 2 ca n ph n t
ca
c xu con (m i xu tng
ng v
i m i th
t cu
a ca
c d u ngo c ) gi
a
1 v n nn chi cn dng O(n
2
) khng gian nh
lu k t qua
ca
ca
c ba
i toa
n con.
Lai do k nm gia i ,j theo phn ti
ch trn nn chu
ng ta co
th lu tr cc kt qu trung
gian cu
a ba
i toa
c , ng th
i chi
ra nghi m a t c k t qua
t i
u cho ba
i toa
n chu
ng ta co
th lu gia
tri k va
o m t ma tr n tam gia
c cu
ng ki
ch th
c kha
c.
Thu t ton tnh M(1,n):
int matrixOrder
{
for(i=1;i<=n;i++)
M[i][j] = 0;
for(b=1;b<n;b++)
for(i=1;i<=n-b;i++)
{
j = i+b;
M[i][j] =
1 1
( , ) ( 1, )
i k j i k j
Min M i k M k j d d d
s s
( + + +
faster[i][j] = k;
}
return M[1][n];
}
Thu t toa
n in nghi m:
void showOrder(i,j)
{
if(i==j)
printf(A[i]);
else
{
k = faster[i][j];
printf(();
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
53
showOrder(i,k);
printf(*);
showOrder(k+1,j);
printf());
}
}
4. Phng pha
p qui hoa ch ng
Qua hai vi
du trn chu
ng ta co
th th y qua
tri
nh pha
t tr i n cu
a m t thu t toa
n qui hoa ch
ng co
th c chia la
m 4 b
c nh sau:
1. Xc inh c im cu trc cua gii php ti u cua bi ton
2. Tm cng thc truy hi ( qui) xc inh gi tri cua mt gii php ti u
3. Tinh gi tri ti u cua bi ton da vo cc gi tri ti u cua cc bi ton con cua
no (bottom-up).
4. Xy d ng nghi m a t gia
tri ti u t
ca
c thng tin a
ti
nh.
Cc bc 1-3 l cc bc c bn trong vic gii bt c bi t on ti u no bng phng
php qui hoach ng. B
khng c n chi
ra nghi m cu th . Thng th
ng 2 b
c u la
quan tro ng va
cu
ng la
kho
khn hn ca
, vi c xa
c i nh c u tru
c nghi m cu
ng nh cng th
c truy h i c n d a va
o kinh
nghi m va
s quan sa
t ca
c tr
ng h p cu th cu
a ba
i toa
n . Do v y trong qua
tri
nh xy d ng
thu t toa
c ba
i toa
n t i u chu
ng ta c n kha
o sa
t ca
c b gia
tri th c t
ca bi ton, gi tr ti u v nghim ca bi ton ng vi cc b gi tr o.
co
th hi u ro
hn qua
tri
nh a
p du ng ca
c b
c cu
a phng pha
i
bi ton ti u chng ta xet v d th 3 sau:
5. Bi ton dy con chung di nht
Cho 2 day k t X[n] v Y[m] hay xy dng thut ton tim day con chung ln nht ca
hai da
y trn, v
i da
y con cu
a m t da
y c i nh nghi
a la
m t t p con ca
c ky
t cu
a da
y (gi
nguyn th
t ).
V d vi: X = A L G O R I T H M
Y = L O G A R I T H M
Thi day con chung di nht l Z = LORITHM
Bc 1: Xc nh c i m ca day con chung di nht (gii php ti u ca bi ton)
+ Gi s
chu
ng ta a
co
i gia
i la
Z[1..k]
+ N u hai ky
t cu i cu
ng cu
a X va
Y tru
ng nhau thi
cu
ng la
ky
t cu i cu
ng cu
a Z.
+ Ph n co
n la i cu
a Z khi o
se
la
xu con chung da
i nh t cu
a X[1..n-1] v Y[1..m-1].
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
54
+ N u hai k t cui ca X v Y khng trng nhau thi mt trong s chng s khng nm
trong Z (co th c hai).
+ Gi s k t khng nm trong Z trong trng hp o l k t ca X
+ Th thi
Z se
la
day con da
i nh t cu
a X[1..n-1] v Y[1..m].
+ Ng c la i n u ky
t khng n m trong Z la
ky
t cu
a Y thi
Z se
la
da
y con da
i nh t cu
a
X[1..n] v Y[1..m-1].
Bc 2: Xy dng cng thc truy hi tnh di ln nht ca day con ca 2 day
T bc 1 ta co th tin hnh xy dng cng thc truy hi nh sau:
+ Gi C[i][j] l di day con ln nht ca hai day X[1..i] v Y[1..j]
+ C[i][0] = C[0][j] vi mi i, j.
+ Li gii ca bi ton chnh l C[n][m].
+ Cng thc truy hi
[ 1][ 1] 1(1)
[ ][ ]
max( [ 1][ ], [ ][ 1])(2)
C i j
C i j
C i j C i j
+
=
+ Tr
ch thi t k va
nh gi gii thut
55
for(i=0;im;i++)
C[i][0] = 0;
for(j=0;jn;j++)
C[0][j] = 0;
for(i=1;im;i++)
for(j=1;jn;j++)
if(X[i]==Y[j])
C[i][j] = C[i-1][j-1] + 1;
else
C[i][j] = max(C[i-1][j],C[i][j-1]);
return C[m][n];
}
Bc 4: Tim day con di nht ca X [1..n] v Y[1..m](Xy d ng nghi m a t gia
tri t i
u t
ca
c thng tin a
ti
nh)
tim lai c nghim chng ta s dng mt bng D[i][j] tro ngc ti (i, j-1) hoc (i-
1, j) hoc (i-1, j-1) v ln ngc t D[m][n] nh sau: nu D[i][j] tro ti (i-1, j-1) th X[i] =
Y[j] l k t ny s nm trong day con di nht ca 2 xu. Vic D[i][j] tro ti (i-1,j-1), (i-1,j)
hoc (i,j-1) ph thuc vo gi tr ca mng C tai v tr no c s dng tnh C[i][j]. Cc
gi tr ca mng D s c tnh nh sau:
D[i][j] bng 1 (trn tri) nu C[i][j] = 1 + C[i-1][j-1], bng 2 (trn) nu C[i][j] = C[i-
1][j] v bng 3 (tri) nu C[i][j] = C[i][j-1].
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
56
Thut ton tim nghim: Nu D[i][j] tro ti (i-1, j-1) (1 trn tri) th X[i] = Y[j] v k
t ny s nm trong day con l nghim.
char * findSolution()
{
row = m, col = n, lcs=;
while((row>0)&&(col>0))
{
if(D[row][col] == 1)
{
lcs = lcs + X[row];
row = row 1;
col = col - 1;
}else{
if (D[row][col]==2)
row = row 1;
else if (D[row][col] = 3)
col = col 1;
}
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
57
}
reverse lcs; // o ngc xu lcs
return lcs;
}
Qui hoach ng l mt phng php rt hiu qu gii rt nhiu cc vn ti u hoa
thuc nhiu linh vc khc nhau (Tin hc, Kinh t, iu khin, ...) tuy nhin trong khun kh
ca bi bo ny tc gi chi trinh by vic ng dng qui hoach ng vo gii mt s cc bi
ton ti u m dang ca chng thng c ra trong cc k thi hc sinh gioi hay Olympic Tin
hc thng qua 3 v d c th. Hy vng bi bo gip c t nhiu cho c gi trong vic bc
nm bt v s dng phng php qui hoach ng gii cc bi ton ti u.
6. Bi tp
Bi 1: ContestSchedule
Vo nm 3006 h u h t ca
c u c th c hi n lin qu c gia va
hoa
n toa
n online . T t ca
cc cuc thi lp trinh ny u c ln lch mt cch hon ho . Th
i gian cu
a m i cu c thi
c xa
c i nh b
i hai s nguyn s va
t tng
ng v
i th
i gian b t u va
k t thu
c (tr
c th
i
i m t). Vi th nu mt cuc thi kt thc vo thi im t=10 v bt u vo thi im s=10 thi
m t l p tri
nh vin co
th tham gia va
o ca
hai cu c thi.
L mt lp trinh vin co kinh nghim nn i vi bt c cuc thi no Tom cung co th
d oa
n chi
nh xa
c ti
l th ng cu c cu
a mi
nh . Cho tr
c m t danh sa
ch ca
ca
ch thi t k va
nh gi gii thut
58
D
li u chng tri
ng la
ng la
s , t va
p (1 s s, t s 1000000, 1 s p s
100) l thi gian bt u, k t thu
c va
ti
l th ng cu
a cu c thi.
Output
K t qua
ly
cu
a chng tri
nh ghi va
o 1 file text v
i chi
nh xa
c n 5 ch
s sau d u
ph y.
V d
Input Output
1 10 100
10 20 100
20 30 100
30 40 100
4.0
10 20 20
30 40 60
15 35 90
0.9
1 100 85
99 102 100
101 200 60
1.45
Bi 2: JoinedString
Cho m t da
y ca
c t
tha
nh l p t
ca
c ch
ca
a t t ca
ca
c t
t Alphabet.
Input
D
li u cu
a chng tri
c ghi trn m t do
ng
(s t
nho
hn 13), da
i cu
a ca
c t
nho
ly
cu
a chng tri
nh ghi va
o m t file text.
V d
Input Output
BAB
ABA
ABAB
ABABA
AKAKA
AKABAS
ABAKA
ABABAKAKABAS
Bi 3: JumpyNum
M t s Jumpy la
m t s nguyn dng va
ch thi t k va
nh gi gii thut
59
Cc s thng 28459 28549 1091919 97753
Cc s Jumpy 290464 13131313 9753 5
Hay vit chng trinh xc nh xem gia hai s nguyn low , high co
bao nhiu s
Jumpy.
Input
D
li u cu
a chng tri
ly
cu
a chng tri
nh ghi va
o m t file text.
V d
Input Output
1
10
9
9
23
9
8000
20934
3766
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
60
CHNG VI: CHI
ng c s
du ng gia
i ca
c ba
i toa
na
o o
se
d n n m t nghi m t i u toa
n cu c cho ba
i toa
n c n gia
ng r t d ca
i t, nhanh ( ph
c ta p th
i gian th
ng la
ha
m tuy n ti
nh ho c cu
ng l m la
b c 2) , d g
l i va
du ng i
t b nh
khng pha
i lu
c na
o chu
ng
cung cho cc li gii ti u.
Qui hoa ch ng khng hi u qua
Cc thut ton m chng ta a mi hc v qui hoach ng chng han nh thut ton
nhn ma tr n (O(N
2
)), thu t toa
n ti
m xu con da
n i v
i cy nhi
phn t i u (O(N
3
)) u l cc thu t toa
n xe
t trn m t khi
a ca nh na
o o
v n co
th cho la
khng hi u qua
i la
i v
i ca
c thu t toa
n na
y chu
ng ta co
r t nhi u
l a cho n trong vi c ti
nh toa
n ti
m ra m t gia
i pha
p t i u va
c n pha
i th c hi n ki m tra
theo ki u exshauted i v
i t t ca
ca
c l a cho n na
ng gia
i quy t ca
c ba
i toa
n ma
chng ta co th quyt nh u l la chn tt nht.
Th c hi n l a cho n theo ki u tham lam (Greedy Choice).
M i khi c n quy t i nh xem se
cho n l a cho n na
o chu
ng ta se
cho n ca
c l a cho n t t
nh t va
o th
ng ta se
cho n m t ca
ch tham lam
maximize l i nhu n cu
a chu
ng ta ). T t nhin ca
i bao gi
cu
ng
d n n m t k t qua
ng . Ch ng ha n cho da
y con
ca no sao cho day con o l mt day n iu tng . D da
ng th y k t qua
ng la
<3, 4, 5, 7,
8, 9>. Tuy nhin theo ca
u la
3, 4, 5 s chn
ti p ph n t
17, ph n t
h p tha
nh m t da
y tng da
i hn i v
i ca
c ph n t
c cho n
tr
c o
va
k t qua
se
la
na
y khng pha
i la
k t qua
ng.
2. Bi ton i tin
Bi ton pht biu nh sau: co mt lng tin n n v (ng) v k ng tin mnh gi
ln lt l m1, m2, .., mk n v. Vi gi thit s lng cc ng tin l khng han ch, hay
i n ng tin thnh cc n tin a cho vi s lng cc ng tin s dng l t nht. Mt
cch n gin theo nguyn l tham n chng ta thy rng m bo s ng tin s dng l
t nht chng ta s c gng s dng cc ng tin co mnh gi ln nhiu nht co th. V d vi
289 ng v cc ng tin mnh gi 1, 5, 10, 25, 100 chng ta co th co mt cch i l 2
ng 100, 3 ng 25, 1 ng 10 v 4 ng 1.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
61
Tuy nhin trn thc t bi ton i tin l mt bi ton dang xp ba l (knapsack) v
thuc lp bi ton NP y nn thc cht chi co 2 cch gii quyt: dng qui hoach ng vi
cc gi tr nho v duyt ton b.
3. Bi ton lp lich
M t pho
ng ho c chi
co
th s
du ng cho m t l
p ho c ta i m t th
i i m . Co n lp hc
mu n s
du ng pho
ng ho c , m i l
p ho c co
m t li ch ho c c cho b
i m t khoa
ng th
i gian I
j
= [s
j
, fj] co nghia l lp hc s hc bt u t thi im s
j
t
i th
i i m f
j
. Mc ch ca bi
ton l tim mt lch hc sao cho s lng lp hc co th s dng phng hc l ln nht co th
c va
t t nhin khng co
hai l
p na
o cu
ng s
du ng pho
ng ho c ta i m t th
i i m (khng co
hai l
p tru
ng li ch ho c).
Gi s lch hc ca cc lp c sp theo th t tng ca thi gian k t thu
c nh sau:
1 2
...
n
f f f < < <
C u tru
c cu
a m t li ch ho c t i u
Gi S
i,j
l tp cc lp hc bt u sau thi im f
i
v kt thc trc thi im s
j
, co
nghia l cc lp ny co th c sp xp gia cc lp C
i
v C
j
.
Chng ta co th thm vo 2 l
p gia
i nh C
0
v C
n+1
v
i f
0
= - va
S
n+1
= +. Khi o
gia
tr S
0,n+1
s l tp cha tt c cc lp.
Gi s lp C
k
l mt phn ca lch hc ti u ca cc lp nm trong S
i,j
.
Th thi
i < k < j va
li ch ho c t i u bao g m m t t p con l
n nh t cu
a S
i,k
, {C
k
}, v mt
t p con l
n nh t cu
a S
k,j
.
Do o
c sau:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
62
0 if j = i+1
( , )
max( ( , ) ( , ) 1) if j > i+1
i k j
Q i j
Q i k Q k j
< <
+ +
Th c hi n m t l a cho n tham lam
B 1: T n ta i m t li ch ho c (th
i kho
a bi u) t i u cho t p S
i,j
ch
a l
p C
k
trong S
i,j
k t thu
c u tin, co nghia l lp C
k
trong S
i,j
v
i gia
tri chi
s k nho
nh t.
B 2: N u cho n l
p C
k
nh b 1 t p S
i,k
s l tp rng.
Thu t toa
c d
li u s
du ng ch
a S , thu t toa
n se
co
ph
c ta p th
i gian la
O(n
2
) ho c O(nlog(n)). Thm va
o o
thu t toa
n se
m t m t chi phi
cho vi c ba
o tri
ngn x p
vi no l qui.
Thu t toa
n tham n th
i gian tuy n ti
nh theo ki u l p
Iterative-Schedule(S)
1 n = |S|
2 m =
3 O = {}
3 for i = 1..n
4 do if s
i
m
5 then O = O {C
i
}
6 m = f
i
7 return O
Minh ho a qua
tri
nh th c hi n cu
a thu t toa
n
:
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
63
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
64
Thu t toa
n trn hi n nhin co
th
i gian th c hi n tuy n ti
nh va
no
la
ng n d a trn
b sau: Go i O la
t p ca
c l
p hi n ta i , v C
k
l lp cui cng c thm vo O. Th thi
i
v
i l
p C
l
b t ky
ma
l > k, n u C
l
xung t v
i m t l
p trong O no
se
xung t v
i C
k
.
Cc bin th ca bi ton : Thay vi
ti
m s l ng l
n nh t ca
c l
p co
th s
du ng pho
ng
hc chng ta co th thay i yu cu ca bi ton l tim thi gian ln nht m phng hc c
s
du ng. Cch tip cn qui hoach ng khi chng ta thay i mc tiu ca bi ton l khng
i nhng ca
c l a cho n tham n cu
a theo ki u nh trn se
khng la
m vi c c i v
i ba
i
ton ny.
4. So snh chin lc tham lam v qui hoch ng
V y khi na
o thi
thu t toa
n tham n se
cho nghi m t i u?
Bi ton c gii quyt bng thut ton tham n (th
ng la
ca
c ba
i toa
n t i u ) n u
nh no
co
hai c i m sau:
+ Tnh la chn tham n (greedy choice property): M t nghi m t i u co
th nh n c
b ng ca
ch th c hi n ca
c l a cho n co
ve
nh la
t t nh t ta i m i th
i i m ma
khng c n quan
tm t
i ca
c g i y
cu
a no
i v
i ca
c nghi m cu
a ca
c ba
i toa
n con . Hay no
i m t ca
ch d hi u la
m t nghi m t i u cu
a ba
i toa
n co
th nh n c b ng ca
ch th c hi n ca
c l a cho n t i u cu c
b .
+ M t nghi m t i u co
th nh n c b ng ca
ch
a ca
c nghi m t i u i v
i ca
c ba
i toa
n con ki
ch th
c nho
hn . Tnh
ch t na
y c go i la
c u tru
c nhau c ba
n gi
a ca
c thu t toa
n qui hoa ch ng va
ca
c thu t toa
n tham n o
la
i v
i ca
c thu t toa
n tham n chu
ng ta khng c n bi t ca
c nghi m cu
a ca
c ba
i toa
n con co
th th c hi n m t l a chn no o. V vi mt bi ton co th co rt nhiu cc nghim ti u
khc nhau nn cc thut ton tham n co th hiu qu hn cc thut ton qui hoach ng.
Chu : Trong m t s ba
i toa
n n u xy d ng c ha
i toa
n, thu t toa
n tham n chi
cho nghi m g n u
ng v
i nghi m
t i u.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
65
TI LIU THAM KHO
1. Wikipedia, T
i n ba
ch khoa toa
n th tr c tuy n ti ng Vi t ,
http://vi.wikipedia.org/wiki/.
2. Wikipedia, T
i n ba
ch khoa toa
n th tr c tuy n ti ng Anh ,
http://en.wikipedia.org/wiki/Main_Page.
3. Cc ti liu v b i ging tai website :
http://csce.unl.edu/~cusack/Teaching/?page=notes.
4. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein,
Introduction to Algorithms, Second Edition, The MIT Press, 2001, 1180 pages.
5. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, C++
Cookbook, OReilly, November 2005, 592 pages.
6. Nguyn Hu in, Gio trinh mt s vn v thut ton, NXB Gio dc, 2003
7. inh Manh Tng. Cu trc d liu v thut ton. NXB ai hc Quc gia H ni.
2002.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
66
THI THAM KHO
s 1:
Cu 1:
a) Th na
o la
ba
i toa
n ti
m ki m ? Hay trinh by cc bc , a
nh gia
ph
c ta p
v v s ca thut ton tim kim tuy n ti
nh?
b) Vi t ha
m ca
i t thu t toa
n s p x p n i bo t tng d n trn ma
ng c u tru
c cng
nhn g m ca
c tr
ng kho
a sp xp l trng lng, n u cu
o la
ba
i toa
n ti
m ki m ? Hay trinh by cc bc , a
nh gia
ph
c ta p
v v s ca thut ton tim kim nh phn?
b) Vi t ha
m ca
i t thu t toa
ng c u tru
c cng
nhn g m cc trng thng tin sau:
- Tn
- H s lng
- Ph cp
Tr
ng kho
ch thi t k va
nh gi gii thut
67
b) Thc hin cc bc ca thut ton sp xp nhanh vi mng s nguyn sau: 3,
8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) Trinh by thut ton nhn day ma trn v p dng tim s phep nhn t nht
thc hin nhn day cc ma trn co kch thc: 15x5, 5x20, 20x10, 10x7.
b) Trinh by thut ton tim day con gm cc phn t lin tip co tng ln nht
ca day s nguyn sau: -8, 9, 7, -2, -19, 2, -9, 2, 3, 28, -9.
s 3:
Cu 1:
a) Th na
o la
ba
i toa
n ti
m ki m ? Hay trinh by cc bc , a
nh gia
ph
c ta p
v v s ca thut toa
n ti
m ki m tuy n ti
nh?
b) Vi t ha
m ca
i t thu t toa
ng c u tru
c cng
nhn g m ca
c tr
ng kho
a sp xp l trng lng, n u cu
ng lng thi
theo tui.
Cu 2:
a) Trinh by v ci t thut ton sinh cc hon v ca s nguyn u tin vi n
nhp t bn phm.
b) Thc hin cc bc ca thut ton sp xp trn vi mng s nguyn sau: 3, 8,
10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) Trinh by thut ton nhn day ma trn v p dng tim s phep nhn t nht
thc hin nhn day cc ma trn co kch thc: 5x50, 50x10, 10x20, 20x15
s 4:
Cu 1:
a) Th na
o la
ba
i toa
n ti
m ki m ? Hay trinh by cc bc , a
nh gia
ph
c ta p
v v s ca thut ton tim kim nh phn?
b) Vi t ha
m ca
i t thu t toa
ng c u
trc cng nhn g m ca
c tr
ng kho
a sp xp l trng lng, n u cu
ng lng thi
theo tui.
Bi ging mn hc: Phn ti
ch thi t k va
nh gi gii thut
68
Cu 2:
a) Trinh by v ci t thut ton sinh xu s t cc s 2, 3, 5 vi di n nhp
t bn phm.
b) Thc hin cc bc ca thut ton sp xp nhanh vi mng s nguyn sau:
3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) Trinh by thut ton nhn day ma trn v p dng tim s phep nhn t nht
thc hin nhn day cc ma trn co kch thc: 5x50, 50x10, 10x20, 20x15.
b) Ap dng thut ton tim xu con chung di nht ca hai xu X1 =
ABCABCCB v X2=BCAABCCA.
s 5:
Cu 1:
a) Th na
o la
ba
i toa
nh gia
ph
c ta p
v v s ca thut ton tim kim tuyn tnh?
b) Vi t ha
m ca
i t thu t toa
n s p x p n i bo t tng d n trn ma
ng c u tru
c Hc
sinh g m ca
c tr
ng kho
theo tui.
Cu 2:
a) Trinh by v ci t thut ton sinh xu s t cc s 3, 7, 2 vi di n nhp
t bn phm.
b) Thc hin cc bc ca thut ton sp xp trn vi mng s nguyn sau: 3, 8,
10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) Trinh by thut ton nhn day ma trn v p dng tim s phep nhn t nht
thc hin nhn day cc ma trn co kch thc: 15x5, 5x20, 20x10, 10x15
b) Trinh by thut ton tim xu con chung di nht ca hai xu con.