You are on page 1of 74

B GIAO THNG VN TI

TRNG I HC HNG HI
N H HC TNH
H CNG NGH THNG TIN



I GING
PHN TCH THIT V NH GI
THUT TN


TN HC PHN : Phn tch thit k v nh gi thut ton
M HC PHN : 17208
TRNH O TO : I HC CHNH QU
DNG CHO SV NGNH : CNG NGH THNG TIN











HI PHNG - 2010
i

Tn hc phn P Loi hc phn 2
mn ph trch ging dy Ka My hoa ph trch CNTT
hc phn 17208 Tng s TC: 3

TS L y T /Xema T B p l m
60 45 15 0 0 0

iu kin tin quyt
S p x p sa m p y:
K lp C l T

c tiu ca hc phn
- C p l.
- C p l xy
- R ly y a .

Ni dung ch yu
Gm 4 p:
- C .
- C sp xp m m l.
- C l : l a l ay l
l l am lam
- K p p .

Ni dung chi tit ca hc phn


TN CHNG C
PHN PHI S TIT
TS LT TH/Xemina BT KT
Chng I Cc khi nim c n 5 4 0 1 0
1.1. G
1.1.1 K m .
1.1.. C p pp
1.1.3. C s
1.. p p
1..1. C m p p

1... C lp
1.3. M a a l

1.4. M s
1



2


0,5
0,5




1


Chng II Sp p v tm kim 15 7 5 2 1
.1. B sp xp
.1.1. Sp xp
.1.. Sp xp
.1.3. sp xp
.. C sp xp
..1. Sp xp Sele S
... Sp xp p xae S
..3. Sp xp Ise S
..4. Sp xp Ble S
... S s sp xp
0,5



3









2,5









1






ii


TN CHNG C
PHN PHI S TIT
TS LT TH/Xemina BT KT
.3. Sp xp
.3.1. C Heap
.3.. T xy Heap
.3.3. T sp xp
.4. Tm m y
.4.1. B m m
.4.. T m m y
2,5



1
1,5



1
1
Chng III qui v chin c vt cn 11 6 3 2 0
3.1. K m quy
3.1.1. G y y
3.1.. T y
3.1.3. H l a y.
3.1.4. y y p .
3.. C l Bee
3.3. C l ay l aa
3.3.1. Ve m
3.3.. T
3.3.3. C
3.3.4. p
3.3.. M s aa
1




0,5

1
1
1
0,5
1





1
2
1










1

Chng IV Chin c chia tr 11 6 3 1 1
4.1. C s a l a
4.. T sp xp
4..1. T a R
4... Sp xp
4.3. Sp xp a s
4.3.1. C l p
4.3.2. Quick sort
4.4. Tm m p
4.. T s y
4..1. T ay
4... T a
4.. M s
0,5
1,5


1,5


1
1


0,5

1


1


1













1

Chng V Qui hoch ng 12 6 3 2 1
.1. C l
5.1.1. C p
.1.. C
.1.3. C
.. B y s a
..1. T
... T
.3. B y
.4. B ma
.. M s
1,5



1


1
1,5
1




0,5


1
1
0,5







1

1

Chng VI Chin c tham am 6 4 1 1 0
.1. Ny am lam
.. B
.3. B sp l s
.3.1. T
0,5
1
2



1






iii


TN CHNG C
PHN PHI S TIT
TS LT TH/Xemina BT KT
.3.. T e l am lam
.4. S s l am lam l


0,5

1

Nhim v ca sinh vin
Tam y a lm p do gio vin giao,
am m a .

Ti iu hc tp
- Ny H Gio trnh mt s vn v thut ton NXB G
2003
- M T. Cu trc d liu v thut ton. NXB a H
. 00.
- Ny L H H. Cu trc d liu + gii thut = chng
trnh. NXB G . 199
- Ra Neapla 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
- H : T p.
- S p m e y a N a B

Thang im Thang im ch , , C, D, F

im nh gi hc phn Z = 0,3X + 0,7

B y l l chnh thc v thng nht a B m Ka My
Ka C T y cho sinh vin.

Ngy ph duyt / /20


Trng mn ThS Nguyn Hu Tun (k v ghi r h tn)
i ging mn hc Phn tch thit k v nh gi gii thut
iv

C LC
LI NI U ............................................................................................................................ 1
CHNG I: CC KHI NIM C BN ................................................................................ 2
1. T - Algorithm ............................................................................... 2
1.1. a ............................................................................................. 2
1.. a ........................................................................................ 2
. B ....................................................................................................... 2
.1. M ....................................................................................... 2
.. S s l la........................................................ 3
3. p p Algorithm Complexity.......................................................... 4
3.1. C ............................................................................. 4
3.. a ................................................................. 4
3.3. C a p p .............................................. 5
3.4. C lp .................................................................................................. 7
4. C l Data structure .................................................................................. 9
. C l . ................................................................................ 9
.1. Dy xase sea ......................................................................... 9
.. ay l Backtracking ............................................................................. 9
.3. Ca De a Ce........................................................................... 9
.4. C l am lam Geey ............................................................................ 10
.. Dyam Pamm ........................................................... 11
. B p ......................................................................................................................... 11
CHNG II: SP XP SORTING V TM KIM SARCHING ................................. 13
1. B sp xp .......................................................................................................... 13
1.1. Sp xp Ieal S .......................................................................... 13
1.. Sp xp xeal S ......................................................................... 13
1.3. Sp xp p .................................................................................................. 13
1.3. C m sp xp .................................................. 14
. C p pp sp xp ................................................................................ 15
.1. Sp xp Sele s .............................................................................. 15
.. Sp xp p xae s ........................................................... 17
.3. Sp xp Ise s ............................................................................... 19
.4. Sp xp Ble s .............................................................................. 21
i ging mn hc Phn tch thit k v nh gi gii thut
v

.. S s sp xp ................................................................. 23
3. C l Heap sp xp Heap s. ............................................... 24
4. Tm m y .................................................................................................... 31
. C ........................................................................................................... 33
. B p ......................................................................................................................... 33
CHNG III: UI V CHIN LC VT CN .......................................................... 34
1. K m ..................................................................................................... 34
2. C l Be e ............................................................................. 34
3. C l ay l Ba a / y a e ................................................ 35
CHNG IV: CHIN LC CHIA TR ......................................................................... 38
1. C s a l a De a Ce .......................................... 38
2. Sp xp Mee s ........................................................................................ 38
3. Sp xp a s ..................................................................................... 43
4. Tm m p................................................................................................... 46
5. B p...................................................................................................................... 48
CHNG V: UI HOCH NG ........................................................................................ 49
1. C l ...................................................................................... 49
2. B 1: Dy a ......................................................................................... 49
3. B : B y ma .............................................................. 51
4. P pp .................................................................................. 53
5. B y .............................................................................. 53
6. B p...................................................................................................................... 57
CHNG VI: CHIN LC THAM LAM GRD) ....................................................... 60
1. Ny am lam ............................................................................................... 60
2. B ....................................................................................................... 60
3. Bi t lp l ....................................................................................................... 61
4. S s l am lam .................................................... 64
TI LIU THAM KHO ........................................................................................................ 65
THI THAM KHO ............................................................................................................ 66
i ging mn hc Phn tch thit k v nh gi gii thut
1

