You are on page 1of 74

B GIAO THNG VN TI

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

n : chin lc chia tr, chin lc quay lui,


chin lc qui hoach ng, chin lc tham lam
- Ki n th

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

a chi n l c chia tri


4.2. Thu t toa

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

n theo chi n l c tham lam


6.4. So sa

nh chi n l c tham lam v

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

n (gii thut) - Algorithm ............................................................................... 2


1.1. i nh nghi

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

i gian th c hi n thu t ton ................................................................. 4


3.3. Cc nh nghia hinh thc v phc tap thut ton ............................................. 5
3.4. Cc lp thut ton .................................................................................................. 7
4. C u tru

c d

li u Data structure .................................................................................. 9


5. Cc chin lc thit k thut ton. ................................................................................ 9
5.1. Duyt ton b (Exhausted search) ......................................................................... 9
5.2. qui quay lui Backtracking ............................................................................. 9
5.3. Chia tri (Divide and Conquer) .......................................................................... 9
5.4. Chi n l c tham lam (Greedy) ............................................................................ 10
5.5. Qui hoa ch ng (Dynamic Programming) .......................................................... 11
6. Bi tp ......................................................................................................................... 11
CHNG II: S

P X

P (SORTING) V TM KIM (SEARCHING) .................................. 13


1. Bi ton sp xp .......................................................................................................... 13
1.1. S p x p trong (Internal Sorting) .......................................................................... 13
1.2. S p x p ngoi (External Sorting) ......................................................................... 13
1.3. S p x p gin tip .................................................................................................. 13
1.3. Cc tiu chun nh gi mt thut ton sp xp .................................................. 14
2. Cc phng php sp xp c bn ................................................................................ 15
2.1. S p x p cho n (Selection sort) .............................................................................. 15
2.2. S p x p i ch tr c ti p (Exchange sort) ........................................................... 17
2.3. S p x p che

n (Insertion sort) ............................................................................... 19


2.4. S p x p n i bo t (Bubble sort) .............................................................................. 21
Bi ging mn hc: Phn ti

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

li u Heap, s p x p vun ng (Heap sort). ............................................... 24


4. Tim kim tuyn tnh .................................................................................................... 31
5. Cc vn kha

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

t ca n (Brute force) ............................................................................. 34


3. Chi n l c quay lui (Back tracking / try and error) ................................................ 35
CHNG IV: CHI

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

p qui hoa ch ng .................................................................................. 53


5. Bi ton day con chung di nht ............................................................................. 53
6. Bi tp ..................................................................................................................... 57
CHNG VI: CHI

N L C THAM LAM (GREEDY) ....................................................... 60


1. Nguyn tc tham lam............................................................................................... 60
2. Bi ton i tin ...................................................................................................... 60
3. Bi ton lp lch....................................................................................................... 61
4. So snh chin lc tham lam v qui hoach ng .................................................... 64
TI LIU THAM KHO ........................................................................................................ 65
THI THAM KHO ............................................................................................................ 66
Bi ging mn hc: Phn ti

ch thi t k va

nh gi gii thut
1

LI NI U
C u tru

c d

li u va

cc chin lc thit k thut ton l cc linh vc nghin cu gn lin


v

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

n v cc chin lc xy dng thut ton cho


phep cc lp trinh vin, cc nha

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

i thu t l mt i u quan tro ng.


Ti liu ny da trn nhng kinh nghim v nghin cu m tc gi a c rt , thu thp
trong qu trinh ging day mn hc C u tru

c d

li u va

gia

i thu t tai khoa Cng ngh Thng


tin, ai hc Hng hi Vit nam, cng vi s tham kh o cu

a ca

c ta

i li u cu

a ca

c ng nghi p ,
cc tc gi trong v ngoi nc , t

i n tr c tuy n Wikipedia . Vi b y chng c chia


thnh cc ch khc nhau t ca

c kha

i ni m c ba

n cho ti thu t toa

n s p x p , tim kim, cc
chi n l c thi t k thu t toa

n nh qui , quay lui , qui hoa ch ng, tham lam hy vng s