LI NI U
C l l l l l
a l m l l a a my . H
a y my l ay ay p p
p s l e lm
l . V l xy
pp lp a my l y
la a a pp . V y p
m P l m a .
T l y a m m p
y m C l a C T
H V am s am a l a p
y pea. V y a
a m sp xp m m
l ay l am lam y s
p em s m l . M
s m s s y s p em
s p a l y.
X l m p Ba m a
C T p l y .
Hi phng, thng 04 nm 2010
Tc gi

Nguyn Hu Tun



i ging mn hc Phn tch thit k v nh gi gii thut
2

CHNG I CC HI NI C N
1. Thut ton (gii thut) - Algorithm
1.1. nh ngha thut ton
C a p a a a
. Te s a l Introduction to
Algorithms Se a Tmas H. Cme Cales . Leses Ral L.
Res Cl Se a sa: m l m
x ell-ee m p l p
s a a m m p l p.
N m l
m x ell-ee . V m m
p a y s a l m a m . Tm m m
a s l m m l m
.
12 c trng ca thut ton
T : T p m m sa
l . y l a m
.
T : p m s sa m s .
T x : C a p p y
p m l .
T : xem l y
a a pp p y
a .
T p : l p p
y m lp .
N a m e a l
l Input. K a l m y e
l Otput.
2. iu din thut ton
Tng c hai cch biu din mt thut ton, cch th nht l m t c thc hin
ca thut ton, cch th hai l s d s gii thut.
2.1. t cc c thc hin
biu din thu i ta m t x c thc hin ca thut ton,
ngn ng 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 l n gi m lnh.
i ging mn hc Phn tch thit k v nh gi gii thut
3

V d: m t thu m c s chung ln nht ca hai s nguyn.
Input: Hai s nguyn a, b.
Op: s l a a .
Thut ton:
B 1: N a USCLN(a, b)=a.
B : N a m USCLN ca a-b v b, quay li 1
B 3: Nu a < b th tm USCLN ca a v b-a, quay li 1
22 S dng s (u ) gii thut (flowchart)
M p l s s
(Algorithm Flowchart).
S s m m ma
y s m a
. C a s s m
m a a .
C a m s
B u
Kt c
Nhp xut d liu
Cu lnh
u kin
S

1
2
3
4
5

hi 1 K y m a
hi 2 K
Khi 3 T l l m l m m
m a
Khi 4: R m a u ki Blea u th
s e Te u th sa s e Sa
(False).
i ging mn hc Phn tch thit k v nh gi gii thut
4

hi C l p x l.
3. phc tp thut ton Algorithm Complexity
31 Cc tiu ch nh gi thut ton
T m tt, xu v so snh cc thut ton cng loi, c th
da trn ha :
+ T .
+ Da vo thi gian thc hin v ti nguyn m thut ton s d thc hin trn cc
b d liu.
Trn thc t cc thut ton hiu qu th khng d hi t hiu qu
d dng thc hin v hi c mt cch nhanh chng. V m u c v nghch l l cc
thut ton cng hiu qu th cng kh hi t cng phc tp li cng hiu qu (khng
ph l . V nh gi v so snh cc thu a ng da
phc tp v thi gian thc hin ca thut ton, g l phc tp thut ton
(algorithm complexity). V bn ch phc tp thut ton l m m lng (c th
khng chnh xc) s php tnh m thut ton cn thc hin (t dng suy ra thi gian
thc hin ca thu i vi mt b d li p c N. N c th l s phn t
ca m ng hp bi ton sp xp hoc tm kim, hoc c th l ln ca s trong
bi ton kim tra s nguyn t chng hn.
3.2. nh gi thi gian thc hin thut ton
minh ha vi phc tp thut ton ta xem xt v d v thut ton sp xp
chn (selection sort) v sp xp i ch trc tip exae s sa:
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;
}
i ging mn hc Phn tch thit k v nh gi gii thut
5

}
S php tnh thut ton cn thc hin sau:
(N-1) + (N- + + + 1 N*N-1)/2.
Phn tch chi ti N*N-1)/2 l s php ton so snh cn thc hin, cn s ln
thc hi i ch hai phn t (s nguyn) t a a thut ton l N.
C 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;
}
T i vi thut ton sp xp chn ta c s pp l: (N-1) + (N-2)
+ + +1 N*N-1)/2. Chi ti N*N-1)/2 l s ln so snh thut ton thc hin, v
l s ln i ch hai phn t (hai s nguyn) t a a thut ton.
T ng hp trung bnh, thut ton sp xp ch x ng t s i sp
xp i ch trc tip v s a i ch ng hp tt nh a
ng hp ti nht th chc chn thu n sp xp chn t kt lun thut
ton sp xp ch a s i thut ton sp xp i ch trc tip.
33 Cc nh ngha hnh thc v phc tp thut ton
G l m m a p s y . l
m a a m y. C a m N l ON
l: l O l a m s N
0
:
0
; ( ) . ( ) N N f N c g N > <

P l sa: N l ON sa p
a m m p a m *. C l m l a
m *.
Tay N l ON a l N ON. C
y x a l a l ON N
sy a N O(f(N)).
a l O l -O a s
a m .
i ging mn hc Phn tch thit k v nh gi gii thut
6

C sp xp ta f(N) = N*(N-1)/2 = 0.5N
2
0.N
a l N O(N
2
. C a l m a m N
2
.
C m m x a
l x a C a l a l my a
. N a l a a m a a
l m a. N a p l l a a
s l xp x 4 l p a my.
C N O(N
2
a m a
m a l a.
D a s s pp O l m a a
m s . a
p p a a l O(N
2
l l O(N
2
.
T a a O

(omega)v O(theta):
C a m N l ON N ON ay m
l a m .
V m N l ON N ON N ON ay
a m xp x a .
H l O l a Ol a m
a m m. C a y l m a ay p
.
t vi v d
- 0.5N
2
0.5N = O(N2)
- 47 N*log(N) = O(N*log(N))
- N*log(N) + 1000047N = O(N*log(N))
- T m a l O(N
k
)
- p p a a sp xp sp xp
p l O(N
2
)
- N m l O(N
2
l O(N
5
)
- M sp xp a s s p p l O
(N*log(N))
- T sp xp MeeS s a s s l N*lN. D
p p a a MeeS l ON*lN a l MeeS l
m sp xp .
K xem x s s l a x p p a
p: aeae ase p x e s ase
p e est case).
i ging mn hc Phn tch thit k v nh gi gii thut
7

3.4. Cc p thut ton
K a p p a/ a a m ay s
O a p lp a m . V
f(N) = ON a s l y lea. C am m:
N 1: s sa
f(N) = O(log(N)): logarit
f(N) = ON: y lea
f(N) = O(N*log(N)): N log N
f(N) = O(N
2
: a aa
f(N) = O(N
3
: 3
f(N) = O(N
k
l m s y : a plymal
f(N) = O(b
N
: m m expeal
p p OV+ a l y
a .
X a m m
a p s e O
b l . C p p l O (N
2
a s
m m x p p a l 10N
2
p l 10
7
N
2
.
C a l s l l l e m l a m
s a . T p y l m a
m a s .
V d: m s l x a m m x N . M
l y a x m m xem x
a l. K a l l
lp C l y N. N s l l
p p a l OS*N S l s p a s . C
l m y p p l O(S + N).
Trong lp m 1000000000 pp
a m a. C a am sa m:
phc tp Gi tr N n nht
O(N) 100 000 000
O(N log N) 40 000 000
O(N2) 10 000
O(N3) 500
i ging mn hc Phn tch thit k v nh gi gii thut
8

O(N4) 90
O(2N) 20
O(N!) 11

Thi gian thc hin ca cc thut ton c phc tp khc 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 p
O(2
N
) 10
14
m
O(N!) 10
142
m
Ch v phn tch thut ton.
T a y m p p
a a l s O. Ty a ay pp
-O lm y
. N l -O l a
s m m .
V d: C m m sp A. Hy x xem m A a p
m a D ay . Hy xem m sa:
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 l O(N
2
: lp le N
l m l l a N l. N m p s a y
l O(N) a a l y
N l.
i ging mn hc Phn tch thit k v nh gi gii thut
9

N a l O(N
2
a l
l ON a a a x .
4. Cu trc d iu Data structure
Niklaus Wirth, mt lp trnh vin v nh khoa h my i pht minh ra ngn
ng lp Pasal ng ni mt cu ni ni ti l c lp : C
(Programs) = Cu trc d liu (Data Structures) + Gii thut (Algorithms). Cu ni ny ni
ln bn cht ca vic lp l m mt cu trc d liu ph hp biu din d liu ca
bi ton v t xy ng gii thut ph hp vi cu trc d li chn. Ngy nay vi s
pht trin ca cc k thut lp trnh, cu ni ca Wirth khng h y i na
n phn nh s gn kt v tm quan trng ca cc cu trc d liu v gii thut.
Cu trc d li c s d biu din d liu cn cc gii thu c s d thc
hin cc thao tc trn cc d liu ca bi ton nhm hon thnh cc ch a
trnh
Cc chin c thit k thut ton
K m p pp p a xy
l . C a my a a
l p l a.
5.1. Duyt ton (Ehausted search)
C l y l l m m lp p
y . T p pp y a s xem x
m a a xem p l m a
ay . P pp y y m m m a xem m
p l m a ay . M s p pp y
p l l m p
l. C p pp a p pp y a s
xem x 3.
5.2. qui quay ui Backtracking
C l ay l l m l xy a a
qui. Nm a m a m e m p a e
m s m p s
p a m x m a . M p
p s a p pp ay l
l p s s m ma l.
3 Chia tr (Divide and Conquer)
C l a l m l a .
a l y e y l: y m
i ging mn hc Phn tch thit k v nh gi gii thut
10

a s a
sa p m a l m a a .
Ty y m a y : lm a
m p l l y
a s p p y a l p l a
s .
C sp xp mee s sp xp a s l
a y y 3.
V d[6, trang 57]: T y a s xem x
N
a .

N
a a sa:
N N/2 2
N/2 2
1 nu N = 0
a (a ) nu N chn
a*(a ) nu N l

T a sy a a sa:
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;
}
}
Chin c tham am (Greedy)
C l am lam l m l xy m m
m m
p . T p m l a l am lam
a p p p.
Ch : T m s xy m p
m . T am m m
.
i ging mn hc Phn tch thit k v nh gi gii thut
11

5.5. Qui hoch ng (Dynamic Programming)
l l xy y
a p l m l /
l a . Trong
l a s xy a a
s l a s plems a a . C
qui s m l l m a
a p : m p p .
i tp
i tp 1: Xy s s a N y
s a a sa:
0 1 1 N N-1 + N- N .
i tp 2 Xy s :
... x x x + + + N s x m a N x p
pm.
i tp 3 T m ma a p MxN m p a l m
y a a ma sale p l p p l
a ma . C a0 l m p y a ma sa:
1 2 3
4 5 6
7 8 9
(
(
(
(


Hy m m y a a m ma p
pm a a p p a .
i tp C m ma MxN m s y s m
. Hy m ma a ma sa p
ma l maxmm sm plaea. Hy a a
p p a s .
i tp V p s a m a s s l
y a x l m s y m x0. Hy a a
e He sa:
N x a
n
*x
n
+ a
n-1
*x
n-1
+ .. +a
1
*x + a
0

f(x) = a
0
+ x*(a
1
+x*(a
2
+x*.+xa
n-1
+a
n
*x C He.
i tp C 4 p a m m a p 1
4 m xa m . Hy a a xp p 1 y sa
e pa x sa a y 4 m
xa m .
i ging mn hc Phn tch thit k v nh gi gii thut
12

i tp 7 Hy a a s y
s a s.
i tp 8 p s a s y N.
i ging mn hc Phn tch thit k v nh gi gii thut
13

CHNG II: SP XP (SRTING) V T I (SERCHING)
1. Bi ton sp p
11 Sp p trong (Interna Sorting)
Sp xp c xem l mt trong nh l c nghin cu c n ca khoa hc my
. T t ton chi tit chng ta cn nm vng mt s khi nim n
sau:
+ M ng (field) l m d li ng h i, s n thoi
ca m i ...
+ Mt bn ghi (record) l mt tp hp ng
+ 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
. Vc xp y c thc hin da trn mt hay nhi
y c gi l kha xp xp (key). Th t ca cc b x nh da trn cc kha
khc nhau v vic sp xp c thc hi 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 ch gm 1 ng duy nht.
Hu ht cc thut ton xp xp c gi l cc thut ton xp xp so snh: chng s dng hai
a l s s i ch (swap) cc phn t cn sp xp.
C sp xp a lm a .
Sp xp (internal sorting): D l sp xp l y
trong sp xp.
12 Sp p ngoi (Eterna Sorting)
Sp xp exeal s: D l sp xp l
l sp xp a y p l m a
.
T pm a m y a xem x sp xp . C
l sp xp s l m m m a l l
a p a xem x a a
y m a m s y
l a a .
13 Sp p gin tip
Khi cc b c ln vi i cc bn ghi l rt t m
gim p i ta c th s d p pp sp xp gin tip. Vic ny c th c
thc hin theo nhiu cch khc nhau v mt trong nh p pp l o ra mt file
mi cha ng kha ca le a u, hoc con tr ti hoc l ch s ca cc bn ghi ban
u. Chng ta s sp xp trn file mi ny vi cc b c nh sa y
cp vo cc b le a u thng qua cc con tr hoc ch s y l lm
ng thy i vi cc h qun tr s d liu).
i ging mn hc Phn tch thit k v nh gi gii thut
14

V d: chng ta mun sp xp cc bn ghi ca le sa 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 x truy cp vo cc bn ghi theo th t sp xp chng ta s
dng th t c cung cp bi ct index (ch s. T ng hp ny l 3, 2, 4, 1. (chng
ta khng nht thit ph i cc b a u).
1.3 Cc tiu chun nh gi mt thut ton sp p
Cc thut ton sp xp c th c so snh vi nhau da trn cc yu t sa y:
+ Thi gian thc hin (run-time): s cc thao tc thc hi ng l s cc php so
s i cc bn ghi).
+ B nh s d Memy: l lng b nh cn thi thc hin thut ton
lng b nh s d cha d liu cn sp xp.
+ Mt vi thut ton thuc lo plae n (hoc cn mt s c nh) thm
b nh cho vic thc hin thut ton.
+ Cc thu ng s dng thm b nh t l thun theo hm tuyn tnh hoc
m m c file sp xp.
+ Tt nhin l b nh s dng cng nh cng tt mc d vi i gia thi gian v
b nh cn thit c th l c li.
+ S nh (Stability):Mt thu c gi l nh n gi c
quan h th t ca cc kha b a lm ay i th t ca cc kha bng nhau).
C a ng lo lng nhiu nht l v thi gian thc hin ca thut ton v cc thut
ton m chng ta bn v ng s d c b nh a.
V d v sp xp nh: Chng ta mun sp xp le sa y trn k t u ca cc
b y l t qu sp xp ca cc thut ton nh v khng nh:
i ging mn hc Phn tch thit k v nh gi gii thut
15


Chng ta s xem xt ti sao tnh nh trong cc thut ton sp xp l
quan tr y.
2. Cc phng php sp p c n
2.1. Sp p chn (Selection sort)
M :
Tm phn t c kha ln nht (nh nh sa sp xp phn
cn li ca mng.
S :
i ging mn hc Phn tch thit k v nh gi gii thut
16

B u
Kt c
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

n m sau minh ha cho thut ton:
void selection_sort(int a[], int n)
{
int i, j, vtmin;
i ging mn hc Phn tch thit k v nh gi gii thut
17

for(i=0; i<n-1;i++)
{
vtmin = i; // m l p a..-1]
for(j=i+1;j<n;j++)
if(a[j] < a[vtmin])
vtmin = j;
swap(a[vtmin], a[i]); // m am a
}
}
V d:

Vi mi gi tr ca i thut ton thc hin (n i 1) php so snh v v i chy t 0 cho ti
(n2), thut ton s cn (n-1) + (n- + + 1 -1)/2 tc l O(n
2
) php so snh. T m
p s l s s a l . M l y a lp
m l a p s l a
l . N y p 0 l /
l l .
22 Sp p i ch trc tip (Echange sort)
T sp xp m
sp xp l sp xp p m s l l
Ieae s ay Sa Sele S.
M : B x p a 0 a x p sa
a l a y +1 -1 . V m p a a l a
l p sa a a a l xy a sa a s a
a[j].
V d minh ha G s m a l a 1 19 3 1. C a
s sa:
i=0, j=2: 1, 6, 2, 19, 3, 12
i ging mn hc Phn tch thit k v 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 : 1 3 1 19.
S :
B u
Kt c
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]

C a :
void exchange_sort(int a[], int n)
{
int i, j;
int tam;
for(i=0; i<n-1;i++)
i ging mn hc Phn tch thit k v nh gi gii thut
19

for(j=i+1;j<n;j++)
if(a[j] < a[i])
{
// a a
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
}
p p a : C y s sp xp
sp xp p s s s : l *-1/ l s s.
N s a p s l s s: *-1/. T
p x s a s l s s p
s l *-1/4. C p s 0.
N y sp xp p l m s
sp xp s l .
2.3. Sp p chn (Insertion sort)
M :
T a a l hn mi kha vo m y c sp xp
ca dy cn sp. P pp y c s dng trong vic sp xp cc cy bi trong
.
S a sa:
i ging mn hc Phn tch thit k v nh gi gii thut
20

B u
Kt c
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

C m l sa: a a m a0..-1 m p
p 1 l sp a a s
a m a0..-1] sao c sa p e
. B p e s a+1 m a0.. m . T
m a-1 m a0..-2]). a m
a0..-1 a m m l a sa m s -1
m a am s py a a+1 a l l m l m
am m. V lp s a am -1 a a+1
tam.
m sa:
void insertion_sort(int a[], int n)
{
int i, j, temp;
for(i=1;i<n;i++)
i ging mn hc Phn tch thit k v 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:

T sp xp l m sp xp sale l
a s sp xp .
Vi mi i chng ta cn thc hin so snh kha hin ti (a[i]) vi nhiu nht l i kha v
v i chy t 1 ti n-1 nn chng ta phi thc hin nhiu nh: 1 + + + -1 = n(n-1)/2 tc
l O(n
2
pp s s t ton sp xp chn. Tuy nhin lp le
p l l lp l
sp xp a s sp xp . T
p s l s s 0 l . T m
m m m sp .
T sp xp l a sp xp
p p O(n
2
)).
2.4. Sp p ni t (ue sort)
M :
i ging mn hc Phn tch thit k v nh gi gii thut
22

T sp xp a s s a p a:
+ 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 l u ny cho ti khi khng c hai bn ghi no sai th t.
K thy rng n pha thc hi l x .
Thu y t ton sp xp chn ngoi tr vic c thm nhiu
a i ch hai phn t.
S :
B u
Kt c
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]

C :
void bubble_sort1(int a[], int n)
{
int i, j;
i ging mn hc Phn tch thit k v 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]);
}
T p p l O(N*(N-1)/2) = O(N
2
), s l s s s l
a p . T sp xp l
m s sp xp m sp xp
p m s l s s a a p a
s l .
2.5 So snh cc thut ton sp p c n
Sp xp chn:
+ T i n
2
/ pp s s i ch.
+ Tng hp xu nh .
Sp xp chn:
+ Trung bnh cn n2/4 php so snh, n2/8 i ch.
+ Xu nht cn gp c so v ng hp trung bnh.
+ Thi gian l tuy i vi cc file h sp l a
s sp xp .
Sp xp ni bt:
+ Trung bnh cn n2/2 php so snh, n2/ a i ch.
+ Xu nh .
i ging mn hc Phn tch thit k v nh gi gii thut
24

3. Cu trc d iu Heap, sp p vun ng (Heap sort).
3.1. Cu trc Heap
T m eap s a s m m
l Heap eap aa se ay l .
Heap l m y p y m a eyl eypae. Hy
l m y p y l m y p y a y
y pa a y. C m l m y p m
m sa: l m a y m s
l m m s a em
a 1 s 1 a
em a m l l m m s s
s a a em a .
V d









Chiu cao ca mt heap
M eap s a l Ol .
Chng minh
G s l s a m eap a l .
V m y p s a l
2
h
-1 nn suy ra:
1
2
h

2
h
-1
Ly la a a a :
h 1 l
Tm 1 a l ly la a a l :
log(n + 1)
T sy a:
3
7
4
5 1
7
7
2 6
9 1
3
1
i ging mn hc Phn tch thit k v nh gi gii thut
25

l + 1 l(n) + 1
Cc v d v cu trc Heap:
Heap a 3:

eap a 4

iu din Heap
C a m y p m eap
m y p m m.
m eap l m m a a sa s a
0):
- Left(i) = 2*i + 1
- Right(i) = 2*i + 2
- Parent(i) = (i-1)/2
V d
i ging mn hc Phn tch thit k v nh gi gii thut
26


Th tc heapriy
y l a eap
Input:
+ M m A m s m
+ G s a y Le R l eap
+ A p Heap y Le R.
Output:
+ M A y l l m Heap
K a y p p l O(log n).
C a s y y l m m y l
a ay a m a eap a eap s p y
p s sa .
Sa y l C a :
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;
i ging mn hc Phn tch thit k v 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 y l m s a m
. T y sa:
+ X p l 3 p A ALe AR.
+ N A p l p l 3 p A
Alaes Alaes s l ALe AR.
+ G laes lm ay a eap
l Alaes.
V d
i ging mn hc Phn tch thit k v nh gi gii thut
28


Th tc uidheap
T leap s y m m m eap. V y
eapy e l. V y e
l a y l eap. Na a
m l a p eap
.
m C leap:
void buildheap(int *a, int n)
{
int i;
for(i=n/2; i>=0; i--)
heaprify(a, i, n);
}
Da y y eap m p p l O(n*log n.
T eap p p l O. T a a
eapy m y m l m a
a p a aLe aR l O1. C m a y
m y m l a . S y a
i ging mn hc Phn tch thit k v nh gi gii thut
29

a l l /3. Sy a a p p a
l: T T/3 + O1 T Ol y sy a p p a
leap l *l. C l l sa: K a p
a y l: /4 /8 /1 1 l s a y. T a
eapy y l 1 3 l 1 a
s xp x l:
1*n/4 + 2 * n/8 + 3 * /1 + + l-1) * 1 < n/4(1 + 2* + 3 * + 4 * 1/8 + ...) =
O(n).
V d

Cc thao tc trn heap khc
N eap a sa y m eap:
+ Insert()
+ Extract_Max()
C a a y y a y
s eapy m a . V a y
a s m eap m . M l
i ging mn hc Phn tch thit k v nh gi gii thut
30

m l a l se maxmm examaxmm
a s p sa a a .
3.2. Sp p vun ng (Heap sort)
T Heap s :
+ T leap m A m eap
+ V A l m eap p l s l A1.
+ A0 A-1], A[n-1 m a a
a m y l -1 ay l xem x p a
m l m eap a.
+ V A0 l a s eapy l m
m eap.
+ Lp l a m p eap m
sp.
C C a :
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);
}
}
Ch : sp xp m a n p m eaps sa:
heapsort(a, n);
phc tp ca thut ton heapsort
T leap p p l O.
T eapy p p l Ol .
Heaps leap 1 l -1 l eapy sy a p p a l
O(n + (n-1)logn) = O(n*log n).
T eaps a quicksort.
i ging mn hc Phn tch thit k v nh gi gii thut
31

4. Tm kim tuyn tnh
4.1 i ton tm kim
Tm m l m l a a
my . B m a
p pp ma m m. T
y a xy p m m: m m m
s m a m m m l l my
m m m m m a m m
s l m m m Iee.
T m y a a m m m m m m
a s p . T p y l m p
a a : l l m p
p a l a l
a p p y l a m m a m m
a m m l a my m m.
K m m l v tr ca phn t tha mn iu kin tm kim: a
m a a m m. T m y y a
y p a l a p m y. N
l m y p y
s m p
: -1 m NULL a s l .
C m m : m m m m
m m p m m a l
l y y m m p y y e
Ty p y a s xem x a p pp m m p
l m l m m a a my .
m a l l m y y p
p a l a a s p a s p
m p a l s y.
4.2 Tm kim tun t (Sequentia search)
a m m : y a p a
m y m y p a a m m
a p . C y m m p a
a m m -1 m y.
T s sa:
i ging mn hc Phn tch thit k v nh gi gii thut
32

C C a :
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 a s l a p a m
m m p .
p p p : O(n).
T p p p O(1).
C m p l m p a m m a s
l m m . M y l s p a m
10000000 lm p s p a
m l m m s a
a .
Begin
m a[0..n-1] a
i = 0
k==a[i] return i;
End

sai
i >= n
return -1;
i = i + 1;

sai
i ging mn hc Phn tch thit k v nh gi gii thut
33

5 Cc vn khc
N y m s m
a am : sp xp Sell s sp xp m
Counting sort sp xp s Rax s. C y xem p m
a s .
6. i tp
i tp 1: C sp xp lp C 1 m
s y l a p le ex s s
p 10000 s s a a .
i tp 2: C sp xp a C m m
s : x a l 0 : s y m : s
a sp xp l . S s a a s s
m s s a C.
i tp 3[6, trang 52]: C a sp xp e
a. Hy m p l m a0.. p s 0
s -1 sp xp a a p m s x x
m a0..-1 sa sa l a0.. l m m sp xp.
S m a xy sp xp .
Gi C p m p a
sp xp y s p pp .
i ging mn hc Phn tch thit k v nh gi gii thut
34

CHNG III QUI V CHIN LC VT CN
1. hi nim qui
l m s lp a p C/C++
y ay lp y. V l
a m a ay l
a . Ta a m a pe y
+ M m pxel l m a
+ N p1 p l a a p p1 p s a m a m.
T a ay s p pp m p l m
y l . T lp a a m m l m m m m
l s l .
V a a m a a aal a m s y sa:
Gt(0) = 1.
Gt(n) = n* Gt(n-1 m 0.
G l a a
m .
2. Chin c vt cn (rute orce)
y l l l . C l
xem l m a
y.
V y a m m p l l p
l . H m a a s y 4 s a
sa a s s sa:
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))
p%%%% a
Hm ye m a xem m s y p l s y ay .
C p l l: m m .
V m l y l y p m l m
p l a a m : p
i ging mn hc Phn tch thit k v nh gi gii thut
35

s p p a l s l l s
y a a.
3. Chin c quay ui (ack tracking / try and error)
y l m l a a . T
l s l ay l m m : l
m m a . N m
p s a ay l a a la
. B m l y p l m m m
a m m sa ly m m a m m
e m
l m m a . V l l ay l
p p .
Vecto nghim
M m l ay l p l m
m a l p. T a l xy
p a l l . N m
p p l l l m l
a . T y l
p m sa:
T a a m . T a
t y m xy l m e m N p:
X = (x
1
, x
2
x
N
)
m m s .
G a xy x -1 p x
1
, x
2
x
i-1
y l xy
p x
i
. Ta l l x
i
. Xy a p:
T m p . K x
i
s x e y.
N x
i
l p y l m m l p
e p.
T x
i
p . K l l
x l x
i-1
.
m exase
s. M m lp ay l x l
x
i-1
l m
.
T p l p p m
p x -1 p m s
a sa xy x m p
i ging mn hc Phn tch thit k v nh gi gii thut
36

xy p. T p y p y l ay lui
p .
Th tc qui
T ay l e a
y y e pp C.
void try(i: integer)
{
// x p x ui
int j;
for j e p
p
{
x x e
m
If(i=n)
m m
else
try(i+1);
l
}
}
T y1 .
T y a . T y
a m m a l .
Ha m m y p p a y p
l x m x x p
y.
Cc gi tr c
C l s s p p
. S l y l a p p
s. V y p
p a p a
a xy . L l m p . T
p y m p a .
i ging mn hc Phn tch thit k v nh gi gii thut
37

V d 1 S y p N N 0
V y y s y p N m y p
m m p:
x0 x1 x-1]
m x ly m 0 1 a l m p x
a e m s x p
y p . T a sa:
void try(int k)
{
int j;
if(k==n)
in_nghiem();
else
for(j=0;j<=1;j++)
{
x[k] = j;
try(k+1);
}
}
T em l m m m a m . D y l
. T a m m p
.

i ging mn hc Phn tch thit k v nh gi gii thut
38

CHNG IV CHIN LC CHI TR
1. C s ca chin c chia tr (Divide and Conquer)
C l a l m l a .
a l y e y l: y m
a s a
sa p m a l m a a .
Ty y m a y : lm a
m p l l y
th a s p p y a l p l a
s .
C sp xp mee s sp xp a s l
a y y 3.
V d: T y a s xem x
N
a .

N
a a sa:
N N/2 2
N/2 2
1 if N = 0
a (a ) if N % 2=0
a*(a ) if N % 2 = 1

T a sy a a sa:
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. Sp p trn (Merge sort)
C p pp sp xp a
i ging mn hc Phn tch thit k v nh gi gii thut
39

Cc thut ton sp xp tt nh u l cc thu . C u tun theo chin
l sa y:
Cho mt danh sch cc bn ghi L.
+ Nu L c khng nhi 1 pn t a l c sp
+ Nc li
- Chia L thnh hai dy nh l L1 L
- Sp xp L1 L qui gi ti th tc ny)
- Kt hp L1 L nh L sp
Cc thut ton sp xp trn v sp xp a u s dng k thut ny.
V m mee s m sa:
+ Ca m sp xp a
+ Sp xp a a m
mergesort
+ T a a sp m sp.
m C Mee s:
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);
}
sp m m a p a m sa: meesa 0 -1);
N lm
V m sa:

Thut ton 1
i ging mn hc Phn tch thit k v nh gi gii thut
40

T m sp m m sp. T
1 lm sa:
+ m m a m p
+ p a p a x a m m m
+ D y a m p
+ Lp l m m a p a a
m
m C++ a m A B m 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++;
}
}
Thut ton 2
T 1 s a 3 m p a
m ay x l p a m m l sa l m sp
l m a .
C a s s m m m p:
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++)
i ging mn hc Phn tch thit k v 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++];
}
Thut ton 3
T p p s m a a a p
a m m l m a a
m. C 3 pp a :
+ T m a m
+Tm 1 p l a a m m p.
+ Lm m
V y l m :
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--];
}
sp xp m a p a m sa:
i ging mn hc Phn tch thit k v nh gi gii thut
42

merge_sort(a, 0, n-1);
phc tp ca thut ton sp p trn
G T l p p a sp xp . T l a m
a a s a l l Ol . T m
p p l O :
T(n) = O(n*log(n)).
B m l O y l m s p m
m a l a a y l p p
sp xp .
C :
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);
i ging mn hc Phn tch thit k v nh gi gii thut
43

merge(a, l, mid, r);
}
C m m l Mee s p p l
O(n*log(n)). y l s sp xp a s s
p p sp xp . S
Mee s s m m m
sp xp.