cung cp cho cc em sinh vin , cc ban c gi mt ti liu b ch . Mc d a rt c gng
song vn khng trnh khoi mt s thiu sot, hy vng s c cc ban b ng nghip, cc em
sinh vin, cc ban c gi gop chn thnh ti co th hon thin hn na ti liu ny.
Xin gi li cm n chn thnh ti cc ban b ng nghip v Ban ch nhim khoa
Cng ngh Thng tin a tao iu kin gip ti liu ny co th hon thnh.
Hi phng, thng 04 nm 2010
Tc gi

Nguy n H

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

n (gii thut) - Algorithm


1.1. i nh nghi

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

o khoa n i ti ng vi t v thu t toa

n l Introduction to
Algorithms (Second Edition cu

a Thomas H . Cormen, Charles E . Leiserson, Ronald L .


Rivest va

Clifford Stein ) thi thut ton c nh nghia nh sau : m t thu t toa

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

c i nh (well-defined) no o. Vi th mt oan ma chng trinh tnh


cc phn t ca day s Fibonaci l mt ci t ca mt thut ton c th . Th m chi

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

c trng quan tro ng nh t i v

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: N u a=b th USCLN(a, b)=a.


B

c 2: N u a > b th tm USCLN ca a-b v b, quay lai b

c 1;
B

c 3: Nu a < b th tm USCLN ca a v b-a, quay lai 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

n, chi co duy nht mt ng ra;


Kh i 2: Kh i k t thu

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

c Boolean), n u biu thc u

ng
thu t toa

n se

i theo nha

nh ng (True), nu bi u thc sai thu t toa

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

i gian th c hi n thu t ton