3. Sp p nhanh (Quick sort)
s l sp xp C. A. R. Hae a a m 19.
s l m sp xp a sa:
+ Sele: m p l p ay p
+ Pa p : p a m p ay sa
p ay p l p ay sa p p ay.
P ay p m.
+ : sp xp a a a m m p
quay
Thut ton
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 p pa:
+ Ly m s : l .
+ x A a l p
+ G s A Ap p
+ A Ap p
i ging mn hc Phn tch thit k v nh gi gii thut
44

y p l y a s. M p a
s s p ay ay a m
m p s p a m p a m
p.
C la p ay
C a la p ay:
+ S p lm p ay
+ S p a 3 ly p ay
+ S m p lm p ay.
Sa p ay lm m
a p C m y a s p
p ay l p a m. C p
s p y.
Hm p :
int partition(int *A, int l, int r)
{
int p = A[l];
int i = l+1;
int j = r;
while(1){
leA p &&
++i;
leA p && l
--j;
if(i>=j)
{
swap(A[j], A[l]);
return j;
}else
swap(A[i], A[j]);
}
}
m sp xp m a p a m sa:
i ging mn hc Phn tch thit k v nh gi gii thut
45

quicksort(a, 0, n-1);
T a p a m lm p ay a
y a a m p sa s p
quay).
C p pp la p ay :
Phng php ngu nhin
C a m p lm p ay
p p a p s p p a p
input
Phng php 3-trung nh
P ay l p s 3 p al al+/ a
a 3 s .
Hy sy sa:
Sa a p la p
a p pp
C
C p p
Cc vn khc
T a xem x a a
xem x y : l y x xem a
l m s sp ay a.
T a . s xy a a sp xp m
m N a a m C a l a
s s m l m sa
sp xp m
phc tp ca thut ton
T p O. C p l
p s e p p l O. D p
p a s l p p a a p sa a l xa .
K m m y s p p l
O*l p s l sp xp a
p s m s Ble s.
i ging mn hc Phn tch thit k v nh gi gii thut
46

4. Tm kim nh phn
T m m p l m p
y l a m m p sp xp e a m
m.
M :
Ip: m ale.. sp e a a m m .
Op: a p a .
T y l a m sp xp m
ay y a p m m m m
p x p a m m m ale+/ l p a
a m m m m. N s a
xy a m l p l a m m m sp
m p a a p s p
a[(left+/ a l a s le+/ - 1. C
ale+/ e l l a s le le+/ + 1. T
p a m m s m m a s p sa m
m m.
S :
















Begin
a[left..right], kha k
mid = (left+right)/2;
k==a[mid] return mid;
End
dng
sai
k > a[mid]
return -1;
left = mid + 1;
sai
dng
left right
dng
sai
right = mid - 1;
i ging mn hc Phn tch thit k v nh gi gii thut
47

Ci t ng C ca thut ton tm kim nh phn
int binary_search(int a[], int left, int right, int key)
{
//
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)
{
//
int mid;
mid = (left + right)/2;
if(left>right)
return -1;
if(a[mid] == key)
return mid;
else
if(a[mid] < key)
return recursive_bsearch(a, mid+1, right, key);
else
i ging mn hc Phn tch thit k v nh gi gii thut
48

return recursive_bsearch(a, left, mid-1, key);
}
m m a p a sa:
int kq = binary_search(a, 0, n 1, k);
:
int kq = recursive_bsearch(a, 0, n 1, k);
T p p l m la OlN. V .000.000.000 s a
m a l l 31 a a l a 31
m a m s s m
m p s l m . T sp a l
m p a m m p.
C p m m a m m s p l l xy
y a s xem x y s
m as ale m y y a m
y a x a p pp .
5. i tp
i tp 1: V p 1 m s y m s y y m
xem a s . Np p s x y m xem a s l x
y.
i tp 2: C m m y e .
i tp 3: V p m m s y pm p 1 s
y S y m xem a p s a m a S
S.
i tp V s m y s y. Hy m a a
a s y s y y.

i ging mn hc Phn tch thit k v nh gi gii thut
49

CHNG V QUI HCH NG
1. Chin c qui hoch ng
DP Dyam Pamm m
Rea Bellma a a m 19 l m p pp p
l a p pp a ee-a-
e. C a p y
lp a sa y p pp ese p
l l l a . N l l p
pp p m a a l
lp a . T p y m
a s s s lp l
y . M s y
m l y sa l m y p
p l m p m .
p . T
m l . M l m l s
m m y y a l m a
m m a m l l .
l m p pp y
sp a p m
K
p l lp a p m
a m . B y s y p
p pp m s ay a
Olymp s T p p a a .
2. i ton 1 Dy Fionaci
B m s a l m e
lp p sa:
Dy s a a sa:
1 2
0
1
, 2
0
1
n n n
F F F n
F
F

= + >


Xy
n
l m s y p pm.
Cch 1 S dng phng php qui
V a y a a y
y l s m m
n
sa:
int fibonaci(int k)
i ging mn hc Phn tch thit k v nh gi gii thut
50

{
if(k>=2)
return (fibonaci(k-1)+fibonaci(k-2));
return 1;
}
T l m lp
s m . Ty y y l m s
a
6
:

Ta
1
/ (1 5) / 2 1.61803
n n
F F
+
~ + ~ suy ra 1.61803
n n
F ~ y p
n

a l
0

1
a s xp x 1.61803
n
l m a
l 13 l ay p p a l m m.
Cch 2 S dng phng php qui hoch ng
C a s m p p y
n

s m m l
n
:
F
0
= 0
F
1
= 1
For i = 2 to n
F
i
= F
i - 1
+ F
i 2

Ty m a l m m a
a .
a 1 a m s x sa:
i ging mn hc Phn tch thit k v nh gi gii thut
51

+ ui hoch ng l mt thut tnh ton ui hiu u ng cch lu tr cc t
u cc
+ rong ui hoch ng t u c cc i ton con thng c lu vo mt mng
3. Bi ton 2 i ton nhn dy cc ma trn
G s a m y ma : .... A B C D . Hy xy
sa s pp s l .
C a m ma X Y m ma
Y Z s ma s X Y Z pp .
2 3 13 18 23
2 3 4
3 4 18 25 32
3 4 5
4 5 23 32 41
( (
(
( (
=
(
( (

( (


m s pp a s a ma a
l pp ma p y s
m a pp a ma . B
pp ma p l x a m
lm ay .
G s a 4 ma A B C D l 30 1 , 1 40 ,
40 10 , 10 25 . S pp s 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 + + =
C y ma a m s sa l
s pp a sa a l.
Vy lm m a
G M l s l pp
j
k
k i
A
=
[
a x sa:
+ C p y ma m .
+ C a a a y ma m p s
l .
T a a sa y sa:
+ 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
T ma A
i
l
i-1
, d
i
).
i ging mn hc Phn tch thit k v nh gi gii thut
52

C p a a a s m
p p a s l m m s l m
a .
N ma sy a s +1 s y l a s p
p a p x m x m a a
1 O(n
2
a l .
L m a e p a l
a a m ma am a m
a l m ma am .
T M1:
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];
}
T m:
void showOrder(i,j)
{
if(i==j)
printf(A[i]);
else
{
k = faster[i][j];
print(();
i ging mn hc Phn tch thit k v nh gi gii thut
53

showOrder(i,k);
print(*);
showOrder(k+1,j);
print());
}
}
4. Phng php qui hoch ng
a a a y p a m
a lm 4 sa:
1. c nh c im cu trc c gii php ti u c i ton
2. m cng thc tru hi ui c nh gi tr c mt gii php ti u
3. nh gi tr ti u c i ton d vo cc gi tr ti u c cc i ton con c
n ottom-up).
4. dng nghim t gi tr ti u t cc thng tin tnh.
C 1-3 l p
pp . B 4 a y m a
a m . T l a l
x m y a
m s a s p a . D y xy
a s
a m a .
p a p pp
a x 3 sa:
5. i ton dy con chung di nht
C y X m y xy m y l a
a y y a m y a l m p a y
y .
V : X = A L G O R I T H M
Y = L O G A R I T H M
T y l LORITHM
c 1: X m a y pp a
+ G s a l l 1..
+ N a a X a l a .
+ P l a s l x a X1..-1 1..m-1].
i ging mn hc Phn tch thit k v nh gi gii thut
54

+ N a a X a m s s m
a.
+ G s m p l a X
+ T s l y a X1..-1 1..m.
+ N l m l a s l y a
X1.. 1..m-1].
c 2: Xy y l a y a y
T 1 a xy y sa:
+ G C l y l a a y X1.. 1..
+ C0 C0 m .
+ L a l Cm.
+ C y
[ 1][ 1] 1(1)
[ ][ ]
max( [ 1][ ], [ ][ 1])(2)
C i j
C i j
C i j C i j
+
=


+ T p 1 l X p l X

c 3: Xy m y a y X1.. 1..m.
T a sa: a a C11 C1 ... C1
C1 C ... C ... p p C O1 1 1m
p p a l O(mn).
int longest_common_sequence(X, Y)
{
i ging mn hc Phn tch thit k v nh gi gii thut
55

or(i=0;im;i++)
C[i][0] = 0;
or(j=0;jn;j++)
C[0][j] = 0;
or(i=1;im;i++)
or(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];
}

c : Tm y a X1.. 1..mXy m

m l m a s m D -1 -
1 -1, j-1 l Dm sa: D -1, j-1) th X[i] =
l y s m y a x. V D -1,j-1), (i-1,j)
-1 p a m C s C. C
a m D s sa:
D 1 C 1 + C-1][j-1 C C-
1 3 C C-1].
i ging mn hc Phn tch thit k v nh gi gii thut
56



T m m: N D -1, j-1) (1 trn tri) th X[i] = Y[j] v k
y s m y l m.
char * findSolution()
{
row = m, col = n, cs=;
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;
}
i ging mn hc Phn tch thit k v nh gi gii thut
57

}
reverse cs; // o ngc u lcs
return lcs;
}

l m p pp a
l a T K ... y
a y y m s
m a a s ay Olymp T
a 3 . Hy p
m s p pp .
6. i tp
i 1 ContestSchedue
V m 300 l a le. T
lp y l l m . T a a m
x a s y s a
m . V m m 10 m s10
m lp am a a .
L m lp m Tm
x l a m. C m a s y p
Tm xem am a l a a a l l
.
Input
i ging mn hc Phn tch thit k v nh gi gii thut
58

D l m le ex e sa: m l
l m m 3 s y l s p 1 s s, t s 1000000, 1 s p s
100 l a l a .
Output
K x l a 1 le ex x s sa
py.
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
i 2 oinedString
C m y lp A y m x
a y . N x y y a a x e
Alpae.
Input
D l a m le ex m m
s 13 a 1 a A a.
Output
K x l a m le ex.
V d
Input Output
BAB
ABA
ABAB
ABABA
AKAKA
AKABAS
ABAKA
ABABAKAKABAS
i 3 JumpyNum
M s mpy l m s y s l a a
. V :
i ging mn hc Phn tch thit k v nh gi gii thut
59

C s 28459 28549 1091919 97753
C s mpy 290464 13131313 9753 5
Hy x xem a a s y l a s
Jumpy.
Input
D l a le ex s l 000000
a.
Output
K x l a m le ex.
V d
Input Output
1
10
9
9
23
9
8000
20934
3766


i ging mn hc Phn tch thit k v nh gi gii thut
60

CHNG VI CHIN LC TH L (GREED)
1. Nguyn tc tham am
C am eey alms
s m m a e
m . C l m m .
C am la y la
s m m y. C am
a p p a l m y lm l
l s . N may l p l
l .
Qui hoch ng khng hiu qu
C m a m
ma O(N
2
m x Om y
p O(N
3
l x m a l
. Ta sa y C l l y a
la m a m pp p m a
e exsae la y. C a m m m
y xem la l s l la
m a p .
C am eey alms y m
a y l la .
Thc hin a chn theo kiu tham am (Greedy Choice)
M y xem s la a s la
m M a s m am lam
maxme l a a. T la y p a
m . C y s 3 4 1 8 9 a y
a sa y l m y . D y l 3 4
8, 9>. Tuy e am sa x 3 p l 3 4 s
p p 1 p p m y p
s l 3 4 1 y p l .
2. i ton i tin
B p sa: m l m
l l l m1 m .. m . V s l l y
s l s l . M
e y l am a y m s s l
a s s m l . V
89 m 1 10 100 a m l
100 3 1 10 4 1.
i ging mn hc Phn tch thit k v nh gi gii thut
61

Ty l m xp a l apsa
lp NP y y:
y .
3. i ton p ch
M p s m lp m m. C lp
m s p m lp m l m a I
j

= [s
j
a l lp s m s
j
m
j
. M a
l m m l sa s l lp s p l l
a lp s p m m
a lp l .
G s l a lp sp e a a sa:
1 2
...
n
f f f < < <

C a m l
G S
i,j
l p lp sa m
i
m s
j

a l lp y sp xp a lp C
i
C
j
.
C a m lp C
0
C
n+1

0
- S
n+1
+. K
S
0,n+1
s l p a lp.
G s lp C
k
l m p a l a lp m S
i,j
.
T l a m m p l a S
i,k
, {C
k
m
p l a S
k,j
.

D l a m l p S
i,j
a
sa:
i ging mn hc Phn tch thit k v 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
< <

+ +


Thc hin mt a chn tham am
1: T m l a p S
i,j
a lp C
k
trong S
i,j

a l lp C
k
trong S
i,j
s .
2: N lp C
k
1 p S
i,k
s l p .
T am lam
Recursive-Schedule(S)
1 if |S| = 0
2 then return
3 G C
k
l lp a S
4 L C
k
lp a a C
k
S;
G S' l p
5 O = Recursive-Schedule(S')
6 return O {C
k
}
Da l s a S s p p a l
O(n
2
Ol. Tm s m m p xp
l .
T am a y e lp
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
M a a
:
i ging mn hc Phn tch thit k v nh gi gii thut
63











i ging mn hc Phn tch thit k v nh gi gii thut
64

T a y l a
sa: G O l p lp C
k
l lp m O. T
lp C
l
m l C
l
x m lp O s x C
k
.
C a : Tay m s l l lp s p
a ay y a l m a l m p
s . C p a ay m a l
la am a e s lm
y.
4. So snh chin c tham am v qui hoch ng
Vy am s m
B y am l
a m sa:
+ T la am eey e ppey: M m
la l m m m a
m a m a . Hay m l
m m a la
.
+ M m a ame m
p xy m m a l. C a l m
m s a m . T
y l pmal substructure).
S a a am l
am a m a
m la . V m m
a am .
Ch : T m s xy m p
m . T am m m
.

i ging mn hc Phn tch thit k v nh gi gii thut
65

TI LIU TH H
1. pea T a y V
http://vi.wikipedia.org/wiki/.
2. pea T a y A
http://en.wikipedia.org/wiki/Main_Page.
3. C l ese:
http://csce.unl.edu/~cusack/Teaching/?page=notes.
4. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein,
I Alms Se Te MIT Pess 001 1180 paes.
5. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, C++
C ORelly Neme 00 9 paes.
6. Ny H G m s NXB G 003
7. M T. C l . NXB a H .
2002.
i ging mn hc Phn tch thit k v nh gi gii thut
66

THI TH H
s 1
Cu 1:
a) T l m m Hy y p p
s a m m y
b) V m sp xp m cng
nhn m sa:
- Tn
- T
- L
T a sp xp l l l e .
Cu 2:
a) T y s x s s 1 3 p
pm.
b) T a sp xp m s y sa: 3 8
10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) T y y ma p m s pp
y ma : x0 0x10 10x0 0x1
b) T y m y m p l p l a
y s y sa: -9, 8, -3, 18, 4, -2, 8, -13, 20, -4, 8, 9, 3.
s 2
Cu 1:
a) T l m m Hy y p p
s a m m p?
b) V m sp xp m cng
nhn m sa:
- Tn
- H s l
- P p
T a sp xp l l s l * 0 + p p.
Cu 2:
a) T y s x s s 1 3
p pm.
i ging mn hc Phn tch thit k v nh gi gii thut
67