minh ha vic nh gi phc tap thut ton ta xem xt v d v thut ton sp xp
chn (selection sort) v sp xp i ch trc tip (exchange sort) nh sau:
Ci t ca thut ton sp xp chn:
for(i=0;i<n;i++)
{
min_idx = i;
for(j=i+1;j<n;j++)
if(a[j]<a[min_idx])
min_idx = j;
if(min_idx!=i)
{
temp = a[i];
a[i] = a[min_idx];
a[min_idx] = temp;
}
Bi ging mn hc: Phn ti

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

n sp xp chn tt hn, do o co th kt lun thut


ton sp xp chn nhanh hn so vi thut ton sp xp i ch trc tip.
3.3. Cc inh nghia hnh thc v phc tp thut ton
Gi f, g la

ca

c ha

m khng gia

m i nh nghi

a trn t p ca

c s nguyn dng . (ch l tt


c cc hm thi gian u thoa man cc iu kin ny ). Chng ta noi rng hm f(N) l O(g(N))
(o c la

: 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

i f (N) l O(g(N)) chng ta thng vit l f (N) = O(g(N)). Ch rng ng


th

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

du v s p x p b ng cho n ta co f(N) = N*(N-1)/2 = 0.5N


2
0.5N
chng ta co th vit l f(N) = O(N
2
). Co nghia l hm f khng tng nhanh hn ha

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

4 l n khng phu thu c va

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

ch vi t O l chi ra chn di v Ol chi ra mt gii han cht ch


ca mt hm. Cn co nhiu gii han khc na nhng y l cc gii han m chng ta hay gp
nh t.
M t va

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

O(N*log(N)) co nghia l MergeSort l


ti m c n v

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

ng h p x u nh t (the worst case) v


tr

ng h p t t nh t (the best case).


Bi ging mn hc: Phn ti

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

i gian/ khng gian nh

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

n th c hi n 1000000000 phep nhn co th


khng tho

a ma

n ra

ng bu c th

i gian. Chng ta co th tham kho bng sau bit thm:


phc tp Gi tri N ln nht
O(N) 100 000 000
O(N log N) 40 000 000
O(N2) 10 000
O(N3) 500
Bi ging mn hc: Phn ti

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

c ch n O. Tuy nhin trn th c t chu

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

c s p A . Hay xc nh xem trong mng A co hai phn t


no m hiu ca chng bng D hay khng. Hay xem oan ma chng trinh sau:
int j=0;
for (int i=0; i<N; i++)
{
while ( (j<N-1) && (A[i]-A[j] > D) )
j++;
if (A[i]-A[j] == D)
return 1;
}
R t d no

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

m t chi n l c quan tro ng trong vi c thi t k ca

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

i ton o thnh cc bi ton nho hn, gii cc bi ton nho hn o,


sau o

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

hai y u t : lm th no chia tch bi ton


m t ca

ch h p ly

tha

nh ca

c ba

i toa

n con , vi nu cc bi ton con lai c gii quyt bng cc


thu t 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

du ny chng ta s xem xet thut ton tnh


N
a .
ti

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 ton nu xy dng c hm chn thch hp co th cho nghim


t i u. Trong nhi u 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

th c (bi ton maximum sum plateau). Hay a ra nh


gi v phc tap ca thut ton s dng.
Bi tp 5: Vi t chng tri

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

m t s nguyn ) v mt gi tr x 0. Hay tnh gi tr ca a thc


theo cng th

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

, tm, vng. Hay a ra tt c cc cch x p ca

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

P (SORTING) V TIM KIM (SEARCHING)


1. Bi ton sp xp
1.1. S p x p trong (Internal Sorting)
Sp xp c xem l mt trong nhng linh vc nghin cu c in ca khoa hc my
tnh. Trc khi i vo cc thut ton chi tit chng ta cn nm vng mt s khi nim c bn
sau:
+ Mt trng (field) l mt n v d liu no o chng han nh tn, tui, s in thoai
ca mt ngi ...
+ Mt bn ghi (record) l mt tp hp cc trng
+ Mt file l mt tp hp cc bn ghi
Sp xp (sorting) l mt qu trnh xp t cc bn ghi ca mt file theo mt th t no
o. Vic xp t ny c thc hin da trn mt hay nhiu trng no o, v cc thng tin
ny c gi l kha xp xp (key). Th t ca cc bn ghi c xc nh da trn cc kha
khc nhau v vic sp xp i c thc hin i vi mi kha theo cc th t khc nhau.
Chng ta s tp trung vo cc thut ton xp xp v gi s kha chi gm 1 trng duy nht.
Hu ht cc thut ton xp xp c gi l cc thut ton xp xp so snh: chng s dng hai
thao tc c bn l so snh v i ch (swap) cc phn t cn sp xp.
Cc bi ton sp xp n gin c chia lm hai dang.
S p x p trong (internal sorting): D

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

trong s p x p , cc thao tc truy cp d liu cung mt nhiu thi gian


hn.
Trong pha m vi cu

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 n-1 (v tr cui cng). V

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

ng: 1, 2, 3, 6, 12, 19.


S thu t toa

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

c hn mi kha vo mt day con a c sp xp


ca dy cn sp. Phng php ny thng c s dng trong vic sp xp cc cy bi trong
qu trinh chi bi.
S gia

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

i nh sau: ban u ta coi nh ma

ng a[0..i-1] (g m i ph n
t

, trong tr

ng h p u tin i = 1) l a c sp , tai bc th i ca thut ton , ta se

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 a [i+1] vo mng a[0..i] m t ca

ch tng t . Thu t toa

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

ng, n u a[j] > tam thi

se

copy a [j] vo a[j+1], co nghia l li mng lai mt v tr


chn tam vo mng . Vng lp s kt thc nu a [j] < tam ho c j = -1, khi o

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

n s p x p n i nh (stable) v l thut ton


nhanh nh t trong s ca

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

nh b ng nhau , nhng do i ch hai ph n t

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

li u Heap, s p x p vun ng (Heap sort).


3.1. C u tru

c Heap
Tr

c khi ti

m hi u v thu t toa

n heap sort chu

ng ta se

ti

m hi u v m t c u tru

c c bi t
gi l c u tru

c Heap (heap data structure, hay co

n go i la

ng).
Heap la

m t cy nh phn y v tai mi nt ta co key (child) key(parent). Hay nh


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

2 con, noi tom lai l mc cui cng mt nt nu co con s co s


con i

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

l y logarit hai v ta lai c:


log(n + 1) h
T

2 i u trn suy ra:


3
7
4
5 17
7
2 6
9 13 1
Bi ging mn hc: Phn ti

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

, cung tng t ging nh biu din mt cy nh phn bng mt mng.


i vi mt heap lu trong mt mng chng ta co quan h sau (gi s

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

a trong heap c u tru

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

A[i], A[Left(i)], A[Right(i)].


+ N u A[i] khng pha

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

A[largest] s l A[Left(i)] ho c A[Right(i)].


+ Gi th tc vi nt la rgest (vi vic i ch co th lm thay i tnh cht ca heap co
i

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

t c heaprify trn cc nt theo th t ngc lai . V vi chay theo th t


ng c la i nn chu

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

ta i a[i], a[Left(i)] v a[Right(i)] l O(1). C ng thm v

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

: T(n) = T(2n/3) + O(1) do o

T(n) = O(log n), t

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

1, 2, 3, , log(n) 1, vi th thi gian


t ng se

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

bn v chng trong cc phn sau ca khoa hc.


3.2. S p x p vun ng (Heap sort)
Thu t toa

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

n -1 v quay tr lai xem xet phn u ca


mng a khng l mt heap n

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

trong heap khi o

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

m ki m : tim kim mt cun


sch c v mt vn cn quan tm , tim mt ti liu lu tr u o trn my tnh hoc
trn ma ng, tim mt t trong t in, tim mt bn ghi thoa man ca

c i u ki n na

o o

trong m t
c s

li u, tim kim trn mang Internet.


Trong mn ho c na

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

c (khoa tim kim). T

vi tri

ti

m th y na

y chu

ng ta co

th
truy c p t

i ca

c thng tin kha

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

i n, cc loai cy nh cy tim kim nh phn , cy cn b ng, cy o

en
Tuy nhin

ph n na

y chu

ng ta se

xem xe

t hai phng pha

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

u tin thoa man iu


ki n ti

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

10000000) thi thut ton lm vic tc chp nhn c , nhng khi s ph n t

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

file text c sinh ng u nhin (s


ph n 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

c sinh vin (tn: xu ky

t co

da

i t i a la

50, tu i: s nguyn, i m trung bi

nh: s
th

c), khoa sp xp l trng tn . So sa

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

c s p x p tng d n , a[i] khng ch

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

: Co th ci t thut ton c hn phn t vo mng nh phn ci t ca thut ton


s p x p che

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

s nguyn t hay khng.


Cc thut ton p dng chin lc vet can thuc loai : tim tt c cc nghim co th co .
V m t ly

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

ng chi n l c quan trng nht ca vic thit k thut ton. Tng


t nh chi n l c ve

t ca n song chi n l c quay lui co

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

c quay lui (back tracking) v tra ng tha

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

cho n l y m t nghi m tho

a ma

n m t
i u ki n cu th na

o o

(ch ng ha n nh t i u nh t theo m t tiu chi

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

t ca n, chi n l c quay lui


chi co th p dng cho cc bi ton kch thc input nho.
Vecto nghi m
Mt trong cc da ng ba

i toa

n ma

chi n l c quay lui th

ng a

p du ng la

ca

c ba

i toa

n ma


nghi m cu

a chu

ng la

c c cu hinh t hp. T tng chnh ca gii thut l xy dng dn cc


thnh phn ca cu hinh bng cch th ln lt tt c cc kh nng co th co. Nu tn tai mt
kh nng chp nhn c thi tin hnh bc k tip, tri lai cn li lai mt bc th lai cc
kh nng cha c th. Thng thng gii thut ny thng c gn lin vi cch din at
qui nap v co th m t chi tit nh sau:
Trc ht ta cn hinh thc hoa vic biu din mt cu hinh. Thng thng ta co th
trinh by mt cu hinh cn xy dng nh l mt b co th t (vecto) gm N thnh phn:
X = (x
1
, x
2
,,x
N
)
tho man mt s iu kin no o.
Gi thit ta a xy dng xong i-1 thnh phn x
1
, x
2
, , x
i-1
, by gi l bc xy dng
thnh phn x
i
. Ta ln lt th cc kh nng co th co cho x
i
. Xy ra cc trng hp:
Tn tai mt kh nng j chp nhn c. Khi o x
i
s c xc nh theo kh nng ny.
Nu x
i
l thnh phn cui (i=n) thi y l mt nghim, tri lai (i<n) thi tin hnh cc bc tip
theo qui nap.
Tt c cc kh nng c cho x
i
u khng chp nhn c. Khi o cn li lai bc
trc xc nh lai x
i-1
.
m bo cho vic vet can (exhausted) tt c cc kh nng co th co, cc gi tr c
khng c bo sot. Mt khc m bo vic khng trng lp, khi quay lui xc nh lai
gi tr x
i-1
cn khng c th lai nhng gi tr a th ri (cn mt ky thut nh du cc gi
tr a c th cc bc trc).
Trong phn ln cc bi ton, iu kin chp nhn j khng nhng chi ph thuc vo j m
cn ph thuc vo vic xc nh i-1 thnh phn trc, do o cn t chc mt s bin trang
thi ct gi trang thi ca bi ton sau khi a xy dng xong mt thnh phn chun b
Bi ging mn hc: Phn ti

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

m in nghim tim c ra mn hinh . Di y l ton b


chng tri

nh. Trong chng trinh co khai bo thm bin count m cc chinh hp c


tao.

Bi ging mn hc: Phn ti

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

m t chi n l c quan tro ng trong vi c thi t k ca

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

hn, gii cc bi ton nho hn o,


sau o

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

hai y u t : lm th no chia tch bi ton


m t ca

ch h p ly

tha

nh ca

c ba

i toa

n con , vi nu cc bi ton con lai c gii quyt bng cc


thu t 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: 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

m nh sau: merge_sort(a, 0, n-1);


Nhng thu t toa

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

n tr n nh n 2 mng con a c sp v tao thnh mt mng c sp . Thu t


ton 1 lm vic nh sau:
+ i vi mi mng con chng ta co mt con tro tro ti phn t u tin
+ t phn t nho hn ca cc phn t ang xet hai mng vo mng mi
+ Di chuy n con tro

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

C++ th c hi n thu t toa

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

n 1 gi s chng ta co 3 mng phn bit nhng trn thc t chng ta chi co 2


mng hay chnh xc l 2 ph n cu

a m t ma

ng l

n sau khi tr n la i tha

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

O(log n). Tai mi bc cng vic thc hin


co phc tap l O(n) do o

:
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

, ngoi ra thut ton ny l ph hp cho cc


ng dng i hoi sp xp ngoi.
Chng tri

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

quay sang bn pha

i ph n t

quay .
Ph n t

quay tr

thnh phn t co v tr ng trong mng.


+ qui: gi ti chnh th tc sp xp nhanh i vi hai na mng nm 2 bn ph n t


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

ngu nhin lm phn t quay.


Sau khi cho n 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

a phn hoa ch ? Co mt vi cch thc hin iu ny v chng ta s dng phng


th

c cho n ph n t

quay la

ph n t

tra

i nh t cu

a ma

ng . Cc phng thc khc cung co th ci


t b ng ca

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

a[l], a[(l+r)/2] ho c a[r] g n v

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

tu c phn hoa ch l a cho n ph n t

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

th c th c hi n trong O(n). Chi phi

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

n ho c cho th y Quick sort co

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

a tng d n, khoa tim kim k.


Output: v tr ca phn t co khoa bng k.
Thu t toa

n na

y thu c loa i thu t toa

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

nh left = (left+right)/2 + 1. Trong


b t c

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

i n = 6.000.000.000 thi s thao


tc cn thc hin tim ra kt qu l log (n) = 31 thao ta

c, co nghia l chng ta chi cn 31


b

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

y ) tuy nhin trong n i dung cu

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

o 1 mng s nguyn v mt s nguyn k, hay m


xem co

bao nhiu s b ng k . Nh p ti p 2 s x < y 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

c s nguyn . Hay tim v a ra v tr , gi


tr ca s dng u tin trong day, s nguyn t cu i cu

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

o nm 1957, l mt phng php gii bi ton bng cch kt hp


cc li gii cho cc bi ton con ca no ging nh phng php chia tr (devide-and-
conquer). Cc thut ton chia tr phn hoach bi ton cn gii qu y t tha

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

n ban u . Ng c la i qui hoa ch ng la

phng
php c a

p du ng khi ma

ca

c ba

i toa

n con cu

a ba

i toa

n ban u (bi ton gc) l khng c


l p v

i nhau, chng co chung cc bi ton con nho hn . Trong ca

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

th c s c n thi t , no s lp lai vic


gii quyt cc bi ton con nho hn o . M t thu t toa

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

p qui hoa ch ng gia

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

nh, bi ton pht biu nh sau:


Day s Fibonaci c cho bi cng thc qui v cc iu kin ban u nh sau:
1 2
0
1
, 2
0
1
n n n
F F F n
F
F

= + >


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

y Fibonaci trn chu

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

du 1 chng ta co mt s nhn xet sau:


Bi ging mn hc: Phn ti

ch thi t k va

nh gi gii thut
51

+ Qui hoa ch ng la

m t ky

thu t ti

nh toa

n qui hi u qu bng cch lu tr cc kt


qu cuc b.
+ Trong qui hoa ch ng kt qua

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

ng) s cn X Y Z phep nhn.


2 3 13 18 23
2 3 4
3 4 18 25 32
3 4 5
4 5 23 32 41
( (
(
( (
=
(
( (

( (


gia

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

p nhn ma tr n co tnh kt hp nn co th at c iu ny bng cch s


dng cc du ong m ngoc chi ra th t thc phep nhn gia cc ma trn . Bn ca nh o


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

i php s dng cc du ngoc co th l 3:


((AB)C)D = 30 1 40 30 40 10 30 10 25 20, 700 + + =
(AB)(CD) = 30 1 10 40 10 25 30 40 25 41, 200 + + =
A((BC)D) = 1 40 10 1 10 25 30 1 25 1400 + + =
Cc kt qu trn cho thy th t thc hin cc ma trn tao ra mt s sai khc r t l

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

c sau truy h i sau:


+ M(i,j) =
1 1
( , ) ( 1, )
i k j i k j
Min M i k M k j d d d
s s
( + + +


+ M(i,i) = 0
Trong o

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

n trn m t ma tr n tam gia

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

c 4 co th bo qua nu nh bi ton chi yu cu tim ra gi tr ti u


ch

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

n qui hoa ch ng cho ca

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

p qui hoa ch ng gia

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

ng h p 1 l khi X[i] = Y[j], cn trng hp (2) l khi X[i] khc Y[j]



Bc 3: Xy dng thut ton tim day con chung di nht ca 2 day X[1..n] v Y[1..m].
Th t tnh ton din ra nh sau: ban u chng ta tnh C[1][1], C[1][2], ..., C[1][n],
C[2][1], C[2][2], ..., C[2][n], ... phc ta p tnh C[i][j] bng O(1) vi i=1,n v j=1,m nn
phc tap ca thut ton l O(mn).
int longest_common_sequence(X, Y)
{
Bi ging mn hc: Phn ti

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

c cu c thi , hay gip


Tom ti

nh xem nn tham gia va

ca

c cu c thi no tng ti l thng ca anh ta l ln nht co


th c.
Input
Bi ging mn hc: Phn ti

ch thi t k va

nh gi gii thut
58

D

li u chng tri

nh c cho trong m t file text theo i nh da ng sau : trn m i do

ng la

li u v m t cu c thi g m 3 s nguyn tng

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

i ti ng Anh , hay tim xu co di nho nht


ch

a t t ca

ca

c t

trong day a cho. N u co

nhi u xu nh v y , hay a ra xu u tin theo


th

t Alphabet.
Input
D

li u cu

a chng tri

nh c cho trong m t file text , m i t

c ghi trn m t do

ng
(s t

nho

hn 13), da

i cu

a ca

c t

nho

hn 51 v chi cha cc k t ting Anh vit hoa.


Output
K t qua

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

cc ch s lin k ca no khc nhau t nht 2


n vi . V d:
Bi ging mn hc: Phn ti

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

nh c cho trong file text v

i 2 s low, high (nho hn 2000000)


c ghi trn 2 dng khc nhau.
Output
K t qua

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

N L C THAM LAM (GREEDY)


1. Nguyn tc tham lam
Cc thut ton tham n (greedy algorthims ) cung ging nh cc thut ton qui hoach
ng th

ng c s

du ng gia

i ca

c ba

i toa

n t i u (tim nghim ca bi ton tt nht theo


m t tiu chi

na

o o

). Cc thut ton qui hoach ng lun cho m t nghi m t i u.


Cc thut ton tham n thc hin cc la chn ti u cc b vi hy vng cc la chn
o

se

d n n m t nghi m t i u toa

n cu c cho ba

i toa

n c n gia

i quy t . Cc thut ton tham n


th

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

. Nhng th t khng may la

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

i nh t (O(mn)), thu t toa

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

. Tai sao v y? Cu tra

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

y. Chng ta mong mun co mt cch no o


quyt nh xem la chn no l tt nht hoc t nht cung han ch s lng cc la chn
m chng ta cn phi th.
Cc thut ton tham n (greedy algorithms ) c du

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

i i m hi n ta i (M i khi c n cho n chu

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

c l a cho n nh v y khng pha

i bao gi

cu

ng
d n n m t k t qua

ng . Ch ng ha n cho da

y s <3, 4, 5, 17, 7, 8, 9> c n cho n ra 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

c cho n tham n sau khi cho n xong 3 ph n t

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

<3, 4, 5, 17>, t t nhin k t qua

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

n u go i Q(i, j) l kch thc ca mt lch hc ti u cho tp S


i,j
chng ta co cng
th

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

n tham lam qui


Recursive-Schedule(S)
1 if |S| = 0
2 then return
3 Gi C
k
l lp co thi gian kt thc nho nht trong S
4 Loai bo C
k
v tt c cc lp bt u trc thi gian kt thc ca C
k
khoi S;
Gi S' l tp kt qu
5 O = Recursive-Schedule(S')
6 return O {C
k
}
D a trn c u tru

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 gia tng (augmenting) cc nghim


thnh phn a c xy dng vi mt nghim ti u ca bi ton con cn lai . Co nghia l mt
nghi m t i u se

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 con t i u (optimal substructure).


S kha

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

m cho n t hch hp co th cho


nghi m t i u. Trong nhi u 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
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 thng tin sau:


- Tn
- Tui
- Lng thng
Tr

ng kho

a sp xp l trng lng, n u cu

ng lng thi theo tn.


Cu 2:
a) Trinh by v ci t thut ton sinh xu s t cc s 1, 2, 3 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: 5x50, 50x10, 10x20, 20x15
b) Trinh by thut ton tim day con gm cc phn t lin tip co tng ln nht ca
day s nguyn sau: -9, 8, -3, 18, 4, -2, 8, -13, 20, -4, 8, 9, 3.
s 2:
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

n s p x p chn tng d n trn ma

ng c u tru

c cng
nhn g m cc trng thng tin sau:
- Tn
- H s lng
- Ph cp
Tr

ng kho

a sp xp l lng = h s lng * 750 + ph cp.


Cu 2:
a) Trinh by v ci t thut ton sinh xu s t cc s 1, 2, 3, 6 vi di n
nhp t bn phm.
Bi ging mn hc: Phn ti

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

n s p x p chn tng d n trn ma

ng c u tru

c cng
nhn g m ca

c tr

ng thng tin sau:


- Tn
- Tui
- Lng thng
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

n s p x p i ch trc tip tng d n trn ma

ng c u
trc cng nhn g m ca

c tr

ng thng tin sau:


- Tn
- Tui
- Lng thng
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

n tim kim? Hay trinh by cc bc , a

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 thng tin sau:


- Tn
- Tui
- im trung binh
Tr

ng kho

a sp xp l trng im trung binh, n u cu

ng im trung binh thi


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.

You might also like