b) T a sp xp a m s y sa: 3
8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) T y y ma p m s pp
y ma : 1x x0 0x10 10x.
b) T y m y m p l p l
a y s y sa: -8, 9, 7, -2, -19, 2, -9, 2, 3, 28, -9.
s 3
Cu 1:
a) T l m m Hy y p p
s a m m y
b) V m sp xp chn m cng
nhn m sa:
- Tn
- T
- L
T a sp xp l l l e .
Cu 2:
a) T y s a s y
p pm.
b) T a sp xp m s y sa: 3 8
10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) T y y ma p m s pp
y ma : x0 0x10 10x0 0x1
s
Cu 1:
a) T l m m Hy y p p
s a m m p?
b) V m sp xp p m
cng nhn m sa:
- Tn
- T
- L
T a sp xp l l l e .
i ging mn hc Phn tch thit k v nh gi gii thut
68

Cu 2:
a) T y s x s s 3 p
pm.
b) T a sp xp a m s y sa:
3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) T y y ma p m s pp
y ma : x0 0x10 10x0 0x1.
b) p m x a a x X1
ABCABCCB XBCAABCCA.
s :
Cu 1:
a) T l m m Hy y p p
s a m m y
b) V m sp xp m H
sinh m sa:
- Tn
- T
- m
T a sp xp l m m
e .
Cu 2:
a) T y s x s s 3, 7, 2 p
pm.
b) T a sp xp m s y sa: 3 8
10, 9, 82, 4, 78, 28, 9, 10, 13, 11.
Cu 3:
a) T y y ma p m s pp
y ma : 15x5, 5x20, 20x10, 10x15
b) T y m x a a x .

You might also like