You are on page 1of 96

I HC S PHM H NI

NGUYN CH TRUNG
NGUYN TH THU THY

PHN TCH THIT K THUT TON V


NH GI PHC TP GII THUT

H NI 2010

Phn tch thit k thut ton v nh gi phc tp gii thut

MC LC
TI LIU THAM KHO............................................................................................................... 4
Chng 1. CC KHI NIM C BN ........................................................................................ 5
1. Thut ton (gii thut, thut gii) ............................................................................................ 5
1.1. nh ngha ........................................................................................................................ 5
1.2. Cc c trng ca thut ton ............................................................................................ 5
2. Phn tch thut ton ................................................................................................................. 5
2.1. Ti sao phi phn tch thut ton.................................................................................... 10
2.2. Thi gian thc hin thut ton ....................................................................................... 11
2.3. Khi nim ph1 phc tp thut ton ........................................................................... 15
3.1. Qui tc hng s............................................................................................................... 15
3.2. Qui tc cng ................................................................................................................... 16
3.3. Qui tc ly max .............................................................................................................. 16
3.4. Qui tc nhn ................................................................................................................... 17
3. Cc k thut nh gi phc tp thut ton ....................................................................... 17
3.1. Cu lnh n .................................................................................................................. 17
3.2. Cu lnh hp thnh......................................................................................................... 17
3.3. Cu lnh lp vi s ln lp bit trc for-do.................................................................. 18
3.4. Cu lnh r nhnh if ....................................................................................................... 19
3.5. Cu lnh lp vi s ln lp cha bit trc while, repeat .............................................. 19
4. Mt s v d minh ha thit k thut ton v nh gi phc tp...................................... 21
Bi ton 1.1. Tnh gi tr gn ng ca exp(x) theo khai trin Taylor.................................. 21
Bi ton 1.2 Thut ton tm kim tun t.............................................................................. 22
Bi ton 1.3 Thut ton tm kim nh phn ........................................................................... 22
Bi ton 1.4 Thut ton sp xp chn la ............................................................................. 23
5. Phn tch chng trnh (con) qui ...................................................................................... 24
5.1. Khi nim v qui ....................................................................................................... 24
5.2. Chng trnh (con) qui .............................................................................................. 25
5.3. Xy dng phng trnh (cng thc) qui.................................................................... 25
5.4. Gii phng trnh qui v nh l Th........................................................................ 26
BI TP CHNG 1 .............................................................................................................. 30
Chng 2 CHIA TR .............................................................................................................. 33
1. S chung ca thut ton chia tr .................................................................................. 33
1.1. Thut ton ................................................................................................................... 33
1.2. Thut ton .................................................................................................................... 34
1.3. Thut ton tng qut .................................................................................................... 35
2. Mt s v d minh ha Chia tr......................................................................................... 35
2.1. Thut ton sp xp trn (Merge Sort) ............................................................................ 35
2.2. Thut ton sp xp nhanh (QuickSort)........................................................................... 37
2.3. Nhn s nguyn ln........................................................................................................ 39
2.4. Mng con trng s ln nht............................................................................................ 40
BI TP CHNG 2 .............................................................................................................. 43
Chng 3. QUY HOCH NG ................................................................................................ 45
1. Gii thiu phng php qui hoch ng ............................................................................... 45
2. Phng php chung ca qui hoch ng............................................................................... 45
3. Mt s v d minh ha........................................................................................................... 46
3.1. Dy con tng dn di nht .............................................................................................. 46

Nguyn Ch Trung Nguyn Th Thu Thy


3.2. Tr li bi ton mng con trng s ln nht .................................................................. 51
3.3. Xu con chung di nht.................................................................................................. 52
3.4. Bi ton ci ti................................................................................................................ 55
3.5. Nhn ma trn .................................................................................................................. 57
BI TP CHNG 3 .............................................................................................................. 62
Chng 4. THUT TON THAM LAM..................................................................................... 64
1. Gii thiu thut ton tham lam.............................................................................................. 64
1.1. c im ca thut ton tham lam ................................................................................. 64
1.2. S chung ca thut ton tham lam ............................................................................ 65
1.3. Chng minh thut ton ng.......................................................................................... 65
2. Mt s v d minh ha........................................................................................................... 66
2.1. Bi ton tp cc on thng khng giao nhau................................................................ 66
2.2. Tm hiu cc thut ton tham lam i vi bi ton ci ti ............................................. 69
2.3. Bi ton ngi du lch (TSP - Travelling Salesman Problem)....................................... 70
2.4. Bi ton m ha Huffman .............................................................................................. 71
BI TP CHNG 4 .............................................................................................................. 75
Chng 5. CC THUT TON TH C BN.................................................................... 77
1. Cc khi nim c bn ............................................................................................................ 77
1.1. th.............................................................................................................................. 77
1.2. Cc khi nim................................................................................................................. 77
2. Cc phng php biu din th......................................................................................... 78
1.1. Biu din th bng ma trn k.................................................................................... 78
1.2. Biu din th bng danh sch cnh ............................................................................ 78
1.3. Biu din th bng danh sch k................................................................................ 79
1.4. Biu din th bng danh sch lin thuc.................................................................... 81
3. Thut ton tm kim theo chiu rng .................................................................................... 81
3.1. Nguyn tc t mu.......................................................................................................... 81
2.2. Breadth First Tree........................................................................................................ 81
3.3. M t thut ton.............................................................................................................. 82
4. Thut ton tm kim theo chiu su ...................................................................................... 84
4.1. Gii thiu thut ton....................................................................................................... 84
4.2. Th tc tm kim theo chiu su .................................................................................... 85
4.3. nh gi phc tp thut ton DFS v DFS-Visit ...................................................... 86
5. Bi ton tm ng i ngn nht ........................................................................................... 87
5.1. Mt s khi nim c bn ................................................................................................ 87
5.2. Thut ton Dijkstra......................................................................................................... 88
6. Bi ton v cy khung nh nht ............................................................................................ 90
6.1. Cc khi nim c bn ..................................................................................................... 90
6.2. Thut ton Kruskal ......................................................................................................... 91
6.3. Thut ton Prim.............................................................................................................. 92
BI TP CHNG 5 .............................................................................................................. 94
CC CHUYN MN HC................................................................................................... 96

Phn tch thit k thut ton v nh gi phc tp gii thut

TI LIU THAM KHO


1. V nh Ha, Gii thut v nh gi phc tp gii thut, Gi gio trnh mn hc theo
chun SCORM, Trng HSP HN.
2. H S m (ch bin), c ng, L Minh Hong, Nguyn Thanh Hng, Ti liu gio
khoa Chuyn Tin Quyn 1 v 2, Nh xut bn gio dc, 2009.
3. Nguyn c Ngha, Nguyn T Thnh, Ton ri rc, Nh xut bn gio dc, ti bn 2005.
4. Larry Nyhoff, Lp trnh nng cao bng Pascal vi cc cu trc d liu, Dch gi L Minh
Trung, Cng ty lin doanh t vn v dch v khoa hc k thut SCITEC, 1991.
5. Nguyn Ch Trung, Gio trnh Thut ton v k thut lp trnh Pascal, Nh xut bn H
Ni, 2005.

Nguyn Ch Trung Nguyn Th Thu Thy

Chng 1. CC KHI NIM C BN


1. Thut ton (gii thut, thut gii)
1.1. nh ngha
Mt thut ton l mt danh sch tng bc cc ch dn gii quyt cho mt bi ton c th. 1
gc lp trnh, thut ton cn c gi l thut gii hay gii thut, l mt danh sch cc
thao tc (cu lnh) theo my tnh thc hin sau mt s hu hn bc, t input l d liu
vo ca bi ton, s thu c output l d liu ra cn tm ca bi ton.

1.2. Cc tnh cht c bn ca thut ton


1.2.1. Tnh dng
Thut ton phi kt thc sau mt s hu hn ln thc hin cc thao tc.
V d: thut ton sau y vi phm tnh dng
Bc 1: S 0; i 0;
Bc 2: i i + 1;
Bc 3: S S + i*i;
Bc 4: Quay v bc 2;
Bc 5: a ra S v kt thc thut ton
Thut ton c sa li n c tnh dng (tr thnh thut ton tnh tng cc bnh phng ca n
s t nhin u tin) nh sau:
Bc 1: Nhp N;
Bc 2: S 0; i 0;
Bc 3: Nu i N th chuyn n Bc 7;
Bc 4: i i + 1;
Bc 5: S S + i*i;
Bc 6: Quay v bc 3;
Bc 7: a ra S v kt thc thut ton

T thut ton (algorithm) xut pht t tn ca quc gia chu trung tm c xa l Khorezm, v sau l cc nc
cng ha x hi ch ngha Kazakh, Turkmen, and Uzbek. Vo khong nm 825 sau cng nguyn, nghin cu chnh
v i s v h thng khi nim s hc n c vit bi Mohammed, l con trai ca Musa (Khorez); ting
Lattinh ngha l bi Mohamed ibn Musa al-Khowarizmi. Vo nm 857, on vn bn ting ny c dch sang
ting Anh l "Algoritmi. T y, xut pht t cm t al-Khowarizmi, Hisab al-jabrw'sal-muqabalah
(Mathematics-al-jabrw'sal muqabalah) m chng ta c t algebra (i s)

Phn tch thit k thut ton v nh gi phc tp gii thut


1.2.2. Tnh xc nh
Thut ton phi m bo sau khi thc hin mt thao tc th hoc thut ton kt thc hoc c ng
mt thao tc hon ton xc nh thc hin tip theo.
V d: thut ton sau y vi phm tnh xc nh:
Bc 1: Nhp a, b;
Bc 2: Tnh din tch hnh ch nht kch thc a, b hoc tnh th tnh hnh nn ng
cao a v bn knh hnh trn y l b. Tc l:
S a * b hoc S (1/3).a.b2
Bc 3: a ra S v kt thc thut ton
Sa li
Bc 1: Nhp a, b, nhp chn la choice;
//Qui c choice = 1 l tnh din tch hnh ch nht, ngc li, tnh th tch hnh nn
Bc 2: Nu choice = 1 th S a * b v thc hin bc 4;
Bc 3: S (1/3).a.b2
Bc 4: a ra S v kt thc thut ton;
V d khc: thut ton Tm s hng Fibonacci th N di y vi phm tnh xc nh
Bc 1: Nhp s dng N
Bc 2: Nu N 2 th c 1, kt thc thut ton
Bc 3: a 1; b 1; k 2;
Bc 4: Nu k = N th a ra c v kt thc thut ton,
Bc 5: k k + 1; Thc hin bc 6 hoc bc 7 sau y:
Bc 6: c a + b; a b; b c; Quay v bc 4;
Bc 7: c a + b;
Bc 8: a b; b c; Quay v bc 4;
Sa li:
Bc 1: Nhp s dng N
Bc 2: Nu N 2 th c 1, a ra c v kt thc thut ton
Bc 3: a 1; b 1; k 2;
Bc 4: Nu k = N th a ra c v kt thc thut ton,
Bc 5: k k + 1;
Bc 6: c a + b; a b; b c; Quay v bc 4;
1.2.3. Tnh ng n
Mt thut ton phi m bo cho ra Output lun ng i vi mi d liu vo ca Input.

Nguyn Ch Trung Nguyn Th Thu Thy


Ta nh ngha mt b d liu vo y l n bao ph ht (cover all the cases) tt c cc trng
hp cn xem xt.
V d, gii phng trnh bc 2: ax2 + bx + c = 0 (vi a 0). B Input y l cc gi tr ty
ca a, b, c nhng phi trng hp sau (vi d = b2 - 4ac)
d = 0, v d (a, b, c) = (1, -2, 1)
d > 0, v d (a, b, c) = (1, 5, 4)
d < 0, v d (a, b, c) = (9, 2, 5)
Nh vy, thut ton m bo tnh ng n nu n lun cho kt qu (output) ng n i vi
mt b d liu vo y .
V d: Xt tnh ng n ca thut ton tnh m = max (a, b,c) di y:
Bc 1: Nhp a, b, c;
Bc 2: Nu a < b th m b
Khng th
Nu a < c th m c;
Bc 3: a ra m v kt thc thut ton;
R rng thut ton trn sai ti mt s b d liu, v d nu b d liu vo l (a, b, c) = (1, 2, 3)
th thut ton cho kt qu m = 2, khng ng yu cu ca bi; nu b d liu vo l (a, b, c) =
(2, 1, 3) th khng c ch th no trong thut ton tc ng vo m, do m khng xc nh v
khng tnh c m nh yu cu bi.
C th sa li thut ton nh sau:
Bc 1: Nhp a, b, c;
Bc 2: m a;
Bc 3: Nu m < b th m b;
Bc 4: Nu m < c thi m c;
Bc 5: a ra m v kt thc thut ton;
1.2.4. Tnh ph dng
Thut ton phi m bo gii c mt lp bi ton.
V d thay v xy dng thut ton v vit chng trnh gii cc phng trnh:
1) 5x2 + 12x - 1 = 0
2) 2x2 -6x +2 = 0
3) 7x + 100 = 0
4) -50x2 +112x - 11 = 0

Phn tch thit k thut ton v nh gi phc tp gii thut


Ngi ta tin hnh xy dng thut ton v vit chng trnh gii phng trnh:
ax2 + bx + c = 0 vi mi s thc a, b, c cho trc.
1.3. Cc tnh quan trng ca thut ton
Cc tnh cht ny lin quan n vic nhn mnh u im ca "thut ton tin hc" l c th giao
cho my tnh thc hin. Mt "thut ton ton hc" thun ty c th rt p nhng cha chc
ci t d dng trn my tnh, v nu ci t c th thut ton cha chc n nh v kh
thi. Ni gc tng t, hai tnh cht sau y th hin s khc bit gia ton l thuyt v ton
tnh.
- Ton l thuyt quan tm n cc vn nh tnh ca bi ton: tn ti, duy nht, tnh cht
nghim ca cc bi ton.
- Ton tnh quan tm n xy dng phng php, thut ton tm nghim bi ton trn my
tnh.
Thut ton c xy dng phi tha mn yu cu v tnh kh thi v tnh n nh.
1.3.1. Tnh kh thi
Mt thut ton l kh thi nu n thc hin c trn my tnh trong mt thi gian chp nhn
c. Thi gian y khng tnh n kiu CPU v cha tnh n dung lng b nh cn cp
pht.
V d (tnh kh thi). Cho h phng trnh i s tuyn tnh

Ax = b ,

(1)

trong A l ma trn vung cp n vi nh thc khc 0.


V l thuyt, c th gii h trn bng thut ton m tng ca n da vo cng thc Cramer:

xi =

i
,

(i =1,..., n),

(2)

trong = det A , cn i l nh thc ca ma trn A sau khi thay ct i bi ct t do b. Nhng


vic tnh ton ra nghim bng s c th li l mt vic khng n gin. Theo cng thc (2) cn
phi tnh n +1 nh thc cp n. Mi nh thc l tng ca n! s hng, mi s hng l tch ca n
tha s. Do vy, tnh mi s hng cn thc hin n 1 php nhn. Nh vy, tt c s php tnh
nhn cn thc hin trong (2) l Q = n!(n+1)(n-1).
Gi s n = 20. Khi Q 9.7073 *10 20 . Nu tc ca my tnh l 100 triu php tnh/giy th
thi gian thc hin khi lng tnh ton trn l 2.6965*109 gi = 3.0782 *105 nm. Mt thi
gian ln v cng! V nh vy, thut ton da vo cng thc Cramer l hon ton khng kh thi
cho d my tnh c tng tc ln gp hng nghn, hng vn ln.
trn ta mi ch xt vic gii mt h c 20, m thc t khoa hc v cng ngh i hi phi gii
cc h phng trnh i s tuyn tnh c hng vn, hng triu hoc hn th na. V th, cn phi

Nguyn Ch Trung Nguyn Th Thu Thy


nghin cu xut cc phng php hiu qu c th gii c cc h thng phng trnh c
ln.
1.3.2. Tnh n nh
Mt thut ton gi l n nh nu sai s tnh ton (do my tnh lm trn s) khng b khuch i
trong qu trnh tnh.
V d (tnh n nh). Gi s cn tnh tch phn
1

I n = x n e x 1dx (n 1) .
0

Tch phn tng phn: t u = xn th du = nxn-1dx; t dv = ex-1dx th v = ex-1 ta c


1

I n = x n e x 1 10 n x n1e x 1dx = 1 nI n1 .
0

Ngoi ra ta c
1

I1 = xe x1dx = e x1 ( x 1)

1
0

1
0.3679.
e

Nh vy, tnh I n ta thu c cng thc truy hi tnh c In v mt l thuyt:


I n = 1 nI n 1 , n 2,
I 1 = 0.3679.
V mt thc t tnh trn my tnh khng cho kt qu mong mun khi n ln. C th l tnh trn
my tnh vi n = 25 ta c bng kt qu sau (lit k theo tng hng)
0.3679

0.2642

0.2073

0.1709

0.1455

0.1268

0.1124

0.1009

0.0916

0.0839

0.0774

0.0718

0.0669

0.0627

0.0590

0.0555

0.0572

-0.0295

1.5596

-30.1924

635.0403 -13969.8864 321308.3881 -7711400.3133 192785008.8325


Kt qu gim dn t 0.3679 (khi n = 1) n 0.0555 (khi n=16).
Kt qu sau kt qu thay i tht thng v gi tr tuyt i tng rt nhanh.
iu ny hon ton khng ph hp vi l thuyt v theo l thuyt th I n 0 khi n do
1

0 I n x n dx =
0

1
.
n +1

Phn tch thit k thut ton v nh gi phc tp gii thut


Hin tng kt qu tnh ton I n nu trn l s khng n nh ca thut ton: sai s ban u khi

1
0.3679 b khuych i trong qu trnh tnh. C th nh sau: Thay v tnh chnh
e
1
~
xc I1 = ta tnh xp x ca n l I 1 = I 1 + , trong l sai s. Gi s cc tnh ton tip theo
e
khng mc phi sai s. Vi n = 2 ta c
tnh I 1 =

~
~
I 2 = 1 2 I 1 = 1 2( I 1 + ) = (1 2 I 1 ) 2 = I 2 2 .
~
~
Thu c I 2 vi sai s | I 2 I 2 |= 2 . Tng t, bc th n thay cho gi tr ng I n ta thu
~
~
c gi tr gn ng I n vi sai s | I n I n |= n! . Do , d c b th khi n ln, sai s vn
ln v ta khng th nhn c gi tr chp nhn c l gn ng cho I n .

2. Phn tch thut ton


2.1. Ti sao phi phn tch thut ton
Xt mt thut ton nhn 2 s phc
z1 = a + bi; z2 = c + di
z = z1 * z2 = (ac bd) + (ad + bc)i
Khi tin hnh thut ton: my tnh thc hin 4 php nhn v 3 php cng ( y l php cng i
s, ngha l php tr c xem l cng vi s m).
Gi s php nhn thc hin mt 1 giy, php cng thc hin mt 0.01 giy, php gn thc hin
mt 0.005 giy. Khi php nhn hai s phc trn thc hin mt 4*1 + 3*0.01 + 0.005 = 4.035
giy. gim thi gian tnh ton, ta c th gim php nhn nh cc tnh ton sau y:
ac - bd v ad + bc = (a + b)*(c + d) - ac - bd
Do nu t p := ac; q := bd; Th z := (p - q) + ((a +b)*(c+d) - p - q)i
Khi vic tnh z gm 3 php nhn, 6 php cng v 3 php gn; mt khong thi gian l 3*1 +
6*0.01 + 3*0.005 = 3.075 giy, gim c 4.04 - 3.09 = 0.96 giy.
V d trn cho thy mt bi ton c th tn ti nhiu thut ton gii, do cn la chn thut
ton tt nht. iu ny cng dn n vic phn tch thut ton. Ngoi ra, mt bi ton c ci
t bng mt thut ton ng, nhng cha chc cho kt qu mong mun. V cc l do sau:

Thi gian thc hin qu lu

Tn nhiu b nh

iu ny cng dn n cn phn tch thut ton. Khi phn tch thut ton, ta thng xem xt v
thi gian v b nh chi ph cho thut ton, trong ch yu phn tch v mt thi gian.

10

Nguyn Ch Trung Nguyn Th Thu Thy

2.2. Thi gian thc hin thut ton


Thi gian thc hin thut ton ph thuc vo cc yu t sau:
1. Kch thc d liu u vo ( y ta s k hiu l n).
2. Tc my tnh
3. Ngn ng lp trnh
4. K thut lp trnh
Cc yu t (2), (3), (4) khng ng nht i vi tng loi my tnh v ngn ng lp trnh. V th
thi gian thc hin thut ton c nh gi ch yu da vo yu t (1) l kch thc d liu u
vo.
nh ngha 1.1. Ta gi T(n) l hm thi gian ph thuc vo kch thc d liu u vo n.
nh ngha 1.2. n v tnh ca hm T(n) khng phi l n v thi gian thc m l s ln thc
hin cc php tnh c bn. Cc php tnh c bn l cc php ton c thi gian thc hin b chn
bi mt hm s.

Cc php tnh c bn bao gm:


1. Li gi th tc nh read, write, v li gi hm nh sqr, sqrt,..
2. Cu lnh gn
3. Php tnh s hc (+, -, *, /)
4. Php ton logic v php ton so snh
Ch : y ta khng xem xt thi gian thc hin i vi cc cu lnh iu khin (r nhnh ifthen, case-of, lp for-do, while-do, v repeat-until) v chng khng c xem l cc php tnh c
bn. Vic b qua cc cu lnh iu khin mc d khng cho kt qu chnh xc v thi gian tnh
(khc nhau mt c s ln gi tr ca n, vi n l kch thc d liu vo), nhng thng khng nh
hng n phc tp cn nh gi. Vi trng hp, cu lnh r nhnh khi kim tra iu kin
c quan tm v thi gian ca vic kim tra iu kin ny c tnh l mt hng s no .
Mt cch tng qut, nu mc ch l tnh thi gian thc hin thut ton th nn xem xt y c
cc cu lnh iu khin, nu mc ch l nh gi phc tp thut ton th c th b qua cc
cu lnh iu khin.
V d 1.1 Tnh trung bnh cng ca n s nhp t bn phm

S ln thc hin
1.

write(n = );

2.

readln(n);

3.

T := 0;

for i := 1 to n do

begin

11

Phn tch thit k thut ton v nh gi phc tp gii thut


4.

write(x = );

5.

readln(x);

6.

T := T + x;

end;
7.

T := T/n;

Phn tch v nh gi: Cc lnh 1, 2, 3 v 7 c thc hin mt ln. Thn vng lp gm cc lnh
4, 5, 6 c thc hin n ln. Vy T(n) = 3n + 4.
nh ngha 1.3. C ba loi thi gian tnh:

Thi gian tnh tt nht: L thi gian thc hin nhanh nht ca thut ton vi mt b d
liu vo no .

Thi gian tnh ti nht: L thi gian thc hin chm nht ca thut ton vi mt b d
liu vo no .

Thi gian tnh trung bnh: L trung bnh cng ca cc thi gian thc hin thut ton i
vi tt c cc trng hp thc hin thut ton (ng vi mt b d liu vo y ).

V d 1.2 Tm kim tun t

Cho dy s (a) gm n phn t a1, a2, ..., an. Hy tm v tr ca phn t c gi tr bng x cho trc
trong dy.
1.

i := 1;

1 ln

2.

found := false;

1 ln

while (i <= n) and not found do


if x = ai then
3.

found := true;
else

4.

i := i + 1;
if found then

5.

writeln(vi tri ,i)

1 ln

else
6.

writeln(khong tim thay);

Phn tch v nh gi: Mi cu lnh 1, 2 lun thc hin 1 ln. Mt trong hai lnh 5 hoc 6 thc
hin mt ln. Vy thi gian thc hin thut ton lun c dng T(n) = 3 + k, trong k l s ln
thc hin cc cu lnh 3 v 4. Khi ta c th tm thi khng cn xem xt cc cu lnh 1, 2, 5, 6
na m ch cn xem xt cc cu lnh 3 v 4.

12

Nguyn Ch Trung Nguyn Th Thu Thy


Thi gian tnh tt nht khi x = a1: Cu lnh 3 thc hin mt ln, cu lnh 4 thc hin khng ln,
do k = 1 v :
T(n) = 3 + 1
Thi gian tnh ti nht xy ra khi khng c x trong dy (khng tm thy). Cu lnh 3 thc hin
khng ln, cu lnh 4 thc hin n ln. Do k = n v
T(n) = 3 + n
Thi gian tnh trung bnh c tnh nh sau:
Nu x = a1: T(n) = 3 + 1 (lnh 3 mt ln; lnh 4 khng ln)
Nu x = a2: T(n) = 3 + 2 (lnh 3 mt ln, lnh 4 mt ln)
Nu x = a3: T(n) = 3 + 3 (lnh 3 mt ln, lnh 4 hai ln)
.
Nu x = an: T(n) = 3 + n (lnh 3 mt ln, lnh 4 thc hin n-1 ln)
Nu khng thy: T(n) = 3 + n (lnh 3 khng ln, lnh 4 thc hin n ln)
Suy ra thi gian tnh trung bnh l :
T ( n) =

3n +

n(n + 1)
+3+ n
n 2 + 9n + 6
2
=
n +1
2(n + 1)

Phn tch thut ton theo ngha hp y l xc nh T(n) trong trng hp xu nht. Phn tch
thut ton theo ngha rng l vic la chn thut ton tt: tn t b nh, v c thi gian tnh
trong trng hp xu nht l chp nhn c (tc l tha mn tnh kh thi).
Mt s vn t ra: Khi phn tch thut ton, ngi ta t khi quan tm n tnh chnh xc ca
hm thi gian tnh m thng quan tm n tng ca hm ny.
V d 1.3 nh gi hm thi gian khi n tng

Xt hm thi gian T(n) = 60n2 + 9n + 19. Khi n tng rt ln th T(n) 60n2


Gi s T(n) c tnh bng giy, khi hm T(n) trn y tnh bng pht c dng:
T = n2 + 0,15n + 0,316.
Khi n tng rt ln th T(n) n2.
Khi ta ni rng T(n) c thi gian tnh tng ng vi hm n2 , hay T(n) l VCL (v cng
ln) cng bc vi n2, v ta vit T(n) = O(n2). K hiu O c l k hiu big-O. di y ta c
cch gi khc, l T(n) c bc khng qu n2.
Vy trong qu trnh phn tch thut ton, ta cn tnh T(n) theo k hiu Big-O.

13

Phn tch thit k thut ton v nh gi phc tp gii thut

2.3. Khi nim phc tp ca thut ton, k hiu big-O


nh ngha 1.4. Cho f v g l hai hm i s nguyn dng.

Ta vit f(n) = O(g(n)) v ni f(n) c bc khng qu g(n) nu tn ti hng s dng C1 v


s nguyn N1 sao cho
f(n) C1.g(n) vi n N1
Theo cch vit gii hn, iu ny ngha l: lim

f ( n)
= C1
g ( n)
n

Ta vit f(n) = (g(n)) v ni f(n) c bc t nht l g(n) nu tn ti hng s dng C2 v


s nguyn dng N2 sao cho
f(n) C2.g(n) vi n N2
Theo cch vit gii hn, iu ny ngha l: lim
n

f ( n)
=
g ( n)

Ta vit f(n) = (g(n)) v ni f(n) c bc l g(n) nu f(n) = O(g(n)) v f(n) = (g(n))


Theo cch vit gii hn, iu ny ngha l: lim
n

f ( n)
=0
g ( n)

Theo nh ngha trn, nh gi thi gian ti nht ca thut ton chnh l vic tnh O(.), nh gi
thi gian tt nht ca thut ton l vic tnh (.).
nh ngha 1.5. Khi hm thi gian tnh T(n) ca thut ton c biu din qua k hiu big-O th
T(n) c gi l phc tp thut ton (Complexity of Algorithms).
V d 1.4 Biu din hm thi gian theo cc k php big-O, omega, theta

Xt hm T(n) = 60n2 + 9n + 1,
1) Tnh O(.)
Ta c 60n2 + 9n + 1 60n2 + 9n2 + n2 = 70n2 vi n 1
Chn C1 = 70, g(n) = n2, N1 = 1 T(n) C1.g(n) hay T(n) = O(n2)
2) Tnh (.)
Ta c 60n2 60n2 + 9n + 1 vi n 1
Chn C2 = 60 , N2 = 1 T(n) = (n2)
3) Tnh (.)
V O(n2) = T(n) = (n2) T(n) = (n2).

Cc hm nh gi thng dng:

14

Nguyn Ch Trung Nguyn Th Thu Thy


STT

Hm

Tn gi: phc tp

O(C), O(1)

Hng s

O(log2n)

logarit

O(n)

tuyn tnh

O(nlogn)

nlog2n

O(n2)

bc 2

O(n3)

bc 3

O(nk)

a thc

O(an)

hm m

O(n!)

giai tha

nh gi

Chp nhn c

Khng chp
nhn c

V d 1.5 Dng k hiu nh gi tc tng ca hm


a) f (n) =

n(n + 1) n 2 n
=
+
2
2 2

Chn C1 = 1; N1 = 1; C2 = 1/2; N2 = 1, g(n) = n2, ta c:


f(n) n2/2 +n2/2 = n2 vi n N1 f(n) C1.g(n) f(n) = O(n2)
f(n) = n2/2 + n/2 n2/2 vi n N2 f(n) C2.g(n) f(n) = (n2)
Do f(n) = (n2).
b) f (n) =

n2 + 1
2
= n 1+
n +1
n +1

Ta c n 1 +
V v

2
n n 1 , t C1=1; N1=1 th f(n) = O(n)
n +1

1
2
n n 1+
n 1 nn t C2 = 1/2; N2=2 th f(n) = (n)
2
n +1

Suy ra f(n) = (n).

3. Cc qui tc xc nh phc tp thut ton


3.1. Qui tc hng s
Nu mt thut ton T c thi gian thc hin T(n) = O(C.f(n)) vi C l hng s dng th c th
coi thut ton T c phc tp tnh ton l O(f(n)).

15

Phn tch thit k thut ton v nh gi phc tp gii thut


Chng minh: V T(n) = O(C.f(n)) nn tn ti s dng C1 v s nguyn N1 sao cho T(n)
C.C1.f(n) vi n N1. Khi chn C2 = C.C1 th T(n) C2.f(n) vi n N1, hay T(n) =
O(f(n)).

3.2. Qui tc cng


Gi s mt thut ton T gm hai phn lin tip T1 v T2. V, gi s phn T1 c thi gian thc
hin l T1(n) = O(f(n)); phn T2 c thi gian thc hin l T2(n) = O(g(n)). Khi thi gian thc
hin thut ton s l T(n) = T1(n) + T2(n) = O(f(n) + g(n))
Chng minh: V T1 = O(f(n)) nn tn ti hng s dng C1 v s nguyn N1 sao cho T1(n)
C1.f(n) vi n N1. V v T2 = O(g(n)) nn tn ti hng s dng C2 v s nguyn N2 sao cho
T2(n) C2.g(n) vi n N2. Chn C0 = max(C1, C2) v N0 = max(N1, N2) th vi n N0 ta
c: T(n) = T1(n) + T2(n) C1.f(n) + C2.g(n) C0.f(n) + C0.g(n) = C0(f(n)+g(n)).
Do T(n) = O(f(n) + g(n)).

3.3. Qui tc ly max


Nu thut ton T c thi gian thc hin T(n) = O(f(n) + g(n)) th c th coi thi gian thc hin
thut ton T c phc tp l T(n) = O(max(f(n), g(n)).
Chng minh: V T(n) = O(f(n) + g(n)) nn tn ti s dng C1 v s nguyn N1 sao cho vi n
N1 th T(n) C1.(f(n) + g(n)) = C1.f(n) + C1.g(n) 2C1.max(f(n), g(n)). Do T(n) =
O(max(f(n), g(n))).
Ch : Qui tc max rt hay c s dng. Vi qui tc ny:

Nu T(n) l mt a thc th c th khng nh cc ton hng bc thp l khng quan


trng, c th b qua khi nh gi phc tp thut ton.

Trong mt on chng trnh, cu lnh c thc hin nhiu nht (c gi l cu lnh


c trng) s c s dng nh gi phc tp thut ton ca on chng trnh ,
m khng cn quan tm n cc cu lnh khc (iu ny khng ng nu tnh thi gian
thc hin thut ton cho ton b on chng trnh). Cu lnh c trng thng l cu
lnh n nm trong mt vng lp mc su nht. Vic nh gi phc tp thut ton
s dng cu lnh c trng s c dng n t phn p dng ca chng 3, hin ti
khng dng n rn luyn vic phn tch thut ton.

V d 1.6. Minh ha qui tc max


a) T(n) = 3n + 4 (Trong V d 1.1). Ta c T(n) = 3n + 4n0 T(n) = O(n).

Vy thut ton tnh gi tr trung bnh c phc tp tuyn tnh.


b) T (n) =

n 2 + 9n + 6
(Trong V d 1.2). Ta c
2(n + 1)

16

Nguyn Ch Trung Nguyn Th Thu Thy

T ( n) =

6
n 2 + 9n + 6 n 2 + 9n + 6

= n + 9 + n + 9n0 n N 0 = 6
2(n + 1)
n
n

T ( n) = O ( n )
Vy thut ton tm kim tun t c phc tp tuyn tnh.
c) T(n) = 60n2 + 9n + 9 (Trong V d 1.3). Ta c T(n) = O(n2)

V chn N0 = 9 v C0 = 70 th vi n N0 ta c 60n2 + 9n + 9 60n2 + 9n2 + n2 = 70n2. Do


T(n) C0.n2 vi n N0 hay T(n) = O(n2).

3.4. Qui tc nhn


Nu on thut ton T c thi gian thc hin T(n) = O(f(n)). Khi nu thc hin k(n) ln on
thut ton T vi k(n) = O(g(n)) th phc tp tnh ton ca qu trnh lp ny l: T(n) =
O(f(n).g(n)).
Chng minh: Thi gian thc hin k(n) on thut ton T s l k(n).T(n). Theo nh ngha big-O
ta c:
- Tn ti hng s dng Ck v s nguyn Nk sao cho k(n) Ck.g(n) vi n Nk
- Tn ti hng s dng Cr v s nguyn Nr sao cho T(n) Cr.f(n) vi n Nr.
Vy nu t N0 = max(Nk, Nr) v C0 = Ck.Cr th vi n N0 ta c: k(n).T(n) C0.f(n).g(n) hay
phc tp tnh ton ca qu trnh lp l T(n) = O(f(n).g(n)).

4. Cc k thut nh gi phc tp thut ton


4.1. Cu lnh n
Cu lnh n l cu lnh thc hin mt thao tc, v d cu lnh gn n gin (khng cha li gi
hm trong biu thc), cu lnh vo/ra n gin, cu lnh chuyn iu khin n gin nh break,
goto, continue, return.
Thi gian thc hin mt cu lnh n khng ph thuc vo kch thc d liu nn s l O(1).
Ni cch khc, cc cu lnh n c thi gian tnh b chn bi hm s O(1) (hay O(c)). V d mi
cu lnh sau u c thi gian thc hin l O(1): readln; writeln; readln(x); writeln(k);

4.2. Cu lnh hp thnh


Thi gian thc hin mt cu lnh hp thnh s c tnh theo qui tc cng v qui tc max.
V d 1.7 Minh ha qui tc cng

if n > 1 then begin


1.

s := sqrt(n)

1 ln

2.

readln(x);

1 ln

17

Phn tch thit k thut ton v nh gi phc tp gii thut


1 ln

if s > x then
3.

s := s - x;
else

s := x - s;

end;
Hin nhin T(n) = 1 + 1 + 1 = 3 (ng nh qui tc cng) T(n) = O(1)
V d 1.8 Minh ha qui tc max i vi cu lnh hp thnh

if n > 1 then begin


for i :=1 to n do
1.
2.

n ln

write(i*i:6);
writeln;

1 ln

end;
D thy T(n) = 1 + n T(n) = O(n)
ng nh qui tc max: T(n) = O(max(1, n)) = O(n)

3.3. Cu lnh lp vi s ln lp bit trc for-do


for i := 1 to n do
P(i);
Trong P(i) l mt cu lnh hoc mt khi lnh (cu lnh hp thnh) trong thn vng lp. C
hai trng hp:
Trng hp 1: Thi gian thc hin P(i) l mt hng s v khng ph thuc vo i, ngha l
T(P(i)) = t , vi t l hng s. Khi thi gian thc hin cu lnh lp l n ln thc hin P(i), tc
l:

T (n) = n.t
V d 1.9. nh gi thi gian tnh ca vng lp khi P(i) l hng s

for i := 1 to n do begin
1.

write(x = );

2.

readln(x);

3.

S := S + x;

P(i)

end;
T(P(i)) = 3. Do T(n) = n.3 T(n) = O(n)

18

Nguyn Ch Trung Nguyn Th Thu Thy


Trng hp 2: Thi gian thc hin ca P(i) ph thuc vo i, ngha l T(P(i)) = t(i). Khi thi
gian thc hin cu lnh lp for i vi i ln lt nhn gi tr t 1 n n l T(n) = t(1) + t(2) +
+ t(n), hay ta c:
n

T (n) = t (i )
i =1

V d 1.10. nh gi thi gian tnh ca vng lp khi P(i) ph thuc i

for i := 1 to n do begin
for j:=1 to i do
1.

P(i)

write(j:5);

2.

writeln;
end;

T ( P(i )) = i + 1
n

T (n) = (i + 1) = n + i = n +
i =1

i =1

n(n + 1) 1 2 1
= n + n
2
2
2

T ( n) = O ( n )
2

3.4. Cu lnh r nhnh if


Gi s thi gian thc hin hai cu lnh thnh phn ca cu lnh if dng l f(n) v g(n). Khi
thi gian thc hin cu lnh if s c tnh theo qui tc max, tc l s bng
O(max(f(n), g(n)).
Thi gian kim tra iu kin thng l hng s, tc l O(1).
V d 1.11. Minh ha thi gian tnh ca cu lnh r nhnh

if n < 1 then
1.

writeln(hay nhap so nguyen duong) 1 ln


else
for i :=1 to n do

2.

n ln

write(i : 5);

T(n) = max (1, n) = n T(n) = O(n)

3.5. Cu lnh lp vi s ln lp cha bit trc while, repeat


nh gi thi gian thc hin cu lnh lp ny ta da vo kinh nghim:
V d 1.12 Thi gian tnh i vi vng lp while n gin

1.

i := n;

1 ln

19

Phn tch thit k thut ton v nh gi phc tp gii thut


2.

S := 0;

1 ln

while i > 0 do begin


3.

write(x = );

4.

readln(x);

5.

S := S + x;

6.

i : = i - 1; end;

P(i) ln

T((P(i)) = 4 T(n) = 2 + 4.T(P(i)) = 2 + 4n T(n) = O(n)


V d 1.13 phc tp ca vng while m bin iu khin thay i khng lin tc

1.

i := n;

1 ln

2.

S := 0;

1 ln

while i > 0 do begin


3.

write(x = );

P(i)

4.

readln(x);

5.

S := S + x;

gm 4
cu lnh
c bn

6.

i : = i div 2;
end;

Phn tch, nh gi: P(i) gm 4 cu lnh c bn 3, 4, 5, v 6


-

i = n/20 P(i) thc hin ln th nht

i = n/21 P(i) thchin ln th hai

i = n/22 P(i) thchin ln th ba

i = n/2k-1 P(i) thc hin ln th k

Nu y l ln thc hin cui cng th n/2k-1 = 1 n = 2k-1 k = log2n + 1


Khi T(n) = 2 + 4k = 2 +4(log2n + 1) = 4log2n + 6
vi n 2 th T(n) 4log2n + 6log2n = 10log2n

Chn f(n) = log2n, N0 = 2; C0 = 10 ta c T(n) C0f(n) vi n N0.


Do : T(n) = O(log2n).
V d 1.14 phc tp ca vng lp while phc tp hn

1.

i := n;

1 ln

20

Nguyn Ch Trung Nguyn Th Thu Thy


2.

S := 0;

l ln

while i > 0 do begin


3.

for j := 1 to i do

4.

write(j:5);

5.

writeln;

6.

i := i div 2;

P(i )

end;
Phn tch, nh gi: P(i) gm hai cu lnh c bn 5 v 6, v mt cu lnh c bn 4 thc hin i
ln.
-

Ln 1: i = n/20 thc hin n + 2 cu lnh c bn

Ln 2: i = n/21 thc hin n/2 + 2 cu lnh c bn

Ln 3 i = n/22 thc hin n/22 + 2 cu lnh c bn

Ln k: i = n/2k-1 thc hin n/2k + 2 cu lnh c bn

Nu y l ln thc hin cui cng th n/2k-1 = 1 n = n/2k-1 k = log2n + 1. Khi :


1 1
1
+ 2 + ... + k 1 )
2 2
2
1
1 k
2
= 2 + 2 log 2 n + 2 + n
1
1
2
n
= 4 + 2 log 2 n + 2 n k 1
2

T ( n ) = 2 + 2 k + n (1 +

Do T(n) 2n + 2log2n + 4 2n + 2n + 4n = 8n (v khi n tng th log2n log22n =n).


Vy T(n) = O(n).

5. Mt s v d minh ha thit k thut ton v nh gi phc tp


Bi ton 1.1. Tnh gi tr gn ng ca exp(x) theo khai trin Taylor
x x2
xn
e = 1 + + + ... +
1! 2!
n!
x

a) Thit k gii thut


b) nh gi phc tp
Gii

21

Phn tch thit k thut ton v nh gi phc tp gii thut


a)
1, 2

s := 1; p := 1;
for i :=1 to n do begin

3.

p := p * x/i;

4.

s := s + p;

P(i)

end;
b) T(n) = 2 + 2*n T(n) = O(n)

Bi ton 1.2 Thut ton tm kim tun t


Cho dy gm n phn t a1, a2, ..., an. Hy a ra v tr ca phn t u tin bng phn t ng
ngay trc trong dy.
a) Thit k gii thut
b) nh gi phc tp
Gii
V d 6, 7, 3, 4, 9, 8, 1, 5, 2, 5, 4, 3 p s l v tr 7
a)
1, 2

i := 2; found := false;

1 ln

while (i<=n) and not found do


3.

if a[i] = a[i-1] then found := true

4.

else i := i + 1;

5.

if found then write(Vi tri can tim: , i)

6.

else write(khong co phan tu nao nhu vay);

P(i)

1 ln

Trong trng hp xu nht, lnh r nhnh - thn vng lp while thc hin n-1 ln. Do ta c
T(n) = 2 + (n-1) + 1 = n + 2 T(n) = O(n).

Bi ton 1.3 Thut ton tm kim nh phn


Cho dy n s a1, a2, ..., an c sp xp tng. Hy a ra v tr ca phn t trong dy c gi tr
bng x cho trc.
Gii
1.

d := 1;

1 ln

2.

c := n;

1 ln

3.

found := false;

1 ln

22

Nguyn Ch Trung Nguyn Th Thu Thy


while (d <= c) and not found do begin
4.

k := (d+c) div 2;

5.

if x < a[k] then c := k - 1

6.

else if x > a[k] then d := k + 1

7.

P(i)

else found := true;


end;

8.

if found then write(Tim thay o vi tri , k)

9.

else write(khong co x trong day);

1 ln

Trong trng hp xu nht, khng c x trong dy, ta cn tnh s ln thc hin khi lnh P(i)
trong thn vng lp, gm 2 lnh c bn. V mi ln i qua vng lp di ca dy gim i mt
na, nn sau vng lp th k di ca dy cn l n/2k. Vng lp kt thc ti ln th k m di
cn li ca dy l n/2k = 1 hay k = log2n. Khi :
T(n) = 4 + 2k = 4 + 2log2n log2n + 2log2n vi n N0 = 3. T(n) 3log2n T(n) = O(log2n).

Bi ton 1.4 Thut ton sp xp chn la


Cho dy (a) gm n s a1, a2, ..., an. Hy sp xp dy (a) theo th t khng gim.
Thut ton sp xp chn trc tip kinh in (cha ti u)
for i :=1 to n-1 do begin
(* chn phn t nh nht trong dy a[i] n a[n]*)
1.

k := i ; (*v tr ca phn t nh nht*)

n-1 ln

2.

min := a[i] (*gi tr phn t nh nht*)

n-1 ln

for j := i + 1 to n do

P(i)

if a[j] < min then begin


3.

k := j;

4.

min := a[j]; end;


if (k<>i) then begin

5.

a[k] := a[i];

n-1 ln

6.

a[i] := min; end; end;

n-1 ln

Xt thut ton trong trng hp ti nht: dy (a) c sp xp khng tng. Ta cn nh gi


c s ln thc hin hai cu lnh c bn 3 v 4, do tnh c thi gian P(i) thc hin cc
cu lnh for j ph thuc vo i.

23

Phn tch thit k thut ton v nh gi phc tp gii thut


-

i = 1: hai cu lnh 3 v 4 thc hin n - 1 ln

i = 2: hai cu lnh 3 v 4 thc hin n - 2 ln

i = n-1: hai cu lnh 3 v 4 thc hin n- (n-1) = 1 ln

Vy T(P(i)) = 1 + 2 + + (n-2) + (n-1) = n(n-1)/2 (ta t bng p)


Do T(n) = 4(n-1) + n(n-1)/2 = (1/2)n2 + (7/2)n - 4.
Vy T(n) = O(n2).
Thut ton sp xp chn trc tip ci tin (ti u hn)
for i :=1 to n-1 do begin
(* chn phn t nh nht trong dy a[i] n a[n]*)
1.

k := i ; (*v tr ca phn t nh nht*)

n-1 ln

for j := i + 1 to n do

p ln

2.
3.

if a[j] < a[k] then k := j;


if k<> i then begin

4.

tg := a[i];

5.

a[i] := a[k];

6.

a[k] := tg; end;

n-1 ln

end;
Do T2(n) = 2(n-1) + n(n-1)/2 = (1/2)n2 + (3/2)n - 2.
Vy T2(n) = O(n2).
Ta thy khi thay i thut ton, phc tp khng thay i nhng thi gian tnh ton t hn.

6. Phn tch chng trnh (con) qui


6.1. Khi nim v qui
Khi nim v qui dn n mt lot cc khi nim nh bi ton qui, li gii qui, thut
ton qui v cui cng l chng trnh con qui.
Ta ni: mt i tng l qui khi n bao gm chnh n nh mt b phn hoc n c nh
ngha di dng chnh n.
Bi ton T gi l bi ton qui nu n c gii bng mt bi ton T c dng ging nh T, ni
cch khc T l bi ton c gii bng mt thut ton qui.

24

Nguyn Ch Trung Nguyn Th Thu Thy


V d v hnh nh qui: gi s cn xc nh mt ci ti: Cn ly mt ci ti m n ng trong
mt ci ti th hai m ci ti th hai ny l mt ci ti m n ng trong mt ci ti th ba, ci
ti th ba l mt ci ti m n ng trong ci ti th t, ... Tuy nhin qu trnh cc ci ti cha
trong nhau y khng th v hn, n mt ci ti th n hu hn no th n khng ng trong
mt ci ti no na. Ci ti th n ny gi l ci ti neo, cc ci ti cn li gi l cc ci ti
c xc nh mt cch qui.
Trong ton hc, ta gp rt nhiu nh ngha qui m thng l cc cng thc tnh gi tr cho
mt hm s no c th tnh c bng qui np ton hc (hay cng thc truy hi).
V d 1.15 nh ngha qui hm tnh n!

Ta c th nh ngha f(n) = n! nh sau:


1 if n = 0

f ( n) =
n. f (n 1) if n > 0
Nh vy bi ton T tnh f(n) c gii da vo bi ton T tnh f(n-1) c dng ging nh T. Bi
ton T tnh f(n-1) li c gii da vo bi ton T tnh f(n-2) c dng ging nh T (hoc nh
T), c tip tc qu trnh qui v cui cng n phn neo, ta nhn c bi ton Tn c
gii hon ton khc, l f(0) = 1.

6.2. Chng trnh (con) qui


Chng trnh con th hin mt thut ton qui gi l chng trnh (con) qui. nh ngha
mt chng trnh con qui phn nh chnh xc nh ngha cng thc qui, ngha l gm hai
phn

Phn neo: Li gi hm hay th tc c thc hin bng mt li gii bit.

Phn qui: Li gi chnh hm hay th tc nhng c kch thc d liu u vo thay


i theo xu hng (thng l nh hn) qu trnh qui dn n phn neo.

V d 1.16 Chng trnh (con) qui tnh hm giaithua(n) = n!


function giaithua(n:integer): longint;
begin
if n = 0 then giaithua := 1
else giaithua := n*giaithua(n-1);
end;

6.3. Xy dng phng trnh (cng thc) qui


Phng trnh qui l phng trnh th hin mi quan h gia T(n) v T(k). Trong T(n) l
thi gian thc hin thut ton vi d liu vo kch thc l n, T(k) l thi gian thc hin chnh
thut ton nhng vi d liu kch thc l k.
V d 1.17 Xy dng phng trnh qui tnh hm giaithua(n)

25

Phn tch thit k thut ton v nh gi phc tp gii thut


Gi T(n) l thi gian thc hin thut ton tnh hm giaithua(n). Ta c
- n = 0: T(n) = 2 (l thi gian thc hin vic kim tra iu kin v lnh gn giaithua := 1)
- n > 0: Hm gi ti hm giaithua(n-1) tnh (n-1)! mt thi gian l T(n-1). Sau khi c kt qu
ca giaithua(n-1) th cn thc hin thm mt php nhn v mt php gn, mt mt thi gian l
mt hng s c, do T(n) = T(n-1) + c;
Vy phng trnh qui tnh hm giaithua(n) l:
2 if n = 0

T ( n) =
T (n 1) + c if n > 0
V d 1.18 Vit phng trnh quy tnh s hng Fibonaci th n

Dy Fibonaci c dng 1, 1, 2, 3, 5, 8, 13, 21, 35,


Gi f(n) l gi tr ca s hng Fibonaci th n.
a) nh ngha qui tnh hm f(n) nh sau:
1 if n 2

f ( n) =
f (n 1) + f (n 2) if

n>2

b) Chng trnh con qui tnh hm fibonaci(n):


function fibonaci(n: integer) : longint;
begin
if n <= 2 then fibonaci := 1
else fibonaci := fibonaci(n-1) + fibonaci(n-2);
end;
c) Phng trnh qui tnh hm fibonaci(n):
2 if n 2

T ( n) =
T (n 1) + T (n 2) + c if

n>2

Trong hng s dng c l thi gian thc hin php cng v php gn.

6.4. Gii phng trnh qui v nh l Th


Gii phng trnh qui thc cht l tin hnh nh gi phc tp ca thut ton qui.
a) Phng php th
tng ca phng php th l thay dn cc cng thc qui ca hm thi gian v phi cho
n khi thu c cc hm thi gian m chng nhn c cc gi tr c th.
V d 1.19 Tnh phc tp ca thut ton qui tnh n!

26

Nguyn Ch Trung Nguyn Th Thu Thy


2 if n = 0

T ( n) =
T (n 1) + c if n > 0
Gii:
T(n) = T(n-1) + c
= T(n-2) + 2c
= T(n-3) + 3c
=
= T(n-n) + n.c = T(0) + nc = 2 + n.c
T(n) = O(n).
V d 1.20 phc tp qui khi li gi qui gim 1/2 kch thc d liu u vo

c1 if n = 1

Gii phng trnh qui T (n) =


T (n / 2) + c if n > 1
Gii
bc 1 : T(n) = T(n/2) + c
bc 2 :

= T(n/22) + 2c

bc 3 :

= T(n/23) + 3c

bc k

= T(n/2k) + k.c
= T(1) + k.c

Gi s k l bc cui cng th n/2k = 1 k = log2n v T(n) = c1 + k.c = c1 + c.log2n.


Do T(n) = O(log2n).
V d 1.21 Thut ton qui c phc tp O(nlog2n)

c1 if n = 1

Gii phng trnh qui T (n) =


2T (n / 2) + c.n if n > 1
Gii
bc 1 : T(n) = 2T(n/2) + c.n
bc 2 :

= 22T(n/22) + 2c.n

bc 3 :

= 23T(n/23) + 3c.n

bc k

= 2kT(n/2k) + k.c.n

Gi s k l bc cui cng th n/2k = 1 k = log2n. Khi T(n/2k) = T(1) = c1 v

27

Phn tch thit k thut ton v nh gi phc tp gii thut


T(n) = c1.2k + k.c = c1.2log2(n) + c.n.log2n = c1.n + c.n.log2n
Do theo qui tc cng v qui tc max ta c T(n) = O(nlog2n).
b) S dng phng trnh c trng
nh ngha phng trnh c trng

Cho phng trnh qui c dng


T(n) = c1.T(n-1) + c2.T(n-2)

(1)

Khi , phng trnh c trng ca (1) c nh ngha l phng trnh dng


r2 - c1r - c2 = 0

(2)

S dng phng trnh c trng (2) nh gi phc tp ca thut ton qui c phng
trinh qui (1) da vo hai trng hp sau y :

Nu phng trnh (2) c hai nghim phn bit r1 v r2 th phng trnh qui c dng :
T(n) = .r1n + .r2n

(3)

Nu phng trnh (2) c nghim kp r0 th phng trnh qui c dng:


T(n) = .r0n + .n.r0n

(4)

trong , l cc s c xc nh bi iu kin neo v iu kin u.


V d 1.22 nh gi phc tp thut ton qui bng phng trnh c trng

Gii phng trnh qui sau


2 if n = 0

T ( n) =
6 if n = 1
5T (n 1) 6T (n 2) if

n >1

Gii
Xt phng trnh qui
T(n) = 5T(n-1) - 6T(n-2)

(1)

Phng trnh (1) c phng trnh c trng l :


r2 -5r + 6 = 0

(2)

Phng trnh (2) c hai nghim phn bit r1 = 2 v r2 = 3. Do phng trnh qui (1) c th
vit di dng
T(n) = r1n + r2n
Cc h s , c xc nh bi cc iu kin neo v iu kin u
V T(0) = 2, T(1) = 6, do :

28

Nguyn Ch Trung Nguyn Th Thu Thy


T (0) = r10 + r20 = 2
+ =2
= 0

1
1
2 + 3 = 6
= 2
T (1) = r1 + r2 = 6
Vy T(n) = 0. 2n + 2.3n = 2.3n T(n) = O(3n)
V d 1.22 nh gi phc tp thut ton qui bng phng trnh c trng

Gii phng trnh qui sau:


1 if n = 0

T ( n) =
7 if n = 1
6T (n 1) 9T (n 2) if

n >1

Gii
Xt phng trnh qui
T(n) = 6T(n-1) - 9T(n-2)

(1)

Phng trnh (1) c phng trnh c trng l :


r2 -6r + 9 = 0

(2)

Phng trnh (2) c hai nghim kp r0 = 3. Do phng trnh qui (1) c th vit di dng
T(n) = .r0n + .n.r0n
Cc h s , c xc nh bi cc iu kin neo v iu kin u
V T(0) = 1, T(1) = 7, do :

=1
T (0) = r10 + .0.r20 = 1

=1

1
1
3 + 3.1. = 7
= 4 / 3
T (1) = r1 + .1.r2 = 7
Vy T(n) = 1. 3n + (4/3).n.3n T(n) = O(n3n)
c) S dng nh l th
nh l th

Cho a 1, b > 1 v hm thi gian T(n) tha mn iu kin:


T(n) = a.T(n/b) + c.nk

(1)

Trng hp 1: Nu a > bk th T (n) = (nlogb a )

Trng hp 2: Nu a = bk th T (n) = (n k . log2 n)

Trng hp 3: Nu a < bk th T (n) = (n k )

V d 1.24 Minh ha vn dng nh l th trng hp 1

Gii phng trnh qui

29

Phn tch thit k thut ton v nh gi phc tp gii thut


T(n) =4.T(n/2) + c.n (c l hng s cho trc)
Gii
Phng trnh qui tha mn iu kin ca nh l th, c dng
T(n) = a.T(n/b) + c.nk
vi a = 4, b = 2 v k = 1.
V a > bk nn trng hp 1 ca nh l th c p dng, ta c T (n) = (nlogb a )
hay T (n) = (nlog 2 4 ) = (n 2 ) .
V d 1.25 Minh ha vn dng nh l th trng hp 2

Gii phng trnh qui


T(n) = 2.T(n/2) + c.n (c l hng s cho trc)
Gii
Phng trnh qui tha mn iu kin ca nh l th, c dng
T(n) = a.T(n/b) + c.nk
vi a = 2, b = 2 v k = 1.
V a = bk nn trng hp 2 ca nh l th c p dng, ta c T (n) = (n k . log2 n)
hay T(n) = (n.log2n).
V d 1.26 Minh ha vn dng nh l th trng hp 3

Gii phng trnh qui


T(n) =2.T(n/2) + c.n3 (c l hng s cho trc)
Gii
Phng trnh qui tha mn iu kin ca nh l th, c dng
T(n) = a.T(n/b) + c.nk
vi a = 2, b = 2 v k = 3.
V a < bk nn trng hp 3 ca nh l th c p dng, ta c T (n) = (n k )
hay T (n) = (n3 ) .

BI TP CHNG 1
Phn tch thi gian thc hin thut ton v nh gi phc tp thut ton ca cc on chng
trnh sau:
1.

30

Nguyn Ch Trung Nguyn Th Thu Thy


for i := 1 to n do
if i mod 2 = 0 then c := c + 1;
2.

for i := 1 to n do
if i mod 2 = 0 then c1 := c1 + 1
else c 2 :+ c2 + 1;
3.

for i :=1 to n do
if i mod 20 = 0 then
for j := 1 to n do c := c + 1;
4.

a := 0;
b := 0;
c := 0;
for i :=1 to n do
begin a := a + 1;
b := b + i;
c := c + i*i;
end;
5.

i := n;
d := 0;
while i > 0 do
begin i := i - 1;
d := d + i;
end;
6.

i := 0;
d := 0;
repeat

31

Phn tch thit k thut ton v nh gi phc tp gii thut


i := i + 1;
if i mod 3 = 0 then d := d + 1;
until i > n;
7.

d := 0;
for i := 1 to n - 1 do
for j := i + 1 to n do d := d + 1;
8.

d := 0;
for i := 1 to n - 2 do
for j := i + 1 to n - 1 do
for k := j + 1 to n do d := d + 1;
9.

d := 0;
while n > 0 do
begin n := n div 2;
d := d + 1;
end;
10. a ra mt thut ton tm phn t ln nht ca mt dy hu hn s thc.

a) M t thut ton ca bn bng cc cch khc nhau (m t, s khi, ngn ng ta Pascal).


b) Xc nh s php tnh nhiu nht phi thc hin trong thut ton trn.
11. M t thut ton xp li mt dy theo th t tng dn.

a) M t thut ton ca bn bng cc cch khc nhau (m t, s khi, ngn ng ta Pascal).


b) Xc nh s php tnh nhiu nht phi thc hin trong thut ton trn.
12. M t thut ton tm mt dy cc s lin tip nhau c tng dng trong mt dy s thc cho
trc.

a) M t thut ton ca bn bng cc cch khc nhau (m t, s khi, ngn ng ta


Pascal).
b) Xc nh s php tnh nhiu nht phi thc hin trong thut ton trn.

32

Nguyn Ch Trung Nguyn Th Thu Thy

Chng 2 CHIA TR
tng ca phng php chia tr (Divide & Conquer) l gii quyt bi ton thnh 3 bc
-

Chia: Chia bi ton thnh cc bi ton con c kch thc nh hn.

Tr: Gii cc bi ton con mt cch c lp.

Tng hp: Tng hp cc kt qu ca cc bi ton con thu c li gii ca bi ton


ban u.

1. S chung ca thut ton chia tr


1.1. Thut ton
Ta xt bi ton tng qut P vi kch thc d liu vo l n.
Gi s c thut ton gii bi ton P vi thi gian b chn bi c.n2.
Xt mt thut ton khc gii chnh bi ton P cho theo ba bc sau:
-

Chia: Chia bi ton thnh 3 bi ton con kch thc n/2

Tr: gii 3 bi ton con theo thut ton

Tng hp li gii cc bi ton con

Gi s thi gian chia v tng hp cc bi ton con l tuyn tnh, tc l c phc tp a thc
O(n) hay d.n.
Khi :
T = cn2

= (3/4)cn2 + (1/4)cn2

T = 3T + dn = 3c(n/2)2 + dn = (3/4)cn2 + dn

T(n) = O(n2)
T(n) = O(n2)

(Tc l T bng tng ca thi gian tr (3/4)cn2 + thi gian tng hp dn).
T , nu dn < (1/4)cn2 d < cn2/4 n > 4d/c th thut ton nhanh hn thut ton . iu
ny lun ng vi n ln. Tuy nhin ta thy thut ton mi ch thay i c nhn t hng
s cha thay i c bc nhng cng hiu qu khi n ln. Ni cch khc, phc tp thut ton
khng thay i, nhng thi gian thc hin thut ton c ci thin.
Th tc Beta di y th hin thut ton
procedure

Beta(n)

(* n l kch thc bi ton *)

begin
i. Chia bi ton thnh ba bi ton con kch thc n/2;
ii. Gii mi bi ton con bng thut ton ;
iii. Tng hp li gii ca cc bi ton con;

33

Phn tch thit k thut ton v nh gi phc tp gii thut


end;

Vic chia tr r rng c xu hng lm gim thi gian tnh ton. V th cc bi ton con nn
tip tc c chia nh nh th khi cn c li, tc l khi cn tha mn iu kin n > 4dc. Ni
cch khc, cc bi ton con s tip tc c chia nh cho n khi vic chia khng lm gim
thi gian tnh (tc l khi n 4dc) th dng li. iu ny c th hin trong thut ton di
y.

1.2. Thut ton


Th tc Gamma di y th hin thut ton
procedure

Gamma(n)

(* n l kch thc bi ton; t n0 = 4d/c *)

begin
if n n0 then {vic chia khng cn li na th gii trc tip}
Gii bi ton mt cch trc tip, bng thut ton
else begin
i. Chia bi ton thnh ba bi ton con kch thc n/2;
ii. Gii mi bi ton con bng thut ton ;
iii. Tng hp li gii ca cc bi ton con;
end;
end;

Nhn xt:
- Nu bi ton P gii bi thut ton th khng c chia tr.
- Nu bi ton P gii bng thut ton th c vic chia tr c thc hin mt ln, trong
c 3 bi ton con c chia, v c gii bng thut ton .
- Nu bi ton P c gii bng thut ton (thay v thut ton ) th qu trnh chia tr c
thc hin nhiu ln nu thi gian tnh vn tt hn, mi bi ton con s dng chnh thut ton
ca bi ton m, tc l thc hin bi mt li gii qui.
Ta c phng trnh qui sau:

4d

2
cn
if
n

c
T ( n) =
4d
n
3T ( ) + dn if n >
2
c

34

Nguyn Ch Trung Nguyn Th Thu Thy


Phng trnh qui c dng T(n) = a.T(n/b) + c.nk tha mn iu kin ca nh l th vi a =
3, b = 2, c = d v k = 1. Mt khc, v 3 = a > bk = 2 nn nh l th ri vo trng hp th nht,
do

T (n) = (nlog b a )

T (n) = (n log 2 3 ) (n1.589... ) .

Thut ton thu c c thi gian tnh l tt hn c thut ton v thut ton . Hiu qu thu
c trong thut ton c c l nh ta khai thc trit hiu qu ca vic s dng thut
ton .

1.3. Thut ton tng qut


c c mt m t chi tit thut ton chia tr chng ta cn phi xc nh 4 tham s:
1. n0: gi tr neo, l im kt thc qu trnh chia bi ton con
2. k: kch thc ca mi bi ton con trong cch chia.
3. r: s lng cc bi ton con c chia ti mi ln thc hin.
4. Thut ton tng hp li gii ca cc bi ton con.
Chia nh th no (xc nh r v k) l cn c vo mc ch thi gian thc hin thut ton tng
hp l nh (thng l tuyn tnh).
Ta c th tc DivideAndConquer th hin thut ton tng qut nh sau:
procedure

DivideAndConquer(n) (* n l kch thc bi ton; t n0 = 4d/c *)

begin
if n <= n0 then
Gii bi ton mt cch trc tip, bng thut ton
else begin
i. Chia bi ton thnh r bi ton con kch thc n/k;
ii. for (r bi ton con) do DivideAndConquer(n/k);
iii. Tng hp li gii ca cc bi ton con;
end;
end;

2. Mt s v d minh ha Chia tr
2.1. Thut ton sp xp trn (Merge Sort)
Bi ton 2.1 Cho dy (a) gm n phn t a1, a2, ..., an. Hy sp xp dy (a) theo th t khng
gim bng thut ton sp xp kiu trn.

Thut ton c vn dng gii bi ton nh sau


procedure MergeSort(a, n) ;

35

Phn tch thit k thut ton v nh gi phc tp gii thut


begin
if n = 1 then
return a;
else
begin
(* Chia *)

a1 := a[1..n/2]; a2 := a[(n/2 + 1) .. n];

(* Tr *)

MergeSort(a1, n/2); MergeSort(a2, n/2);

(* Tng hp*) Merge(a1, a2, a);


end;
end;

Thut ton Tng hp c th hin qua th tc Merge (trn) sau y:


procedure Merge(U[1..m+1], V[1..n+1], T[1..m+n]);
(*Trn 2 mng U[1..m+1] v V[1..n+1] thnh mng T[1..m+n]);
U[m+1],V[n+1] c dng cha cc gi tr cm canh*)
begin i:=1; j:=1; k := 0;
while ( i <= m or j <= n) do
begin

k := k + 1;
if U[i]<V[j] then
begin

T[k]:=U[i];
i:=i+1;

end else
begin
T[k]:=V[j];
j:=j+1;
end;
end;
if n < m then <Ni on cn li ca mng V vo cui mng T>
else <Ni on cn li ca mng U vo cui mng T>;
end;

Gii thut sp xp ny minh ho tt c cc kha cnh ca chia tr. Khi s lng cc phn t
cn sp l nh th ta thng s dng cc gii thut sp xp n gin. Khi s phn t ln th ta
chia mng ra hai phn, tip n tr tng phn mt v cui cng l kt hp cc li gii.

36

Nguyn Ch Trung Nguyn Th Thu Thy


Gi s T(n) l thi gian cn thit gii thut ny sp xp mt mng n phn t. Vic tch T
thnh U v V l tuyn tnh. Ta cng d thy merge(U,V,T) cng tuyn tnh. D vit c phng
trnh qui:

c if n = 1

T ( n) =
n
2T ( 2 ) + dn if n > 1
Phng trnh qui c dng T(n) = a.T(n/b) + c.nk tha mn iu kin ca nh l th vi a = 2,
b = 2, c = d v k = 1. Mt khc, v 2 = a = bk = 2 nn nh l th ri vo trng hp th hai, do
T (n) = (n k . log2 n) T (n) = (n log 2 n) .
Khi xt thut ton sp xp kiu vun ng (HeapSort) ta thy hiu qu ca MergeSort tng t
HeapSort. Trong thc t sp xp trn c th nhanh hn vun ng mt t nhng n cn nhiu b
nh hn cho cc mng trung gian U v V. Ta nh li HeapSort c th sp xp ti ch (in-place),
v cm gic n ch s dng mt t bin ph. Theo l thuyt, MergeSort cng c th lm c
nh vy, tuy nhin chi ph v thi gian sp xp c tng mt cht.

2.2. Thut ton sp xp nhanh (QuickSort)


Bi ton 2.2 Cho dy (a) gm n phn t a1, a2, ..., an. Hy sp xp dy (a) theo th t khng
gim bng thut ton sp xp kiu QuickSort.

QuickSort c pht minh bi Hoare, da theo nguyn tc chia tr. Khng ging nh
MergeSort, QuickSort quan tm n vic gii cc bi ton con hn l s kt hp gia cc li gii
ca chng.
tng ca thut ton QuickSort nh sau: Nu on cn sp xp ch c mt phn t th on
c sp xp, ngc li ta chn mt phn t x trong on lm phn t cht, mi phn t
nh hn cht c xp vo v tr ng trc cht, mi phn t ln hn cht c xp vo v tr
ng sau cht. Sau php ton chuyn nh vy th on c chia thnh hai on con m on
trc gm cc phn t nh hn cht, on sau gm cc phn t ln hn cht. Tip tc p dng
thut ton lm (nh i vi on u tin) cho hai on con, v c tip tc mt cch qui
nh th ta s thu c ton on c sp.
tng c th nh sau: Gi s cn sp xp on c ch s t L (Left) n R (Right):
- Chn x lm phn t ngu nhin trong on L ..R, c th chn x l phn t gia on, tc l
phn t x = a[(L+R) div 2]
- Cho i chy t L sang phi; j chy t R sang tri, nu gp mt cp phi t sai th t, tc i j m
a[i] > x v a[j] < x th tin hnh i ch hai phn t . Qu trnh ny cn tip tc khi i > j th
dng.
- Tip tc lm nh th i vi 2 on t L n j v t i n R.
Thut ton vn dng cho thut ton QuickSort c din t trong th tc QuickSort sau y i
vi mng a t v tr L n R:

37

Phn tch thit k thut ton v nh gi phc tp gii thut


procedure Quicksort(L, R); (* Sp xp theo th t khng gim *)
begin
i := L; j := R;
x := a[(L + R) div 2];
while i <= j do
begin
while (a[i] < x) and (i < R) do i := i + 1;
while (a[j] > x) and (j > L) do j := j -1;
if i <= j then
begin
tmp := a[i]; a[i] := a[j]; a[j] := tmp;
i := i + 1; j := j - 1;
end;
end;
if L < j then QuickSort(L, j);
if i < R then QuickSort(i, R);
end;

Vic chn phn t cht phn on s quyt nh hiu qu ca thut ton. Trong trng hp
xu nht (on c chia thnh mt on con 1 phn t v on con kia c n-1 phn t) th
phc tp thut ton c O(n2).
Gi T(n) l thi gian trung bnh dng Quicksort sp mng n phn t a[1..n]. Trng hp ring
nh thut ton trn, thi gian xc nh phn t cht v tr m = (L+R) div 2 bng hng s c;
trng hp tng qut, phn t cht v tr m nm trong on t 1 n n, c xc sut l 1/n, v
thi gian tm m c th xc nh bi mt hm tuyn tnh g(n). Gi s thi gian dng qui
sp xp hai mng con kch thc (m - 1) v (n - m) tng ng l T(m-1) v T(n-l). Nh vy vi
n ln ta c:
T ( n) =

1 n
1 n
2 nm
(
g
(
n
)
+
T
(
m

1
)
+
T
(
n

m
))
=
g
(
n
)
+

T (k )
n m =1
n m =1
n k =0

Nu chn n0 l gi tr ln s dng cng thc trn. Ngha l nu n n0 th ta dng thut


ton sp xp khc, v d thut ton sp xp chn trc tip. Vi n > n0 ta gi d l hng s sao cho
g(n) dn. Khi ta c nh gi
T (n) dn +

2 nm
T (k ) vi n > n0.
n k =0

38

Nguyn Ch Trung Nguyn Th Thu Thy


Cng thc nh trn kh phn tch phc tp, v th ta tha nhn kt qu sau: Thi gian trung
bnh thc hin thut ton QuickSort l T(n) = O(nlog2n).

2.3. Nhn s nguyn ln


Bi ton 2.3. Cho hai s nguyn ln (c n ch s, n ln) X v Y. Hy xy dng thut ton
chia tr tm kt qu ca php nhn Z = X * Y.

Gi s X = x1x2...xn v Y = y1y2yn
Nu thc hin thut ton m phng php nhn X*Y nh vic thc hin php nhn bng tay
thng thng th phc tp tnh ton d tm c l O(n2).
Ta s tm cch xy dng thut ton chia tr cho vic thc hin php nhn X*Y c c
phc tp tnh ton nh hn.
Chia i mi s ta c:
X1 = x1x2xn/2 v X2 = xn/2xn
Y1 = y1y2yn/2 v Y2 = yn/2yn.
Ta c X = X110n/2 + X2 v Y = Y110n/2 + Y2. Do
Z = X*Y = (X110n/2 + X2)*(Y110n/2 + Y2) = = X1Y110n + (X1Y2 + X2Y1)10n/2 + X2Y2

(1)

Th tc Nhn sau y th hin thut ton chia ch


procedure Nhan(X, Y, n) ;
begin
if n = 1 then return X*Y
else
begin
X1 := X[1..n/2]; X2 := X[n/2..n];
Y1 := Y[1..n/2]; Y2 := Y[n/2..n];
M := Nhan(X1, Y1, n/2);
N := Nhan(X1, Y2, n/2);
P := Nhan(X2, Y1, n/2);
Q := Nhan(X2, Y2, n/2);
return M*10n + (N + P)*10n/2 + Q;
end;
end;

Gi T(n) l thi gian thc hin thut ton Nhan(X, Y, n) thc hin php nhn hai s X v Y vi
s ch s n; Thi gian gii mi bi con (4 bi ton con) thc hin php nhn hai s X v Y vi

39

Phn tch thit k thut ton v nh gi phc tp gii thut


s ch s n/2 s l T(n/2); Thi gian tng hp kt qu l dn. Khi ta c phng trnh qui
tnh T(n) l:
c if n = 1

T ( n) =
4T (n / 2) + dn if n > 1
Phng trnh qui c dng T(n) = a.T(n/b) + c.nk tha mn iu kin ca nh l th vi a = 4,
b = 2, c = d v k = 1. Mt khc, v 4 = a > bk = 2 nn nh l th ri vo trng hp th nht, do
T (n) = (nlogb a ) T (n) = (nlog2 4 ) = (n 2 ) .
Nhn xt: Vic tnh Z trong cng thc (1) dn n cn gii 4 bi ton con tnh M, N, P, Q. Ta c
th thay 4 bi ton con ny bng 3 bi ton con sau y:
U := X1.Y1;
V := X2*Y2 v
W := (X1 + X2) * (Y1 + Y2)
v khi cng thc (1) c th vit li di dng :
Z = U.102 + (W-U-V).10n/2 + V
Khi phng trnh quy ca thut ton Chia thnh 3 bi ton Tr s l:
c if n = 1

T ( n) =
3T (n / 2) + dn if n > 1
Phng trnh qui c dng T(n) = a.T(n/b) + c.nk tha mn iu kin ca nh l th vi a = 3,
b = 2, c = d v k = 1. Mt khc, v 3 = a > bk = 2 nn nh l th vn ri vo trng hp th nht,
v T (n) = (nlogb a ) T (n) = (nlog 2 3 ) < (n 2 ) .

2.4. Mng con trng s ln nht


Bi ton 2.4. Cho mng (a) gm n s a[1..n]. Ta gi mt mng con ca mng a l mt on
a[p..q] (1 p q n). Hy tm mng con c trng s ln nht, tc l c tng gi tr ca cc phn
t ln nht.
Cch th nht: Phng php lit k ton b (duyt ton b)
procedure maxsub(n, var p, q);
begin
max := -;
for i := 1 to n do
for j := i to n do
begin (*xet mng con a[i..j]*)
s := 0;

40

Nguyn Ch Trung Nguyn Th Thu Thy


for k := i to j do
s := s + a[k]; (* cu lnh c trng 2*)
if max < s then
begin
max := s; p := i; q := j:
end;
end;
end;

Theo qui tc max, ta c th nh gi phc tp ca thut ton trn bng cch ch da vo cu


lnh c trng (l cu lnh c s ln thc hin nhiu nht):
n

T (n) = 1 T(n) = O(n3).


i =1 j = i k = i

Cch th hai: Ci tin vic lit k ton b (ci tin duyt ton b)
procedure maxsub(n, var p, q);
begin
max := -;
for i := 1 to n do
begin
s := 0;
for j := i to n do
begin (*xet mng con a[i..j]*)
s := s + a[j]; (*cu lnh c trng*)
if max < s then
begin
max := s; p := i; q := j:
end;
end;
end;
end;

Theo qui tc max, phc tp ca k thut th hai vo cu lnh c trng c nh gi bi

Cu lnh c trng ca mt (on) thut ton l cu lnh c s ln thc hin nhiu nht.

41

Phn tch thit k thut ton v nh gi phc tp gii thut


n

T (n) = 1 T(n) = O(n2).


i =1 j =i

Cch th ba: Dng phng php chia tr

ngha ca cc cng vic Chia, Tr v Tng hp nh sau:


- Chia: Ta chia mng thnh 2 mng con c kch thc khc nhau t nht 1 n v, k hiu l aL
v aR. n gin, ta ch quan tm n n tnh trng s ln nht ca mng con.
- Tr: Tm cc mng con c trng s ln nht ca mi na mt cch qui aL v aR, gi s cc
trng s tm c l WL, WR
- Tng hp: trng s ln nht ca mng con trong mng cho l
+ Kt qu ban u cn tm l max (WL, WR)
+ Ta cn xt kh nng mng con c trng lng ln WM (Weight of Median Array) c
th l mng con nm ln cc im chia. tnh WM, ta ch cn tnh trng lng WML ca
mng con ln nht trong na aL kt thc im chia, v trng lng WMR ca mng con ln
nht trong na aR bt u ngay sau im chia. Tc l ta c
WM = WML + WMR.
+ Vy trng lng ln nht ca mng con tm c l max(WL, WR, WM)
Ci t thut ton
function

MaxSubArray(a,i,j);

begin
if ( i = j) return a[i]
else
begin
M

:= (i+j)/2;

WL := MaxSubArray(a,i,m);
WR := MaxSubArray(a,m+1,j);
WM := MaxLeftArray(a,i,M) + MaxRightArray(a,M+1,j);
Return Max(WL, WR, WM );
end
end;

Cc hm MaxLeftArray, Max RightArray c ci t nh sau :


function

MaxLeftArray(a,i,j);

begin

42

Nguyn Ch Trung Nguyn Th Thu Thy


MaxSum := - ; Sum := 0;
for k := j downto i do
begin
Sum := Sum + a[k];
MaxSum := Max(Sum,MaxSum)
end;
return MaxSum;
end;

Tng t vi hm MaxLeftArray, d dng xy dng c hm MaxRightArray: Thay vng for


th tc trn bng vng for sau
for k := i to j do
begin
Sum := Sum + a[k];
MaxSum := MaxSum(Sum, MaxSum)
end;

Phn tch phc tp

Thi gian chy th tc MaxLeftArray v MaxRightArray l O(m) vi m = j-i+1


Gi T(n) l thi gian tnh, gi thit n = 22. Ta c :
- n = 1 th T(n) = 1
- n > 1 th vic tnh WM i hi thi gian n/2 + n/2 = n T(n) = 2T(n/2) + n
Phng trnh qui c dng T(n) = a.T(n/b) + c.nk tha mn iu kin ca nh l th vi a = 2,
b = 2, c = 1 v k = 1. Mt khc, v 2 = a = bk = 2 nn nh l th ri vo trng hp th hai, do
T (n) = (n k . log2 n) T (n) = (n log 2 n) . Vy r rng phng php chia tr c phc
tp thut ton nh hn cc phng php lit k.

BI TP CHNG 2
1. Cho mng s liu sau :

10, 4, -5, 7, -45, 14, 30, -2, 50


Hy minh ha cc bc ca thut ton tm mng con ln nht.
2. Cho dy s liu

80, 12, 47, 16, 7, 56, 14, 19, 100


Hy minh ha cc bc ca thut ton MergeSort, QuickSort sp xp dy kha trn theo th
t tng dn.
43

Phn tch thit k thut ton v nh gi phc tp gii thut


3. Thit k thut ton nhn 2 s nguyn dng, s dng thut ton chia tr, trong mi s
nguyn dng c chia lm ba phn, v tch ca hai s s tm c sau 5 php nhn s ny
vi xp x n/3. Phn tch phc tp tnh ton trong thut ton thu c.

44

Nguyn Ch Trung Nguyn Th Thu Thy

Chng 3. QUY HOCH NG


1. Gii thiu phng php qui hoch ng
Quy hoch ng c nhng nt ging nh phng php Chia tr, n i hi vic chia bi
ton thnh nhng bi ton con kch thc nh hn. Phng php chia tr chia bi ton cn
gii ra thnh cc bi ton con c lp, sau cc bi ton con ny c gii mt cch quy, v
cui cng tng hp cc li gii ca cc bi ton con ta thu c li gii ca bi ton t ra.
Trong tnh hung cc bi ton con l khng c lp vi nhau, ngha l cc bi ton con cng c
chung cc bi ton con nh hn th phng php chia tr s t ra khng hiu qu, v n phi
lp i lp li vic gii cc bi ton con chung . Quy hoch ng s gii mt bi ton con mt
ln v li gii ca cc bi ton con s c ghi nhn, gi li s dng cho vic gii cc bi
ton con c ln hn.
Quy hoch ng thng c p dng gii cc bi ton ti u. Trong cc bi ton ti u, ta c
mt tp cc li gii, m mi li gii nh vy c gn vi mt gi tr s. Ta cn tm li gii vi
gi tr s ti u (nh nht hoc ln nht). Li gii nh vy ta s gi l li gii ti u.

2. Phng php chung ca qui hoch ng


Trc khi c c cc bc c th xy dng thut ton qui hoch ng, ta c th tin hnh
cc phn tch sau y:
Phn r: Tm cch chia bi ton cn gii thnh nhng bi ton con nh hn c cng dng vi
bi ton ban u thnh cc bi ton c kch thc nh hn, sao cho bi ton con kch thc
nh nht c th gii mt cch trc tip. Bn thn bi ton xut pht c th coi l bi ton con
c kch thc ln nht trong h cc bi ton con ny.
Ghi nhn li gii: Chn cch lu tr li gii ca cc bi ton con vo mt bng c th dng
li li gii ca chng cho cc bi ton con c ln hn.
Tng hp li gii: Tm cch truy vt, ngha l ln lt i t li gii ca cc bi ton con kch
thc nh hn, tm cch xy dng li gii ca bi ton kch thc ln hn, cho n khi thu
c li gii ca bi ton xut pht (l bi ton con c kch thc ln nht). K thut gii cc
bi ton con ca quy hoch ng l qu trnh i t di ln (bottom up) l im khc quan
trng vi phng php chia tr, trong cc bi ton con c tr mt cch quy (top
down).
Yu cu quan trng nht trong vic thit k thut ton nh quy hoch ng l thc hin khu
phn r, tc l xc nh c cu trc ca bi ton con. Vic phn r cn c tin hnh sao cho
khng nhng bi ton con kch thc nh nht c th gii c mt cch trc tip m cn c th
d dng vic thc hin tng hp li gii.

45

Phn tch thit k thut ton v nh gi phc tp gii thut


Khng phi lc no vic p dng phng php quy hoch ng i vi bi ton ti u ho cng
dn n thut ton hiu qu. C hai tnh cht quan trng m mt bi ton ti u cn phi tho
mn c th p dng quy hoch ng gii n l:
Cu trc con ti u: Tnh cht ny cn c gi l tiu chun ti u v c th pht biu
nh sau: gii c bi ton t ra mt cch ti u, mi bi ton con cng phi c gii mt
cch ti u. Mc d s kin ny c v l hin nhin, nhng n thng khng c tho mn do
cc bi ton con l giao nhau. iu dn n l mt li gii c th l km ti u hn trong
mt bi ton con ny nhng li c th l li gii tt trong mt bi ton con khc.
S lng cc bi ton con phi khng qu ln. Rt nhiu cc bi ton NP kh c th gii
c nh quy hoch ng, nhng vic lm ny l khng hiu qu do s lng cc bi ton con
tng theo hm m. Mt i hi quan trng i vi quy hoch ng l tng s cc bi ton con
cn gii l khng qu ln, cng lm phi b chn bi mt a thc ca kch thc d liu vo.
Sau bc phn r, c th hnh thc ha chi tit hn cc bc gii bi ton qui hoch ng nh
sau:
Bc 1: t gi thit v hm qui hoch ng. Hm qui hoch ng l hm hnh thc ha cho
bi ton con tng qut cn nh lng, th hin trc tip hoc gin tip yu cu ca cho bi ton
cho. Mc ch ca bc ny l nu c ngh ca hm qui hoch ng m cha cn phi
tm dng biu din c th ca n nh th no.
Bc 2: Tm nghim cc bi ton con nh nht. bc ny ta tnh hm qui hoch ng ti
cc trng hp n gin nht hoc cc trng hp c bit m d dng tnh ton c.
Bc 3: Xy dng cng thc qui hoch ng, tm nghim cho bi ton con tng qut. y
l bc quan trng nht ca qui hoch ng, thu c nh qu trnh phn r. Ti y ta cn nh
ngha c th hm qui hoch ng, tc l tm dng biu din ca n. Ni cch khc, ta cn xy
dng c cng thc truy hi tm nghim ca bi ton con tng qut da vo tp nghim ca
cc bi ton con c nh hn gii, cng thc ny gi l cng thc qui hoch ng.

Khi nh ngha c cng thc qui hoch ng th tc l ta gii xong mt h cc bi ton


con, trong c bi ton cn gii vi kch thc ln nht.
Ch : bc 2 v bc 3, tp hp nghim ca cc bi ton con phi c lu trong mt
bng. Bng ny thng l biu din trc tip hm qui hoch ng.
Bc 4. Tm nghim cho bi ton. Bc ny chnh ta cng vic Tng hp li gii, tc l da
vo bng lu nghim t cc bi ton con, tm nghim ca bi ton ban u.

3. Mt s v d minh ha
3.1. Dy con tng dn di nht
Bi ton 3.1: Cho dy (a) gm n phn t a1, a2, ..., an. Hy tm dy con khng gim c di
ln nht (nhiu phn t nht).

46

Nguyn Ch Trung Nguyn Th Thu Thy


a) Gii bi ton bng qui hoch ng

Bc 1: Nu gi thit hm qui hoch ng. Gi gi tr hm f(i) l di dy con tng dn ln


nht tnh t a1 n ai (ly c ai), vi i = 1, 2, ... n.
Hm ny biu din gi tr ca nghim cn tm. Nghim cn tm c th tm li c bc 4 nh
chnh hm ny khi n c ci t bi mt mng mt chiu.
Bc 2. Tm nghim cc bi ton con nh nht. D thy dy con tng dn di nht t a1 n a1
ch c mt phn t l chnh a1. Do ta c:
f(1) = 1;
Bc 3. Xy dng cng thc qui hoch ng. Ta cn phi tnh f(i) vi i 2. Ni cch khc khi
bit f(1), f(2), ... , f(i-1) th f(i) c tnh nh th no?
V d: ta th tm cch tnh f(2), f(3), ..., f(10) i vi dy (a) trong bng sau:
i

10

ai

f(i)

V f(i) chc chn ly c ai nn f(i) s l tng ca di 1 sn c cng vi mt lng p no . Ta


tnh lng p ny nh sau: Xt tt c cc phn t aj ng trc ai m nh hn hoc bng ai, vi
mi phn t aj ta nhn xung gi tr ca f(j) tng ng tnh (j = 1, 2, ..., i-1) v chn gi tr
f(j) ln nht, l lng p cn tm. Mt cch hnh thc, ta c cng thc qui hoch ng:
f(i) = 1 + max {f(j) : aj ai , j = i-1, i-2, ...., 1}

(1)

Vy di dy con tng dn ln nht t a1 n an ly c an l f(n); di dy con tng dn ln


nht cn tm chnh l
max {f(i); i = n, n-1, , 1}
R rng vic phn r bi ton cho thnh cc bi ton con lun m bo cu trc ti u (ngha
l tng bi ton con l ti u) v s lng cc bi ton con l hu hn. Ni cch khc, qu trnh
tnh dn gi tr ca hm f(i) t tri sang phi lun cho kt qu f(i) l di dy con ln nht a1
n ai ly c ai.
Hm f(i) c th biu din bi mng f[1..n]. Th tc tnh gi tr ca mng ny nh sau:
procedure DayconTangdan;
begin
f[1] := 1;
for i:= 2 to n do
begin max := 0;
for j:= i-1 downto 1 do

47

Phn tch thit k thut ton v nh gi phc tp gii thut


if a[j] <= a[i] then
if f[j] > max then m := f[j];
f[i] := 1 + max;
end;
end;

Bc 4. Tm nghim cho bi ton. Da vo mng lu gi tr nghim cc bi ton con l f[1..n] ta


c th tm nghim ca bi ton ban u nh sau:
Dy con di nht cn tm, in ra theo th t ngc c th thc hin nh sau:
1. Tm f[k] = max {f[i]; i = n, n-1, , 1}. t p = a[k];
2. Lp qu trnh sau khi p > 0
2.1. In ra a[k];
2.2. Tm f[k] st bn tri p m bng p - 1
2.3. Gn p := p - 1 trc khi quay v u vng lp
i

10

ai

f(i)

khng phi in ra nghim theo th t ngc, bc 2.1. ta tch ly dn cc thnh phn ca


nghim vo mt mng x. Sau khi tm xong cc thnh phn ca nghim, ta s in ra mng x theo
th t t cui mng v u mng. Th tc tm li nghim c th vit nh sau:
procedure TimNghiem;
begin

(* 1. Tm f[k] = max {f[i]; i = n, n-1, , 1}. t p = a[k]; *)


k := 1 ;
for i := 1 to n do
if f[i] > f[k] then k := i;
p := f[k];
r := 0;
while p > 0 do
begin

(* 2.1. tch ly a[k] vo nghim x*)


r := r + 1; x[r] := a[k];

48

Nguyn Ch Trung Nguyn Th Thu Thy


(* 2.2. tm f[k] st bn tri p m bng p - 1 *)
while f[k] <> p-1 do k := k - 1;

(* 2.3. Gn p := p - 1 trc khi quay v u vng lp *)


p := p - 1;
end;
writeln(Output: );
for i := r downto 1 do write(x[i]:5);
end;

b) K thut mng lu vt

d dng tm li nghim, ta thng s dng mng lu vt nh du ch s ca cc nghim


ti u trong qu trnh gii cc bi ton con c ln dn. y ta dng mt mng lu vt
pred[1..n] trong pred[i] = j ngha l ngay trc ai trong dy con ln nht ang xt t a1 n ai
l phn t aj. Ban u pred[1] := -1 v trong (1) nu tm c gi tr max > 0 th ta gn pred[i] :=
j, ngc li nu max = 0 tc l khng c phn t no ng trc ai m nh hn hoc bng ai th
ta cng gn pred[i] := -1;
i

10

ai

f(i)

pred[i]

-1

-1

Cc th tc QH v TmNghiem s c vit li nh sau;


procedure DayconTangdan2;
begin
f[1] := 1; pred[1]:=-1;
for i:= 2 to n do
begin max := 0; j0:=i;
for j:= i-1 downto 1 do
if a[j] <= a[i] then
if f[j] > max then
begin max := f[j];
j0 := j;
end;
f[i] := 1 + max;

49

Phn tch thit k thut ton v nh gi phc tp gii thut


if max > 0 then pred[i] := j0
else pred[i] := -1;
end;
end;
procedure TimNghiem2;
begin
k := 1; for i := 1 to n do if f[i] > f[k] then k := i;
r := 0;
while k > -1 do
begin
r := r + 1; x[r] := a[k];
k := pred[k];
end;
writeln(Output: );
for i := r downto 1 do write(x[i]:5);
end;

c) Ci tin hm qui hoch ng

thy rng di dy con tng dn ln nht tnh t a1 n ai v ly c ai nh tnh cha


chc ln hn di dy con tng dn ln nht t a1 n ai m khng ly ai. V d f(10) = 2
nu ly c a10 v f(10) = 5 nu khng ly a10 m ch ly n a8. iu ny l do bc 1 (do
nh hng n cc bc cn li) ta t ra gi thit hm qui hoch ng qu cng nhc, l ly c
ai. Kt qu l gi tr nghim ti u phi tnh li bng cch tnh max {f(i), i = 1, 2, ..., n}. Trong
nhng tnh hung kiu ny, thng th hm qui hoch ng c nh ngha tt hn nh sau.
Bc 1: Nu gi thit hm qui hoch ng: Gi f(i) l di dy con tng dn ln nht tnh t
a1 n ai (c th ly hoc khng ly ai), vi i = 1, 2, ... n. Vi gi thit ny th di dy con tng
dn ln nht cn tm s l f(n).
Bc 2. Tm nghim bi ton con nh nht. f(1) := 1;
Bc 3. Xy dng cng thc qui hoch ng.
Ta c nhn xt sau y:
1 + max{ f ( j ) : a[ j ] a[i ], j = i 1, i 2,...,1} if include a[i ]
f (i ) =
f (i 1) if not include a[i ]

(2)

Kt hp 2 kh nng trn, ta c th xy dng c cng thc qui hoch ng tnh f(i) l di


dy con ln nht tnh t a1 n ai vi i 2 nh sau:

50

Nguyn Ch Trung Nguyn Th Thu Thy


f (i ) = max{c(i ), f (i 1)}, i = 2,3,..., n (1)

(3)

Vi c(i) l di dy con tng dn ln nht tnh t a1 n ai v ly c ai. Vic tnh c(i) c xc


nh nh sau:
if i = 1
1,
c(i ) =
1 + max{ f ( j ) : a[ j ] a[i ],

j = i 1, i 2,...,1}, if

i >1

(4)

Mng lu vt pred[1..n] c tnh tng t nh trn, tuy nhin pred[i] := j vi j ly theo max ca
c(j) hay ly theo max ca d(j) l ty theo ci no ln hn, v nu hai gi tr ny bng nhau th u
tin ly theo c(j)

3.2. Tr li bi ton mng con trng s ln nht


Bi ton 3.2. Trong chng 2 ta trnh by thut ton chia tr gii bi ton tm dy con
(mng con) c trng s nht vi thi gian tnh c O(nlog2n). By gi ta xt cch tip cn bng
quy hoch ng gii bi ton ny.
a) Cc bc qui hoch ng

Bc 1: Nu gi thit hm qui hoch ng.


Gi s(i) l tng ca dy con ln nht trong dy:
a1, a2, ., ai, i = 1,2,, n.
R rng s(n) l gi tr cn tm.
Bc 2: Gii cc bi ton n gin Hin nhin ta c s(1) = a1.
Bc 3: Xy dng cng thc qui hoch ng
Gi s i > 1 v s(k) bit vi k = 1,2,, i - 1. Ta cn tnh s(i) l tng ca dy con ln nht ca
dy con ln nht ca dy a1, a2, , ai-1, ai.
R rng dy con ln nht ca dy ny hoc l c cha phn t ai hoc l khng cha phn t ai,
v th ch c th l mt trong hai dy sau y:

Dy con ln nht ca dy a1, a2, , ai-1.

Dy con ln nht ca dy a1, a2, , ai kt thc ti ai.

T suy ra

51

Phn tch thit k thut ton v nh gi phc tp gii thut


s(i) = max {s(i-1), e(i)},
Trong e(i) l tng ca dy con ln nht ca dy a1, a2, , ai kt thc ti ai.
Lu rng tnh e(i), i = 1, 2, , n, ta cng c th s dng cng thc quy sau:
e(1) = a1;
e(i) = max {ai, e(i-1) + ai }, i > 1.
b) M phng Pascal

Ta c thut ton sau gii bi ton t ra:


procedure Maxsub(a);
begin
e := a[1];

(* e l tng ca dy con ln nht *)

s[1] := a[1];

(* s l mng qui hoch ng*)

imax : = 1;

(* imax l v tr kt thc ca dy con ln nht *)

for i: = 2 to n do
begin
u := e + a[i];
v := a[i];
if (u > v) then e := u else e := v;
if (e > s[i-1]) then
begin
s[i] = e;
imax: = i;
end
else s[i] := s[i-1]
end;
end;

D thy thut ton Maxsub c thi gian tnh l O(n).

3.3. Xu con chung di nht


Bi ton 3.3. Ta gi xu con ca mt xu cho trc l xu thu c bng vic loi b mt s k
t ca xu cho. Mt cch hnh thc, gi s cho xu X = x1 x2 xm, th xu Z = z1z2zk c
gi l xu con X nu tm c dy cc ch s 1 i1 < i2 < < ik n sao cho z j = xi j , j = 1, 2, ,

k. Chng hn dy Z = BCDB l xu con xu X = AABCBCDABDAB vi dy ch s l <3, 4,


7, 9>.

52

Nguyn Ch Trung Nguyn Th Thu Thy


Cho hai xu X v Y ta ni xu Z l xu con chung ca X v Y nu Z l xu con ca c hai xu X
v Y. V d, nu X = ABCDEFG v Y = CCEDEGF th Z = CDF l mt xu con chung ca
hai xu X v Y, cn xu BFG khng l xu con chung ca chng. Xu CDF khng l xu con
chung di nht v n c di 3 (s phn t trong xu), trong khi xu CDEG l xu con
chung ca X v Y c di 4, ng thi l xu con chung di nht v khng tm c xu
con chung c di 5.
Bi ton t ra nh sau: Cho xu X = x1x2xm v Y = y1y2yn. Cn tm xu con chung di
nht ca X v Y.
a) Phng php duyt ton b

Thut ton trc tip gii l duyt tt c cc xu con ca X v kim tra xem mi xu nh vy
c l xu con ca Y, v gi li xu con di nht. Mi xu con ca X tng ng vi dy ch s
<i1,i2, , ik> l tp con k phn t ca tp ch s {1, 2, , m}, v th c tt c 2m xu con ca X.
Nh vy thut ton trc tip i hi thi gian hm m v khng th ng dng c trn thc t.
Ta s p dng quy hoch ng xy dng thut ton gii bi ton ny.
b) Phng php quy hoch ng

Bc 1. Nu gi nh v hm qui hoch ng
Gi C(i, j) l di ca xu con chung di nht ca hai xu:
Xi = x1x2xi v Yj = y1y2yj
vi mi 0 i m v 0 j n
Nh vy ta phn bi ton cn gii ra thnh (m + 1)(n + 1) bi ton con. Bn thn bi ton xut
pht l bi ton con c kch thc ln nht c(m, n).
Bc 2: Tm nghim ca cc bi ton con n gin
thun li, ta ng nht hm c(i,j) vi mng C[0..m, 0..n]. R rng nu mt trong hai xu
rng, khng c phn t chung th xu con chung cng l rng. V vy ta c
C[0, j] = 0 j, j = 0, 1,, n v
C[i, 0] = 0 i, i = 0, 1,, m.
Bc 3: Xy dng cng thc qui hoch ng
Gi s i > 0, j > 0 ta cn tnh C[i, j] l di ca xu con chung ln nht ca hai xu Xi v Yj.
C hai trng hp:
Nu xi = yj th xu con chung di nht ca Xi v Yj s thu c bng vic b sung xi (hoc yj)
vo xu con chung di nht ca hai xu Xi-1v Yj-1
Nu xi yj th xu con chung di nht ca Xi v Yj s l xu con di nht trong hai xu con
chung di nht ca (Xi-1 v Yj) v ca (Xi-1 v Yj).
T ta c cng thc qui hoch ng sau tnh C[i, j]:

53

Phn tch thit k thut ton v nh gi phc tp gii thut


0,
if i = 0 or j = 0

C[i, j ] = 1 + C[i 1, j 1]
if xi = y j
max{C[i, j 1], C[i 1, j ]} if i, j > 0 and x y
i
j

vi i = 0, 1,, m v j = 0, 1,, n.
Hoc ngn gn hn l vi i =0, 1,, m v j = 0, 1,, n th
C[i, j] = max {C[i, j-1], C[i-1, j], C[i-1, j - 1] + x}
vi x = 0 nu xi = yj v x = 1 nu xi yj
Bc 4. Vic tm li nghim
D dng ln vt da vo mng C ,bt u t v tr C[m, n].
1. Khi to i := m, j := n; z := ;
2. Lp trnh sau khi i > 0 v j > 0
2.1. Nu x[i] = y[j] th thm x[i] vo cui xu z v ng thi gim 1 n v cho c i v j
2.2. Ngc li, nu x[i] y[j] th
Nu C[i, j] = C[i-1, j] th li v hng trn bng lnh gim i := i - 1
Ngc li, nu C[i, j] = C[i, j - 1] li v ct tri bng lnh gim j := j - 1
c) M phng Pascal

Thut ton qui hoch ng tm di xu con chung di nht c th m t nh sau.


procedure XauConChungMax(x,y : string; var z : string);
begin
for i :=1 to m do c[i,0]:=0;
forj: =1 to n do c[0,j]:=0;
z := ;
for i: =1 to m do
for j: = 1 to n do
if x[i] = y[j] then
begin
c[i,j]:=c[i-1,j-1]+1;
z := z + x[i];
end
else
if c [i-1,j] < c[i,j-1] then c[i,j]:=c[i-1,j]

54

Nguyn Ch Trung Nguyn Th Thu Thy


else c[i,j]:=c[i,j-1];
end;

Trong th tc m t trn ta s dng bin b[i, j] ghi nhn tnh hung ti u khi tnh gi tr
c[i, j]. S dng bin ny ta c th a ra dy con chung di nht ca hai dy X v Y nh th tc
sau y:
D dng nh gi c thi gian tnh ca thut ton LCS l O(mn).

3.4. Bi ton ci ti
Bi ton 3.4. Cho n vt (n 100), vt th i c trng lng l wi (wi 100) v c gi tr s
dng l ci (ci 100). Cn xp vt vo mt ci ti sao cho tng gi tr s dng c xp vo
ti l ln nht. Bit rng ci ti ch c th mang c trng lng khng vt qu b (b 100).
a) Phng php qui hoch ng

Bc 1. Nu gi nh v hm qui hoch ng
Gi f(i, j) l gi tr s dng ln nht ca ca cc vt c xp vo ti khi chn cc vt
{1, 2, , i} v trng lng gii hn ca ti l j. Khi gi tr nghim tt nht ca bi ton l
f(n, m).
Bc 2: Tm nghim ca cc bi ton con n gin
D thy f(0, j) = 0 vi mi j = 1, 2, , b
Bc 3: Xy dng cng thc qui hoch ng
Vi gii hn trng lng j, vic chn ti u trong cc vt {1, 2, , i - 1, i} c gi tr ln
nht c hai kh nng:

Nu khng chn vt th i th f(i, j) l gi tr s dng ln nht c th bng cch chn


trong cc vt {1, 2, , i - 1} vi trng lng j, tc l
f(i, j) = f (i-1, j)

Nu c chn vt i (vi wi j) th f(i, j) bng gi tr s dng ca vt th i cng vi


gi tr s dng ln nht c th c bng cch chn trong s cc gi {1, 2, , i - 1} vi
gii hn trng lng l j - wi. Ni cch khc ta c cng thc:
f(i, j) = ci + f(i-1, j - wi)

Kt hp hai kh nng trn ta c cng thc qui hoch ng:


f(i, j) = max { f(i-1, j) , ci + f(i-1, j - wi)}
vi i = 1, 2, , n v j = 0, 1, 2, .., M.
Bc 4. Tm li nghim
Ta ng nht hm f(i,j) vi bng F[1..n, 1..b] (cn gi l bng qui hoch ng). Sau khi tnh
xong mng F, vic truy vt trn F tm nghim nh sau:

55

Phn tch thit k thut ton v nh gi phc tp gii thut


Ch rng F[n, b] l gi tr s dng ln nht ca cc vt c xp vo ti khi xem xt tt c n
vt v gii hn trng lng ca ti l b.
Nu F[n , b] = F[n - 1, b] th tc l khng chn vt th n, ta truy tip F[n - 1, b]. Cn nu
F[n, b] F[n-1, b] th chng t vt th n c chn, ta ghi nhn thnh phn vo nghim
v truy tip F[n-1, b-wn]. C tip tc qu trnh cho n khi truy ln ti hng th 0 ca bng F.
b) M phng Pascal
procedure Caitui;
begin
for j := 0 to b do F[0, j] := 0;
for i := 1 to n do
for j := 1 to b do
begin
F[i, j] := F[i-1, j];
if (j > wi) and (F[i, j] < F[i-1, j-wi] + ci then
F[i, j] := F[i, j] < F[i-1, j-wi] ;
end;
end;
procedure Trace;
begin
write(Max value: , F[n, b]);
while n 0 do
begin
if F[n, b] F[n-1, b] then
begin
write(Chon do vat , n, w = , wn, value = , vn);
b := b - wn;
end;
n := n - 1;
end;
end;

56

Nguyn Ch Trung Nguyn Th Thu Thy

3.5. Nhn ma trn


Bi ton 3.5. Cn tnh tch ca n ma trn M1M2...Mn, (n 100) vi s lng t nht cc php
nhn. Bit rng ma trn Mi c kch thc di-1, di (i =1, 2, .., n).

Nh bit, tnh ca ma trn A = (aik) kch thc p q vi ma trn B = (bkj) kch thc q r l
ma trn C = (cij) kch thc p r vi cc phn t c tnh theo cng thc:
q

cij = aik bkj , 1 i p, 1 j q.

(1)

k =1

Chng ta c th s dng on chng trnh sau y tnh tch ca hai ma trn A,B:
for i : =1 to p do
for j : =1 to r do
begin
c [i,j] = 0;
for k : = 1 to q do c[i,j] :=c[i,j] +a[i,k] *b[k,j];
end;

R rng , on chng trnh trn i hi thc hin tt c p.q.r php nhn tnh tch ca hai ma
trn.
a) Phn tch bi ton

Gi s ta phi tnh tch ca nhiu hn l hai ma trn. Ch rng do tch ma trn khng c tnh
cht giao hon, nn ta khng c thay i th t ca cc ma trn trong biu thc cho. Do
php nhn ma trn c tnh kt hp, ta c th tnh tch ca cc ma trn theo nhiu cch khc nhau.
V d 3.1. Nhn nhiu ma trn

Gi s cn tnh tch M = ABCD ca bn ma trn, trong A c kch thc 13 x 5, B c kch


thc 5 x 89, C c kch thc 89 x 3 v D c kch thc 3 x 34. S dng cch tnh
M = ((AB)C)D),
Ta phi thc hin ln lt tnh
AB

5785 php nhn

(AB)C

3271 php nhn

((AB)C)D 1326 php nhn


V tng cng l 10582 php nhn
Tt c c 5 phng php khc nhau tnh tch ABCD:
1. ((AB)C)D

10582

2. (AB)(CD)

54201

57

Phn tch thit k thut ton v nh gi phc tp gii thut


3. (A(BC))D

2856

4. A((BC)D)

4055

5. A(B(CD))

26418

Phng php hiu qu nht (phng php 3) i hi khi lng php nhn t hn gn 19 ln so
vi phng php ti nht (phng php 5).
Mi cch tnh tch cc ma trn cho i hi mt thi gian tnh khc nhau. S lng php nhn
l mt yu s nh gi kh chnh xc hiu qu ca phng php. tm phng php hiu qu
nht, chng ta c th lit k tt c cc cch in du ngoc vo biu thc tch ma trn cho v
tnh s lng php nhn i hi theo mi cch.
Gi T(n) l s cch in cc du ngoc vo biu thc tch ca n ma trn. Gi s ta nh t cp
du ngoc )( phn tch u tin vo gia ma trn th i v ma trn th (i + 1) trong biu thc tch,
tc l:
M = (M1 M2 Mi)(Mi+1 Mi+2 Mn)
Khi c T(i) cch t du ngoc cho tha s th nht (M1 M2 Mi) v T(n-i) cch t du
ngoc cho tha s th hai (Mi+1 Mi+2 Mn) v t c T(i)T(n-i) cch tnh biu thc (M1 M2
Mi)(Mi+1 Mi+2 Mn). Do i c th nhn bt c gi tr no trong khong t 1 n n-1, suy ra ta
c cng thc truy hi sau tnh T(n):
n 1

T (n) = T (i )T (n i )

(2)

i =1

Kt hp vi iu kin u hin nhin T(1) = 1, ta c th tnh cc gi tr ca T(n) vi mi n. Gi


tr ca T(n) c gi l s Catalan. Cng thc sau y cho php tnh T(n) qua h s t hp vi n
2
1
(2n 2)!
T (n) = C2nn12 =
n
((n 1)!) 2

(3)

T T(n) = 4nn2. Nh vy, phng php duyt ton b khng th s dng tm cch tnh hiu
qu biu thc tnh ca n ma trn, khi n ln.
By gi, ta xt cch p dng quy hoch ng gii bi ton t ra.
b) Phn r (Xc nh cu trc con ti u)

Nu cch tnh ti u tch ca n ma trn i hi t du ngoc tch u tin gia ma trn th i v


th (i+1) ca biu thc tch, th khi c hai tch con (M1 M2 Mi) v (Mi+1 Mi+2 Mn) cng
phi c tnh mt cch ti u. Khi s php nhn cn phi thc hin nhn dy ma trn s
bng tng s php nhn cn thc hin nhn hai dy con (M1 M2 Mi) v (Mi+1 Mi+2 Mn)
cng vi s php nhn cn thc hin nhn hai ma trn kt qu tng ng vi hai dy con ny.
V vy xc nh cch thc hin nhn ti u ta cn gii quyt hai vn sau:
1) Cn t du ngoc phn tch u tin vo v tr no (xc nh i) ?

58

Nguyn Ch Trung Nguyn Th Thu Thy


2) Thc hin vic tnh ti u hai tch con (M1 M2 Mi) v (Mi+1 Mi+2 Mn) bng cch no?.
Tr li cu hi th nht: Xt tt c cc gi tr c th c ca i. Tr li cu hi th hai: vic tnh
mi tch con r rng c dng ging nh bi ton ban u, v th c th gii mt cch quy bng
cch p dng cch gii nh i vi dy xut pht. Nh vy, bi ton nhn dy ma trn tho mn
i hi v cu trc con ti u: tm cch tnh ti u vic nhn dy ma trn (M1 M2 Mn)
chng ta c th s dng cch tnh ti u ca hai tch con (M1 M2 Mi) v (Mi+1 Mi+2 Mn).
Ni cch khc, nhng bi ton con phi c gii mt cch ti u cng nh bi ton ban u.
Phn tch ny cho php ta s dng quy hoch ng gii bi ton t ra.
c) Cc bc qui hoch ng

Bc 1: t gii thit hm qui hoch ng: Gi gi tr hm f(i, j) l s php nhn t nht cn


thc hin tnh tch (Mi+1 Mi+2 Mj), vi 1 i j n
S lng php nhn t nht cn tm s l f(1,n). V tp tt c cc f(i,j) l tp cc li gii ca cc
bi ton con, hay ngn gn l h cc bi ton con.
Bc 2. Tm nghim bi ton con nh nht
Theo u bi, kch thc ca cc ma trn c cho bi mng d[0 n], trong ma trn Mi c
kch thc di-1 di, i = 1, 2, 3, n.
- Trng hp rt c bit, f(i,i) = 0, v tch ca mt ma trn c s lng php nhn l 0.
- S lng php nhn ca tch ca hai ma trn lin tip c bit qua nh ngha php nhn hai
ma trn, do f(i, i+1) = di-1didi+1
Bc 3. Xy dng cng thc qui hoch ng.
Hm f(i,j) vi 1 i j n c th biu din trong bng (mng hai chiu) lu cc gi nghim ca
cc bi ton con f[1..n, 1..n]. Ta c th xy dng bng gi tr f(i, j) ln lt theo tng ng
cho ca n, trong ng cho th s cha cc phn t f(i, j) vi ch s tho mn j i = s.
Ta c
- ng cho s = 0 s cha cc phn t f(i, i) = 0, vi i = 1, 2, n.
- ng cho s = 1 cha cc phn t f(i, i+1) = di-1didi+1 tng ng vi tch MiMi + 1, i = 1, 2, ,
n-1
- bc 3 ny ta phi tnh f(i, j) trn cc ng cho s > 1.
Ta thy ng cho th s cha cc phn t f(i, j + s) tng ng vi tch Mi Mi+1 Mi+s. Ta c
th la chn vic t du ngoc tch u tin sau mt trong s cc ma trn Mi,Mi+1, ,Mi+s-1.
Nu t du ngoc u tin sau Mk, vi i k < i+s, ta cn thc hin f(i, k) php nhn tnh
tha s th nht, f(k+1, i + s) php nhn tnh tha s th hai, v cui cng l di-1dkdi+s php
nhn tnh tch ca hai ma trn tha s thu c ma trn kt qu. tm cch tnh ti u, ta
cn chn cch t du ngoc tch i hi t php nhn nht. Mt cch hnh thc, ta c cng thc
qui hoch ng cn tm:

59

Phn tch thit k thut ton v nh gi phc tp gii thut


f(i, j + s) = min{f(i, k) + f(k+1, i + s) + di-1dkdi+s: 1 k < i+s}, i = 1, 2, , n s.
Lu rng, d theo di, ta vit c cng thc cho trng hp s = 1, m d thy l cng thc
cho trng hp tng qut vn ng cho s = 1.
V d 3.2. Tm cch tnh ti u cho tch ca bn ma trn cho trong v d 1.

i=1

j=1

5785 1530 2856

3
4

1335 1845

s=3

9078

s=2

s=1
s=0

Ta c d = (13, 5, 89, 3, 34).


Vi s = 1, f(1,2) = 5785, f(2,3) = 1335 v f(3,4) = 9078.
Vi s = 2 ta thu c
- f(1,3) = min {f(1,1) + f(2,3) + 13 x 5 x 3, f(1, 2) + f(3, 3) + 13 x 89 x 3}
= min{1530, 9256} = 1530
- f(2, 4) = min{f(2,2) + f(3, 4) + 5 x 89 x 34, f(2, 3) + f(4, 4) + 5 x 3 x 34}
= min{24208, 1845} = 1845
Vi s = 3 ta c
- f(1, 4) = min{f(1, 1) + f(2, 4) + 13 x 5 x 34), {k = 1}
f(1, 2) + f(3, 4) + 13 x 89 x 34,

{k = 2}

f(1, 3) + f(4, 4) + 13 x 3 x 34,

{k = 3}

= min{4055, 54201, 2856} = 2856.


Bc 4. Tm nghim cho bi ton. Da vo mng f[1..n, 1..n] lu gi tr nghim ca cc bi ton
con, ta c th tm nghim ca bi ton (cch t cc du ngoc).
Ta s dng k thut lu vt bng bng h[i, j] ghi nhn cch t du ngoc tch u tin cho gi
tr f(i, j). Cng vi vic tnh cc gi tr f(i, j) ta s tnh h[i, j] theo quy tc:
Vi s = 1: f(i, i +1), ta t h[i, i +1 ] := i + 1;
Vi 1 < s < n:
Biu thc f(i, j + s) = min{f(i, k) + f(k+1, i + s) + di-1dkdi+s: 1 k < i+s}, i = 1, 2, , n s t gi
tr min ti k = t, ta t h[i, j + s] = t;
V d 3.3. Cc gi tr ca mng lu vt h[i,j] theo v d 1

60

Nguyn Ch Trung Nguyn Th Thu Thy


j=1 2

i=1 1

s=3

s=2

s=1

3
4

s=0
Ta c s php nhn cn thc hin l f(1, 4) = 2856. Du ngoc u tin cn t sau v tr h[1, 4]
= 3, tc l M = (ABC)D. Ta tm cch t du ngoc u tin c f(1, 3) tng ng vi tch
ABC. Ta c h[1, 3] = 1, tc l tch ABC c tnh ti u theo cch: ABC = A(BC). T suy
ra, li gii ti u l: M = (A(BC))D.
d) nh gi phc tp gii thut

By gi, ta tnh s php ton cn thc hin theo thut ton va trnh by. Vi mi s > 0, c n s
phn t trn ng cho cn tnh, tnh mi phn t ta cn so snh s gi tr s tng ng vi
cc gi tr c th ca k. T suy ra s php ton cn thc hin theo thut ton l c
n 1

n 1

n 1

s =1

s =1

(n s ) s = n s s 2
s =1

= n (n 1) / 2 n(n 1)(2n 1) / 6
2

= ( n 3 n) / 6
= O ( n3 )

e) M phng Pascal ci t thut ton

Cc th tc qui hoch ng v tm li nghim c th m t trong hai th tc sau:


procedure NhanMatrand,n)
{f[i,j] - chi ph ti u thc hin nhn dy Mi . . . Mj;
h[i,j] - ghi nhn v tr t du ngoc u tin trong cch thc hin nhn dy Mi . . . Mj}
begin
for i: = 1 to n do m[i,j]: = 0; //khi to
for s: = 1 to n do

// s = ch s ca ng cho

for i: = 1 to n - s do
begin
j: = i + s - 1; m[i,j] = +;
for k: = i to j - 1 do
begin

61

Phn tch thit k thut ton v nh gi phc tp gii thut


q: = m[i,k] + m[k+1,j] + d[i-1]*d[k]*d[j];
if(q<m[i,j]) then
begin
m[i,j] = q; h[i,j] = k;
end;
end;
end;
end;

Th tc quy sau y s dng mng ghi nhn h a ra trnh t nhn ti u.


procedure Mult(i,j);
begin
if(i<j) then
begin
k = h[i,j];
X = Mult(i,k);

{ X = M[i] / . . . M[k] }

Y = Mult(k+1,j);

{ Y = M[k+1] . . . M[j] }

return X*Y;

{ Nhn ma trn X v Y }

end
else
return M[i];
end;

BI TP CHNG 3
1. Tm trnh t nhn ti u tnh tch ca dy ma trn A1x A2 x A3 x A4 x A5 trong kch
thc ca A1 l 10 x 4, A2 - 4 x 5, A3 - 5 x 20, A4 - 20 x 2, v A5 -2 x 50.
2.Xt Bi ton v cc on thng khng giao nhau c trng s.

u vo: Cho h cc on thng m: C = {(a1, b1), (a2,b2),,(an,bn)}. on thng (ai,bi) c


gn vi trng s ci , i = 1,2,n.
u ra: Tp cc on khng giao nhau c tng cc trng s l ln nht.
Thit k thut ton gii bi ton t ra. Phn tch thi gian tnh ca thut ton.
3. Pht trin thut ton a thc gii bi ton tm xu con chung di nht ca ba xu A,B,C;
Input: 3 xu A,B v C,

Output: Xu con chung di nht S ca 3 xu A,B v C.

62

Nguyn Ch Trung Nguyn Th Thu Thy


4. Pht trin thut ton a thc gii bi ton tm xu ngn nht ph hai xu A v B. Xu C c
gi l xu ph ca A nu A l xu con ca C.
5. C n cuc hp, cuc hp th i bt u vo thi im ai v kt thc thi im bi. Do ch c
mt phng hi tho nn 2 cuc hp bt k s c cng b tr phc v nu khong thi gian lm
vic ca chng ch giao nhau ti u mt. Hy b tr phng hp phc v c nhiu cuc hp
nht.
6.Cho n gi ko, gi th i c ai vin. Hy chia cc gi thnh 2 phn sao cho chnh lch gia 2
phn l t nht.
7. Mt xu gi l xu i xng (palindrom) nu xu c t tri sang phi hay t phi sang tri
u nh nhau. Cho mt xu S, hy tm s k t t nht cn thm vo S S tr thnh xu i
xng.
8. t nc Omega ngi ta ch tiu tin xu. C N loi tin xu, loi th i c mnh gi l ai
ng. Mt ngi khch du lch n Omega du lch vi s tin M ng. ng ta mun i s tin
ra tin xu Omega tin tiu dng. ng ta cng mun s ng tin i c l t nht (cho
ti tin nng khi i y i ). Bn hy gip ng ta tm cch i tin.

63

Phn tch thit k thut ton v nh gi phc tp gii thut

Chng 4. THUT TON THAM LAM


Ton b phng php ti u c th t c t vic chn ti u trong tng bc chn. V kha
cnh ny gii thut tham lam khc vi gii thut quy hoch ng ch: Trong qui hoch ng
chng ta thc hin chn cho tng bc, nhng vic la chn ny ph thuc vo cch gii quyt
cc bi ton con. Vi gii thut tham lam, ti mi bc chng ta chn bt c ci g l tt nht
vo thi im hin ti, v sau gii quyt cc vn pht sinh t vic chn ny. Vn chn
thc hin bi gii thut tham lam khng ph thuc vo vic la chn trong tng lai hay cch
gii quyt cc bi ton con. V vy khc vi quy hoch ng, gii quyt cc bi ton con theo
kiu bottom up (t di ln), gii thut tham lam thng s dng gii php top-down (t trn
xung). Chng ta phi chng minh rng vi gii thut tham lam, ton b bi ton c gii quyt
mt cch ti u nu mi bc vic chn c thc hin ti u. Cc bc chn tip theo c
thc hin tng t nh bc u tin, nhng vi bi ton nh hn. Phng php qui np c
ng dng trong gii thut tham lam c th c s dng cho tt c cc bc chn.

1. Gii thiu thut ton tham lam


1.1. c im ca thut ton tham lam
Mc ch ca phng php tham lam (Greedy) l xy dng bi ton gii nhiu lp bi ton khc
nhau, a ra quyt nh da ngay vo thut ton ang c, v trong tng lai s khng xem xt li
quyt nh trong qu kh. Do vy thut ton tham lam c u im:

D xut,

Thi gian tnh nhanh,

Thng khng cho kt qu ng.

Thut ton tham lam c nhng c im sau y:


-

Li gii ca bi ton l mt tp hu hn S cc phn t tho mn iu kin no , ta phi


gii quyt bi ton mt cch ti u. Ni cch khc, nghim S phi c xy dng sao cho
hm mc tiu f(S) c gi tr tt nht (ln nht hay nh nht) c th c.

C mt tp cc ng c vin C chn cho cc thnh phn ca nghim ti mi bc.

Xut pht t li gii rng S, ti mi bc ca thut ton, ta s la chn mt ng c vin


trong C b sung vo li gii S hin c.

Xy dng c hm Select(C) la chn mt ng c vin c trin vng nht a


vo li gii S.

Xy dng c hm Feasible(S x) kim tra tnh chp nhn c ca ng c vin x


khi a vo tp nghim S. (Feasible (adj): c th c, kh thi, xui tai)

Xy dng hm Solution(S) kim tra tnh chp nhn c ca li gii S

64

Nguyn Ch Trung Nguyn Th Thu Thy

1.2. S chung ca thut ton tham lam


procedure

Greedy;

begin
C := Tp cc ng c vin;
S := {S l li gii cn xy dng theo thut ton}
while (C ) and not Solution(S) do
begin
x Select(C);
C := C \ x;
if feasible(S x) then S := S x;
end;
if Solution(S) then Return S
end;

1.3. Chng minh thut ton ng


Cng vic ny khng phi n gin. Ta s nu mt lp lun c s dng chng minh tnh
ng n.
-

ch ra thut ton khng cho li gii ng ch cn a ra mt phn v d

- Vic chng minh thut ton ng kh hn, v da vo hai cch chng minh lp lun bin
i di y.
Lp lun bin i (Exchange Argument)

Gi s A l thut ton tham lam v I l mt b d liu vo. Ta gi A(I) l li gii tm c bi


thut ton A i vi b d liu I. Vn t ra l tm cch tr li cu hi: Thut ton A c ng
hay khng?
Ta gi O l li gii ti u ca bi ton i vi b d liu ny.
Ta cn tm cch xy dng php bin i bin i O thnh O sao cho:
. O cng tt khng km g O (Ngha l O vn ti u)
. O ging vi A(I) nhiu hn O.
Nu tn ti php bin i nh th th thut ton A cho li gii ng.
Tht vy, gi s xy dng c php bin i va nu. Ta s chng minh thut ton A l
ng n.
1) Chng minh bng phn chng: Gi s A khng ng n, hy tm b d liu I sao cho A(I)
khc vi li gii ti u ca bi ton. Gi O l li gii ti u ging vi A(I) nht (do gi s, A(I)

65

Phn tch thit k thut ton v nh gi phc tp gii thut


vn phi khc O). Dng php bin i xy dng c, theo cch xy dng , ta c th bin
i O O sao cho O vn ti u v O ging vi A(I) hn. iu ny mu thun gi thit O l li
gii ti u ging vi A(I) nht.
2) Chng minh trc tip: Gi O l li gii ti u. Ta bin i O O ging vi A(I) hn l O.
Nu O = A(I) th A(I) chnh l phng n ti u, ngc li ta bin i O O ging vi A(I)
hn. C th ta thu c dy O, O ,O .. ngy cng ging A(I) hn, v ch c mt s hu hn
iu kin so snh nn ch sau mt s hu hn ln, php bin i s kt thc ti A(I).

2. Mt s v d minh ha
2.1. Bi ton tp cc on thng khng giao nhau
Pht biu bi ton

Input: Cho h cc on thng m C = {(a1, b1), (a2, b2), ..., (an, bn)}
Output: Tp cc on thng khng giao nhau c lc lng ln nht.
ng dng thc t: Bi ton xp thi gian biu cho cc hi tho, bi ton phc v khch
hnh trn mt my, bi ton la chn hnh ng (V d c n cuc hp dng chung mt
phng hp. Cuc hp th i bt u ti thi im ai v kt thc ti thi im bi. Hy la
chn cc cuc hp sao cho c nhiu cuc hp c t chc nht. Bit rng ti mt thi
im phng hp ch c th din ra mt cuc hp).
Thut ton tham lam 1:
- tng: Bt u sm th chn trc.
- Sp xp cc on thng theo th t tng dn ca u mt tri. Bt u t tp S l tp
rng, ta ln lt b sung cc on thng theo th t sp vo S nu n khng c im
chung vi bt c on no trong S. V d:
Input
1

Output
S = {1, 3}

2
3
procedure

Greedy1;

begin
C Tp cc on thng c sp tng dn theo u mt tri;
S := ;
while C do
begin (ai, bi) on u tin trong C;

66

Nguyn Ch Trung Nguyn Th Thu Thy


C := C \ {(ai, bi)}
if <(ai, bi) khng giao vi bt c on no trong S> then
S := S {(ai, bi)}
end;
return S;
end;

phc tp ca thut ton l O(nlog2n).


Chng minh sai: Greedy1 khng cho li gii ti u i vi b d liu sau:
Input
1

Output

Trong khi li gii ti u l

S = {1}

S = {2, 3}

Thut ton tham lam 2:


- tng: on thng ngn nht th c la chn trc.

- Sp xp cc on thng theo th t khng gim ca di. Bt u t tp S l tp rng,


ta ln lt b sung cc on thng theo th t sp vo S nu n khng c im chung
vi bt c on no trong S.
procedure

Greedy2;

begin
C Tp cc on thng c sp tng dn theo di;
S := ;
while C do
begin (ai, bi) on u tin trong C;
C := C \ {(ai, bi)}
if <(ai, bi) khng giao vi bt c on no trong S> then
S := S {(ai, bi)}
end;
return S;
end;

Chng minh sai: Greedy2 khng cho li gii ti u i vi b d liu sau:

67

Phn tch thit k thut ton v nh gi phc tp gii thut


Input

Output

Trong khi li gii ti u l

S = {1}

S = {2, 3}

Thut ton tham lam 3:


- tng: Kt thc sm th la chn trc.

- Sp xp cc on thng theo th t khng gim ca u mt phi. Bt u t tp S l


tp rng, ta ln lt b sung cc on thng theo th t sp vo S nu n khng c
im chung vi bt c on no trong S.
procedure

Greedy2;

begin
C Tp cc on thng c sp tng dn theo u mt phi;
S := ;
while C do
begin (ai, bi) on u tin trong C;
C := C \ {(ai, bi)}
if <(ai, bi) khng giao vi bt c on no trong S> then
S := S {(ai, bi)}
end;
return S;
end;

Chng minh thut ton ng: Gi s Greedy3 khng cho li gii ng. Phi tm b d
liu u vo C sao cho thut ton khng cho li gii ti u. Gi s G3(C) l li gii tm
c bi Greedy3. Gi O l li gii ti u c s on thng chung vi G3(C) l ln nht.
Gi X l on thng u tin c trong G3(C) nhng khng c trong O. on ny l tn
ti, v nu tri li th hoc G3(C) O (mu thun v gi thit G3(C) O) hoc G3(C)
O (cng mu thun v khi thut ton phi chn on thng X cho O, v O cng c
sp xp ging G3(C)).
Gi Y l on u tin k t bn tri ca O khng c mt trong G3(C). on Y cng phi
tn ti (Chng minh tng t nh trn).
Khi u mt phi ca on X phi bn tri (nh hn) mt phi ca on Y, v nu
tri li thut ton s chn Y thay v X.

68

Nguyn Ch Trung Nguyn Th Thu Thy

Xt tp li gii O' sau y:


O = O \ {Y} {X}
R rng:
- O gm cc on thng khng giao vi nhau, bi v X khng giao vi bt k on no
bn tri n trong O (do G3(C) l chp nhn c) cng nh khng giao vi bt c on
no bn phi n trong O (Do mt phi ca X nh hn mt phi ca Y v Y khng giao
vi bt c on no bn phi Y trong O).
- Do O c cng lc lng vi O nn O cng l ti u.
- Tuy nhin ta thy rng O ging vi G3(C) hn l O, iu ny mu thun vi gi thit O
l li gii ti u c s on thng chung vi G3(C) l ln nht.
2.2. Tm hiu cc thut ton tham lam i vi bi ton ci ti
Ta quay li bi ton ci ti c pht biu chng trc. Ta c th tm tt bi ton nh sau:
C = {1, 2, ..., n} l tp ch s cc vt. Cn tm nghim I trong C sao cho:

w
iI

(1) (rng buc nghim)

f ( I ) = ci max

(2) (hm mc tiu)

iI

xut thut ton tham lam


Greedy1: Sp xp theo th t khng tng ca gi tr s dng ca cc vt. Xt cc vt theo
th t xp, ln lt cht tng vt ang xt vo ti nu dung lng cn li trong ti cha
n. Thut ton tham lam ny khng cho li gii ti u. Sau y l phn v d :

Tham s ca bi ton l n = 3; b = 19.


vt

Gi tr

20

16

8 (Gi tr ln nhng trng lng cng rt ln)

10

Trng lng 14

Thut ton s la chn vt 1 vi tng gi tr l 20, trong khi li gii ti u ca bi ton l la


chn { vt 2, vt 3} vi tng gi tr l 24.
Greedy2: Sp xp vt khng gim ca trng lng. Ln lt cht cc vt vo ti theo th
t sp xp. Thut ton tham lam ny cng khng cho kt qu ti u. Sau y l phn v d:

Tham s ca bi ton l n = 3; b = 11
vt

Gi tr

10

16

28 ( vt nh nhng gi tr s dng cng rt t)

69

Phn tch thit k thut ton v nh gi phc tp gii thut


Trng lng 5

10

Thut ton s la chn ( vt 1, vt 2) vi tng gi tr l 26, trong khi li gii ti u ca bi


ton l ( vt 3) vi tng gi tr l 28.
Greedy3: Sp xp cc vt theo th t khng tng ca gi tr mt n v trng lng, tc l
sp theo th t ca dy ci/wi. Ta ln lt a cc vt vo ti theo th t:

c1 c2
c

... n
w1 w2
wn
Tuy nhin Greedy3 cng khng cho li gii ti u. Sau y l phn v d ca thut ton.
Tham s ca bi ton : n = 2; b 2.
vt

Gi tr

10

10b-1

Trng lng 1
V

c1 10 10b 1 c2
=
=
nn thut ton ch la chn c vt 1 vi tng gi tr l 10,
w1 1
b
w2

trong khi li gii ti u ca bi ton la chn vt 2 vi tng gi tr l 10b-1 ( 10.2-1 = 19 >


10).
Greedy4 : Gi Ij l li gii thu c theo cc thut ton Greedyj gii trn (j = 1, 2, 3). Gi I
l phng n lm cho hm mc tiu t gi tr max, tc l:

I 4 = max{

c , c , c }
iI1

iI 2

iI 3

nh l: Li gii I4 tho mn bt ng thc

c
iI 4

1
f*
2

Trong f* l gi tr ti u ca bi ton.
nh l ny chng t thut ton tham lam th t ny cng khng cho li gii ti u.

2.3. Bi ton ngi du lch (TSP - Travelling Salesman Problem)


Pht biu bi ton: Cho n thnh ph nh s th t t 1 n n v cc tuyn ng giao thng
hai chiu gia chng, mng li giao thng ny cho bi mng C[1..n, 1..n], y C[i, j] = C[j, i]
l chi ph i li trn on ng trc tip gia thnh ph i v thnh ph j.

Mt ngi du lch t thnh ph 1, mun i thm tt c cc thnh ph cn li, mi thnh ph


thm ng mt ln v cui cng quay tr li thnh ph xut pht 1. Hy ch ra cho ngi du lch
mt hnh trnh vi (tng) chi ph t nht.

70

Nguyn Ch Trung Nguyn Th Thu Thy


Greedy: tng n gin nh sau: Xut pht t thnh ph 1, ti mi bc ta s chn thnh ph
tip theo l thnh ph cha thm m chi ph t thnh ph hin ti n thnh ph l t nht (ti
u cc b), ta gi thnh ph l thnh ph gn nht. C th nh sau:

- Hnh trnh cn tm c dng: S = (x1 = 1, x2, ..., xn, xn+1 = 1), trong dy (x1, x2, ..., xn) l mt
hon v ca (1, 2, ..., n).
- Ta xy dng nghim tng bc, bt u t x1, chn x2 l thnh ph gn x1 nht, sau chn x3
l thnh ph gn x2 nht (x3 khc x1), ... Tng qut, chn xi l thnh ph cha i qua m gn xi-1
nht.

2.4. Bi ton m ha Huffman


Pht biu bi ton: Gi s C l bng ch ci. Vi mi ch ci c C, ta bit tn sut xut hin
ca n trong vn bn l f(c). C rt nhiu cch m ha vn bn.

M ha vi di c nh: Mi k t c m ha bi mt xu nh phn di nh nhau. M


ha di c nh c u im d m ha, d gii m nhng tn b nh.
M phi tin t (Prefix Free Code) l cch m ha mi k t c bi mt xu nh phn Code(c) sao
cho m ca mt k t bt k khng l on u ca bt c m ca k t no trong s cc k t cn
li. M phi tin t phc tp trong m ha v gii m nhng t tn b nh.
Mi m phi tin t c th biu din bi cy nh phn T, mi l ca cy tng ng vi mt ch
ci v cnh ca n c gn cho mt trong hai s 0,1. M ca ch ci c l mt dy nh phn gm
cc s gn cho cc cnh trn ng i t gc ti l.
Yu cu ca bi ton: Tm cy nh phn ti thiu ha tng di c trng s:

B (T ) = f (c)depth(c)
cC

S dng thut ton tham lam: Ch ci c tn sut nh hn cn c gn cho l c khong


cch n gc l ln hn, v ngc li. chnh l t tng ca thut ton Huffman.
procedure

Huffman(C, f);

begin
n |C|;
Q C; {X l, thay i trn Q, gi li Input C}
for i := 1 to n -1 do
begin
x, y 2 ch ci c tn sut xut hin nh nht trong Q;
To nt P vi hai con x, y ;
f(P) := f(x) + f(y);
Q Q \ {x,y} {P}

71

Phn tch thit k thut ton v nh gi phc tp gii thut


end
end

M xy dng theo thut ton Huffman c gi l m Huffman


V d

K t

Tn sut

0.2

0.1

0.1

0.15

0.45

M t thut ton
Cch th nht
1

0.2

0.1

0.1

0.15

0.45
3

0.2

0.2

0.2

0.15

0.45

0.1

0.1

0.35

0.45

0.2

0.15

0.1

0.1

1.00

0.55

0.55

0.45

0.2

0.35
0

0.2

0.35

1
0.15

0.2
0

0.1

0.1

72

0.45

0.2

0.15

0.1

0.1

Nguyn Ch Trung Nguyn Th Thu Thy


Cch th hai
1

0.2

0.1

0.1

0.15

0.45

0.2

0.2
0

0.15

0.45

0.35

0.1

0.1

0.2

0.2

0.45

0.15

0.1

0.1

1.00
0

0.45

0.2

0.45
1

0.35

0.35
0

0.55

0.55
0

0.2

0.15

0.1

0.1

0.2

0.2
1

0.15

0.1

0.1

Thut ton din ra nh sau:


- Khi to n = 5 cy nh phn, mi cy ch c mt nt gc. (xem hnh 1)
- Chn 2 cy c trng s nh nht l 0.1 v 0.1. Thay hai cy ny bng mt cy nh phn c
trng s ca nt gc l tng trng s ca hai nt gc ca cy nh phn ban u, tc l bng 0.2 v
c hai cy con l hai cy nh phn ban u (ta c hnh 2).
- Tng t, trong 4 cy nh phn mi, chn 2 cy c trng s nh nht l 0.2 v 0.15. Thay hai
cy ny bng mt cy nh phn c trng s ca nt gc l tng trng s ca hai nt gc ca cy
nh phn ban u, tc l bng 0.35 (ta c hnh 3).
- Trong 3 cy nh phn mi ta lm tng t, chn 2 cy c trng s nh nht l 0.35 v 0.2. Thay
hai cy ny bng mt cy nh phn c trng s ca nt gc l 0.55. (ta c hnh 4).

73

Phn tch thit k thut ton v nh gi phc tp gii thut


- Cui cng, thay 2 cy cn li bi mt cy c trng s 0.55 v 0.45 bi mt cy nh phn duy
nht c trng s ca nt gc l 1.00 (ta c hnh 5).
Cc nt l ca cy c gn thm nhn l k t c tn sut tng ng. M ca mt k t l ng
i t nt gc n nt l tng ng. M ny th hin bi dy bit ghi trn cc cnh ca ng i.
K t

Tn sut

M cch 1

M cch 2

0.2

00

000

0.1

0100

010

0.1

0101

011

0.15

011

001

0.45

Mc d c hai cch u tha mn m ca mt k t l xc nh duy nht (tc l m ca mt k t


khng l on u ca m ca k t khc), nhng cch th nht ph hp vi tng thut ton
nu. Trong cch th nht: K t B v C cng c tn sut nh nht, c m di nht gm 4 bit.
K t D c tn sut nh th nh, c m ngn hn gm 3 bit. K t A c tn sut ln hn nn c
m ngn hn, gm 2 bit. Cui cng, k t E c tn sut ln nht nn c c m ngn nht ch gm
1 bit. T c mt lu khi m ha l khi c hai cch ha nhp hai cy ta u tin chn cy c
nhiu mc hn.
Thut ton xy dng cy Huffman:

Bc 1: Khi to n cy nh phn, mi cy ch c mt nt gc c trng s l tn sut ca k t


tng ng. Mi nt u gn thm mt nhn l k t tng ng vi tn s ca n.
Bc 2: Gim n mt n v.
Bc 3. Nu n = 1 th kt thc thut ton xy dng cy Huffman ( chuyn sang thut ton xy
dng m ha Huffman cho cc k t).
Bc 4: Xt n cy nh phn cn li: Chn hai nh phn m nt gc c trng s nh nht. Nu c
nhiu hn mt cch chn th u tin chn cc cy c nhiu mc. Thay hai cy ny bng mt cy
nh phn c trng s ca nt gc l tng trng s ca hai nt gc ca cy nh phn ban u, v c
hai cy con l hai cy nh phn ban u.
Bc 5: Quay v bc 3.
nh l: Thut ton m ha Huffman xy dng c cy m phi tin t ti u sau thi gian
O(nlogn).
Chng minh : Trong vng for-do c hai thao tc 1, v 2 l thc hin nhiu nht, cn cc thao
tc cn li b chn bi hng s.

Thao tc 1 : to mt heapmin l mt cy tm kim nh phn i hi thi gian tnh O(logn), ly hai


phn t nh nht mt thi gian O(logn)

74

Nguyn Ch Trung Nguyn Th Thu Thy


Thao tc 2 : B sung nt P vo Q mt thi gian l O(logn)
Vic ci t thut ton Huffman O(nlogn)

Mt vn bn c m ha Huffman c th gii m nh thut ton sau


procedure

Huffman_Decode(B);

(*B l xu m ha vn bn theo m Huffman*)


begin
<Khi ng con tr P tr vo gc ca cy Huffman>
while <Cha t n kt thc ca B> do
begin
X bit tip theo trong xu B;
If x = 0 then
P con tri ca P
else
P con phi ca P
If ( P l nt l) then
begin
<Hin th k t tng ng vi nt l>
<t li P ti gc ca cy Huffman>
end
end
end

BI TP CHNG 4
1. u vo : Tp S = {(xi, yi) | 1 i n}

u ra : Tp con vi lc lng ln nht S* ca S sao cho khng c hai khong no trong S* c


im chung.
Xt thut ton sau :
Lp li cho n khi S l rng cc thao tc sau :
1. Chn khong I c s im chung vi mt s t nht cc khong khc
2. B sung I vo tp cn tm S*
3. Loi b mi khong c im chung vi
Hy chng minh tnh ng n hoc nu phn v d cho n.

75

Phn tch thit k thut ton v nh gi phc tp gii thut


2. Xt bi ton t mu khong (Interval Coloring Problem)

u vo : Tp S = {(xi, yi) | 1 i n}
Hy coi rng mi khong (xi, yi) tng ng vi mt yu cu s dng phng hc bt u t thi
im xi , kt thc ti yi.
u ra : Tm cc phn b lp vo phng sao cho s phng cn s dng l t nht. Ch l mi
yu cu s dng phng cn c tha mn v khng c hai lp no s dng cng mt phng ti
cng mt thi im.
a. Xt thut ton lp sau : Phn b mt s nhiu nht c th c cc lp phng th nht, sau
phn b mt s nhiu nht c th cc lp vo phng th hai, ri n phng th 3, Hi rng
thut ton va nu c cho li gii ng ca bi ton t mu khong? Gii thch cu tr li ca
bn.
b. Xt thut ton sau : Ln lt xt cc lp theo th t tng dn ca thi im bt u. Gi s
ang xt lp C, nu c phng R c s dng xp mt lp no y v C c th xp vo
phng ny m khng mu thun vi cc lp xp vo R trc th xp C vo R. Nu tri li
xp C vo phng mi. Hi rng thut ton va nu c cho li gii ng ca bi ton t mu
khong? Gii thch cu tr li ca bn.
3. Xt bi ton i tin sau : u vo l mt s nguyn L. u ra l s lng t nht cc ng
tin i lng tin L. Cc ng tin c mnh gi l 1, 2, 22, , 21000. Gi thit rng s
lng ng tin ca mi mnh gi l khng hn ch. Xt thut ton i tin sau y:
S dng nhiu nht ng tin c mnh gi cao nht. V d L = 31 : s dng mt ng tin 24;
cn li gi tr 15, li ly mt ng tin 23; cn li gi tr 7, ly 1 ng tin 22; gi tr cn li 3
cn i bi mt ng 21 v 1 ng 20.

Hi thut ton ny c cho li gii ti u ca bi ton khng? gii thch cu tr li ca bn?

76

Nguyn Ch Trung Nguyn Th Thu Thy

Chng 5. CC THUT TON TH C BN


1. Cc khi nim c bn
1.1. th
th l m hnh biu din mt tp cc i tng v mi quan h hai ngi gia cc i tng.
C th biu din th G l mt cp gm hai thnh phn V v E, k hiu G = (V, E), trong V
l tp cc nh biu din cc i tng, E l tp cc cung biu th mi quan h gia cc i
tng.
V d th biu din mt s giao thng, cu trc phn t, mng my tnh.
Mt s loi th

- n th: gia hai nh c duy nht mt cnh.


- a th: gia hai nh c th c nhiu hn mt cnh.
- th v hng: cc cnh trong E khng nh hng.
- th c hng: cc cnh trong E nh hng.
- th khng trng s: cc cnh khng gn trng s.
- th c trng s: cc cnh gn vi mt trng s no , cn gi l gi ca cnh.

1.2. Cc khi nim


Cho th G= (V, E),
a) Bc ca nh: bc ca nh v V, k hiu l deg(v), l s cnh k vi v.
nh l 5.1. Trong th v hng, tng bc ca tt c cc nh bng hai ln s cnh.
H qu 5.2. Trong th v hng, s nh bc l l mt s chn.
b) Bn bc ra v bn bc vo: Nu G l c hng, nh ngha bn bc ra ca nh v E, k hiu
l deg+(v) l s cung i ra khi n; nh ngha bn bc vo ca nh v E, k hiu l deg-(v) l
s cung i vo n.
nh l 5.2. Trong th c hng tng cc bn bc ra ca tt c cc nh bng tng cc bn bc
vo ca tt c cc nh v bng s cung ca th.
c) ng i v chu trnh

- Mt dy cc nh P = {v0, v1, .., vk} sao cho (vi-1, vi) E, i = 1, 2, ..., k, gi l mt ng i.


ng i P trn i qua k+1 nh v k cnh.
- ng i P = {v0, v1, .., vk} l mt chu trnh nu vk = v0.
- ng i hay chu trnh c gi l n nu khng c cnh no c lp li.

77

Phn tch thit k thut ton v nh gi phc tp gii thut


d) Tnh lin thng

- Mt th gi l lin thng nu gia hai nh bt k ca th lun tn ti ng i.


- th c hng gi l lin thng mnh nu gia hai nh bt k ca th lun tn ti ng
i. th c hng gi l lin thng yu nu th v hng ca n l mt th lin thng.

2. Cc phng php biu din th


1.1. Biu din th bng ma trn k
Cho n th th G = (V, E), trong |V| =n, c th nh s th t cc nh t 1 n n v
ng nht mi nh vi s th t ca n. Ma trn k ca G l ma trn vung
A = (aij)n x n trong :
1 if
aij =
0 if

(i, j ) E
(i, j ) E

Nhn xt
- Ma trn k ca th yu cu O(V2) b nh, khng ph thuc vo s cnh trong th.
- Ma trn k ca th v hng th i xng, do ch cn lu phn tam gic trn (hoc di)
ca ma trn, do b nh c gim mt na.
- u im ca ma trn k l trc quan, d ci t trn my, d kim tra xem hai nh u, v ca
th c k nhau hay khng
- Hn ch ca ma trn k l tn b nh, lun tn mt ma trn n x n cho d ch c rt t cnh.
Biu din ma trn k trn Pascal
var a : array[1..n, 1..n] of boolean

1.2. Biu din th bng danh sch cnh


Cho th G = (V, E), gi s c n nh v m cnh, tc n = |V|, m = |E|. Khi G c th cho bi
danh sch m cnh trong E.
Nhn xt:
- u im ca biu din th bng danh sch cnh l thch hp i vi th tha, thch hp
i vi cc thut ton th m cn duyt trn cc cnh (v d thut ton Kruscal)
- Hn ch ca danh sch cnh l khng thch hp khi cn duyt th theo nh.
Biu din danh sch cnh trn Pascal
type Canh = record x, y : integer; end;
var e : array[1..m] of Canh;

78

Nguyn Ch Trung Nguyn Th Thu Thy

1.3. Biu din th bng danh sch k


Biu din th bng danh sch k (adjacency list) khc phc c nhng hn ch ca ma trn
k v danh sch cnh; tuy nhin n c hn ch trong vic kim tra mt cp nh c phi l mt
cnh hay khng (v phi duyt trn tp cc nh k). Trong cch biu din ny, vi mi nh v
ca th, ta cho tng ng vi n mt danh sch cc nh k vi nh v.
Cho th c hng G = (V, E), V gm n nh v E gm cung. C hai cch ci t danh sch k:
Danh sch tr trc: Vi mi nh u, lu tr mt danh sch adj[u] cha cc nh k vi nh u:
adj[u] = {v : (u, v) E}
Danh sch tr sau: Vi mi nh u, lu tr mt danh sch adj[u] cha cc nh v m u k vi v:
adj[u] = {v : (v, u) E}
a) Biu din danh sch k bng mng

Dng mng adj[1..n] cha cc nh, mng c chia thnh n on, on th u trong mng lu
cc nh k vi nh u.
bit mt on nm t ch s no n ch s no, dng thm mt mng head[1...n + 1] nh
du v tr phn on: head[u] bng ch s (v tr) cui cng ca on ngay trc on u, qui c
head[n+1] = 2m, vi m l s cung ca th (lu vic biu din danh sch k bng mng s
nhn i s cung ca th).
Vy on th u bt u t ch s head[u] + 1 cho n head[u+1]. Ni cch khc, cc nh k ca
u thuc phn on t adj[head[u]+1] n adj[head[u+1]]. V d nh hnh di y, cc nh k
ca u = 2 thuc phn on t adj[head[2]+1] n adj[head[3]], c th l t adj[3] n adj[6],
phn on ny tng ng vi cc nh 1, 3, 4, 5.

adj

1
2

2
4

3
1

4
3

1
head 0

5
4

6
5

2
2
2

3
6

4
8

5 6
11 14

Biu din danh sch k bng mng trn Pascal


var adj

head :

array[1..2*m] of integer;
array[1..n + 1 ] of integer;

on trnh chuyn i t ma trn k sang danh sch k


1.

head[n +1] := 2*m;

2.

for i := n downto 1 do begin

3.

head[i] := head[i+1];

79

7
2

8
5
3

9
1

10 11 12 13 14
2 5 2 3 4
4

Phn tch thit k thut ton v nh gi phc tp gii thut


4.

for j := n downto 1 do

5.

if a[i, j] then begin

6.

adj[head[i]] := j;

7.

head[i] := head[i] - 1;

8.
9.

end;
end;

hiu c thut ton trn, ta m phng vi thao tc ban u da vo v d nu. Ta c


head[6] = 14. Vi i = 5, ban u head[5] = 14. Ta thy cu lnh 7 s c thc hin 3 ln, bng
di ca phn on 5, tc l cui cng head[5] = 12. Cng vi cu lnh 7, cu lnh 6 s ln
lt gn adj[14] = 4 (v tn ti a[5,4]), adj[13] = 3 (v tn ti a[5, 3]), adj[12] = 2 (v tn ti
a[5,2]). Vy l xong phn on 5.
Vi i = 4 tip theo, cu lnh 3 khi gn head[4] = 11, ri vic tnh li head v tnh mng adj
thuc phn on 4 li din ra tng t. Cui cng head[4] gim 3 ln cn 8, phn on 4 c
tnh vi adj[11, 10, 9] = [5, 2, 1].
on trnh chuyn i t danh sch k sang ma trn k
for i := 1 to n do
for j :=1 to n do a[i,j] := false;
for u :=1 to n do
for k := head[u] + 1 to head[u+1] do a[u, adj[k]] := true;

b) Biu din danh sch k bng danh sch mc ni

Trong biu din ny, ta cho mi nh u ca th tng ng vi list[u] l cht ca mt danh sch
mc ni (hay danh sch lin kt) gm cc nh k u.

list[1]

list[2]

list[3]

list[4]

list[5]

Nu G l th c hng, tng chiu di ca tt c cc danh sch k l |E|, do c cnh ni (u,v)


ch khi nh v xut hin trong adj[u]. Nu G l mt th v hng, tng di ca tt c cc
danh sch k l 2|E|, do tn ti cnh v hng (u,v) ch khi nh u xut hin trong danh sch cc
nh k ca v v nh v xut hin trong danh sch cc nh k ca u. D th c hng hay v

80

Nguyn Ch Trung Nguyn Th Thu Thy


hng, vic biu din qua danh sch k chim mt vng b nh c kch thc l O(max(V,E)) =
O(V + E).
Cc danh sch cc nh k c th d dng c s dng biu din cc th c trng s.
l th m mi cnh u c mt trng s ring, c tnh bng hm trng s w: E R.

1.4. Biu din th bng danh sch lin thuc


Cho th G = (V, E). Vi cnh e = (u, v) E, ta ni u v v l hai nh k nhau; cnh e l cnh
lin thuc (incdent) vi nh u v nh v.
Danh sch lin thuc l m rng ca danh sch k. Nu nh trong danh sch k, mi nh c
cho tng ng vi mt danh sch cc nh k, th trong danh sch lin thuc, mi nh c cho
bi danh sch cc cnh lin thuc.

3. Thut ton tm kim theo chiu rng


Duyt theo chiu rng (Breadth First search, BFS) l mt trong nhng thut ton quan trng
trong vic duyt v tm kim trn th. Trn c s ca thut ton ny m nhiu cc thut ton
th quan trng khc ra i, nh l: Thut ton Dijkstra gii bi ton ng i ngn nht;
Thut ton Prim gii bi ton cy khung nh nht.

3.1. Nguyn tc t mu - cch hot ng ca BFS


S d thut ton BFS c tn gi nh vy l do ti mi mt bc ca thut ton, n m rng bin
gii gia cc nh c thm v cha c thm theo mt quy tc nht nh: thut ton ln lt
thm cc nh c khong cch t nh xut pht s n chng l k (c ngha l s cnh t s ti cc
nh ny l k) trc khi thm bt c mt nh no c khong cch t nh s ti n l k+1.
Trong qu trnh hot ng, thut ton tin hnh bi mu cc nh vi mt trong 3 mu - mu
trng, xm hoc en theo nguyn tc sau:
-

Ti bc khi ng tt c cc nh ca th u c mu trng.

Tt c cc nh c thm u c mu xm hoc en.

Thut ton BFS phn bit gia cc nh c mu xm v mu en m bo tnh cht duyt


theo chiu rng ca mnh.

Khi nh v c thm ln u tin, n c bi mu xm (ta ni rng v l nh c duyt


n). Cc nh ny biu hin bin gii gia cc nh c thm v cha c thm. Sau
thut ton tin hnh duyt cc nh k vi nh v.

nh v c bi mu en (ta ni rng v l nh duyt xong) ch khi duyt xong (thm)


tt c cc nh k vi v.

2.2. Breadth First Tree


Vi tng t mu ni trn, thut ton BFS c th cho php xy dng mt cy tm kim theo
chiu rng T (breadth first tree) nh sau:

81

Phn tch thit k thut ton v nh gi phc tp gii thut


-

Ban u cy ny ch c mi mt gc l nh s.

Trong qu trnh duyt, gi s thut ton duyt n nh cha c thm u. Khi u tr


thnh nh c duyt n v thut ton s tin hnh duyt danh sch cc nh k vi nh u.
Nu gp phi nh v k vi u, m nh v cha dc thm ln no c, th nh v v cnh (u, v)
c b sung vo trong cy. iu ny c ngha l nt tng ng vi nh u l nt cha ca nt
tng ng vi nh v, cn nh u c gi l nh trc ca nh v trong th t duyt theo
chiu rng.

Do cc nh c thm nhiu nht l mt ln, nn nt trong cy T tng ng vi nh ny ch c


mt cha.

3.3. M t thut ton


Thut ton t mu th - BFS c m t nh sau:
u vo:

Cho th v hng hoc c hng G=(V,E) c biu din bng danh sch k.

Mu ca nh uV c lu trong mng color[u].

- nh trc ca nh u c lu trong mng pred[u]. Nu nh u khng c nh trc, khi


pred[u]=NIL.
-

Khong cch t nh xut pht s ti nh u c lu trong mng d[u].

- Thut ton s dng hng i Q (theo nguyn tc FIFO vo trc ra trc) qun l tp
cc nh c mu xm.
M phng thut ton BFS bng ngn ng gi Pascal:
procedure BFS (G,s)
1 begin for each uV[G] \ {s} do
2
3

d[u]

pred[u]NIL end;

colors[s] GRAY;

d[s]0;

pred[s]NIL;

Q {s}

while Q do

10

begin u head[Q];

11

begin color[u] WHITE

S
5
3
4
6
V

for each vAdj[u] do

82

Nguyn Ch Trung Nguyn Th Thu Thy


12

if color[v] = WHITE then

13

begin color[v]GRAY

14

d[v]d[u]+1;

15

pred[v]u;

16

Q v; end;

17

colors[u] BLACK;

end;

Phn tch th tc:

Bc 1 (dng 1 cho n dng 4):


Thc hin vng lp for khi to cc gi tr ban u cho tt c cc nh khc vi nh xut pht
s ca th (each vertex u V[G] - {s}):
-

gn mu trng cho mi nh ca th G tr nh s (color [u] white)

- Do ti bc u cha tin hnh duyt th, nn gn khong cch t nh s ti cc nh cn


li bng v cng (d[u] )
- pred[u] NIL, c ngha l cha xc nh c nh ng trc nh u trong th t duyt
theo chiu rng.
Bc 2 (dng 5 cho n dng 8):
Khi to cho nh xut pht s:
-

gn mu xm cho s color[s] gray

gn d[u] 0 (khong cch t s ti chnh n l 0)

gn pred[s] nil

y nh s vo hng i Q ( s tr thnh phn t u ca Q)

Bc 3 (dng 9 cho n 17):


y l bc chnh ca thut ton. N c lp i lp li khi trn th vn cn cc nh c mu
xm, c ngha l khi cn c cc nh m danh sch k ca chng vn cha c duyt:
1) Kim tra hng i Q c rng khng. Nu rng, kt thc thut ton. Ngc li, chuyn sang
bc 2.
2) Ly phn t u u t Q.
3) Duyt ln lt danh sch cc nh k ca nh u.
4) Vi mi phn t v ca danh sch k ny kim tra xem v c thm cha
(nh v cha c thm khi color[v] WHITE). Nu v cha c thm th:

83

Phn tch thit k thut ton v nh gi phc tp gii thut


-

gn color[v] GRAY

gn gi tr mi cho khong cch t nh xut pht s ti v: d[v] d[u]+1

ghi nh li nh ng trc nh v: pred[v] u

y nh v vo cui ca hng i Q (dng 16).

5) V cc nh k vi u duyt xong: Gn mu en cho u: color[u] BLACK


Ch : Thut ton BFS trn s khng duyt ht tt c cc nh ca th G nu th ny gm
nhiu thnh phn lin thng khc nhau. duyt c ht cc thnh phn lin thng ca th
G, thut ton c iu chch li nh sau: Thm mt vng lp for ngoi cng duyt mi
nh s ca G, nu gp nh s cha c thm th tin hnh th tc BFS(G, s).
nh gi phc tp tnh ton ca thut ton BFS

- Sau khi c khi to, cc nh u c gn mu trng, nn mi mt nh s c a vo


trong hng i Q nhiu nht l mt ln, v hin nhin l cng c a ra khi hng i nhiu
nht l mt ln. Thao tc y vo v ly ra khi hng i Q s mt thi gian l O(1), v vy, thi
gian tng cng dnh cho cc php ton vi hng i l O(V).
- Do danh sch k ca mi mt nh c duyt ch khi nh ny c a vo trong hnh
i, nn danh sch k ca mi mt nh cng c duyt nhiu nht l mt ln. Chiu di ca tt
c cc danh dch k l O(E). Do vy, thi gian dnh cho vic duyt ton b cc danh sch k l
O(E).
Vy, phc tp tnh ton ca thut ton BFS l O(V+E). T cng suy ra thi gian tnh ton
ca BFS t l tuyn tnh vi kch thc ca danh sch k ca th G.

4. Thut ton tm kim theo chiu su


4.1. Gii thiu thut ton
tng thut ton: Thut ton ton tm kim theo chiu su (Deapth First Seach - DFS) tm
kim su dn trn th chng no cn c th. tng ca DFS nh sau: Bt u tm kim t
mt nh v0 no ca th. Sau chn u l mt nh k vi v0 v lp li qu trnh nh th
i vi nh u. Gi s ta ang xt nh v mt bc no , khi cc cnh n c nh v s
cha c thm cho n khi no v cn cnh (i ra t n) cha c thm. Khi tt c cc cnh
ca v c thm, th ta ni rng nh v c duyt xong v quay tr li tm kim t nh
m trc ta n c nh v. Qu trnh ny tip tc cho n khi v = v0 th kt thc ngha l tt
c cc cnh ca th c thm.
th con trc : Trong thut ton tm kim theo chiu su, vi u l mt nh c thm,
th mi khi mt nh v thuc danh sch k ca u c thm, thut ton s nh du bng cch t
trc v mt trng (v) c gi tr l u. Khc vi thut ton tm kim theo chiu rng (ton b
th con trc - predecessor subgraph l th to ra khi thm cc nh trc trong qu
trnh tm kim) xc nh mt cy tm kim duy nht, trong thut ton tm kim theo chiu su,

84

Nguyn Ch Trung Nguyn Th Thu Thy


th con trc c th xc nh nhiu cy tm kim khc nhau v c th c lp li t nhiu
nh khc nhau. V vy th con trc trong thut ton tm kim theo chiu su c nh
ngha hi khc mt cht so vi trong thut ton tm kim theo chiu rng. Ta nh ngha nh
sau:
G = (V, E) trong E = { ( [v], v) : v V v [v] # Nil }
th con trc trong thut ton tm kim theo chiu su s xc nh mt rng cy tm kim
theo chiu su (a depth-first forest ) l tp hp ca cc cy tm kim theo chiu su (deepth- first
trees ). Cc cnh thuc E gi l cc cnh ca cy (tree edges).
T mu theo chiu su: Trong thut ton tm kim theo chiu su, cc nh ca th c th
c t mu m t trng thi ca n ti mi thi im. Cc nh ban u cha c thm s
c khi to l mu trng, khi c thm s t mu xm v t mu en khi duyt xong. Gii
thut t mu trn s m bo chnh xc mi nh ch c duyt mt ln, v vy m cc cy tm
kim theo chiu su phn bit c vi nhau.
Th t duyt n v duyt xong: Bn cnh vic to ra mt rng cy tm kim theo chiu su,
thut ton tm kim theo chiu su cn gn cho mi nh mt tem thi gian (timestamps). Mi
nh v s c 2 tem thi gian:

Khi nh v bt u c thm ln u tin, ta ni rng v c duyt n v c gn tem


th nht d[v] (c t mu xm).

Khi chun b khi li v nh trc nh v, tc l cc nh trong danh sch k ca v


c duyt, ta ni rng nh v c duyt xong, v v c gn tem th hai f[v] (t mu
en).

Cc tem thi gian ny gip ch rt nhiu cho vic m t qu trnh thc hin cc bc trong thut
ton tm kim theo chiu su; c s dng nhiu trong cc thut ton th nh tm thnh phn
lin thng mnh, thut ton sp xp topo.

4.2. Th tc tm kim theo chiu su


Th tc DFS di y khi to mi nh ca th c mu trng, mi nh u cha c nh i
trc ((u) = nill) v khi to bin thi gian bng 0. Khi th khng lin thng th on trnh
tip theo (dng 5, 6, 7) s ln lt tm cc cy tm kim theo chiu su bng th tc DFS-Visit(u)
trong u l nh gc ca cy (cha thm - mu trng).
procedure DFS(G)
1

begin

for u V[G] do begin

color[u] WHITE;

[u] NIL; end;

time 0;

for u V[G] do

85

Phn tch thit k thut ton v nh gi phc tp gii thut


6

if color[u] = WHITE then

DFS-Visit(u); end;

procedure DFS-Visit(u)
1 begin color[u] GRAY {Trong khi mi nh v k u cha c thm}
2

d[u] (time time + 1);

for v Adj[u] do {thm cnh (u,v)}

if color[v] = WHITE then


begin [v] u;

5
6

DFS-Visit(v);
end;

color[u] BLACK {T mu en cho nh u khi duyt xong}

f[u] (time time + 1);

end;

Ti mi ln gi th tc DFS-Visit(u):

nh u ban u ang c t mu trng.

Khi thc hin, dng 1 s t mu xm cho nh u

Dng 2 ghi li thi im nh u bt u c thm ln u tin vo bin time sau khi tng n
ln 1.
Dng 3-6 kim tra cc nh v k vi nh u v thc hin thm v mt cch quy nu n vn
l nh trng. Vi mi nh v c xt ti dng 3, ta ni rng cnh (u,v) c thm trong
thut ton tm kim theo chiu su .
Khi tt c cc cnh i t u c thm, dng 7-8 s t mu en cho nh u v ghi li thi
im nh u duyt xong trong bin f[u].

4.3. nh gi phc tp thut ton DFS v DFS-Visit


Th tc DFS: S php ton cn thc hin trong hai chu trnh ca thut ton (hai vng for-do
dng 1-2 v 5-7) l c O(V).
Th tc DFS-Visit: s c gi chnh xc ch mt ln cho mi nh thuc V v mi ln thc
hin khng qu A[v]| php ton. Trong :

A[v] = O( E )
vV

ngha l tng s php ton cn thc hin ti cc dng 2-5 ca th tc DFS-Visit l O(E).
V vy phc tp tnh ton ca th tc DFS s l O (V+E).

86

Nguyn Ch Trung Nguyn Th Thu Thy

5. Bi ton tm ng i ngn nht


5.1. Mt s khi nim c bn
Cho th c trng s G = (V, E, w), trong G = (V, E) l mt th, w l mt hm trng s t
E n R, gn mi cung e E vi mt gi no w(e) R.
nh l 5.3. Cho th c trng s G = (V, E, w). Nu P = (v1, v2, , vk) l mt ng i ngn
nht trn t nh v1 n nh vk th mi dy con t nh vi n nh vj (1 i j k) trn ng i
u l ng i ngn nht t nh vi n nh vj.

Hu ht cc thut ton tm ng i ngn nht u dng qui hoch ng (v d cc thut ton


Floyd v Dijkstra dng kt qu ca nh l trn) hoc phng php tham lam ng (v d thut
ton Kruskal).
Bi ton o khong cch

Pht biu bi ton: Gi s th khng c chu trnh m v c ma trn trng s l c[1..n, 1..n].
Hy tm ng i ngn nht t nh xut pht s n nh kt thc t.
gii bi ton, ta s dng k hiu (u, v) ch di ng i t nh u n nh v trong
th.
tng ca thut ton: Trc tin tm nh v1 t m (s, t) = (s, v1) + c[v1, t]. D thy lun tn
ti nh v1 v v1 l nh ng ngay trc nh t trn ng i ngn nht t s n t. Nu v1 = s
th ng i ngn nht cn tm chnh l cnh (s, t). Nu khng th vn tr thnh tm ng i
ngn nht t s n v1 v ta li tm nh v2 {t, v1} m (s, v1) = (s, v2) + c[v1, v2], C tip
tc nh vy, sau mt s hu hn bc, ta c dy t = v0 , v1, v2, , vk = s khng cha cc nh
lp li. Lt ngc th t dy nh vy ta c ng i ngn nht t s n t.
Nhn khong cch v php co

Cc bi ton tm ng i ngn nht xut pht t mt nh s xc nh u s dng k thut gn


nhn khong cch. Hiu "nhn khong cch" theo ngha nh sau: Vi mi nh v V, nhn
khong cch d[v] l di ca mt ng i no t nh xut pht s n nh v.
Ban u ta cha xc nh c bt k ng i no t s n cc nh khc nn nhn d[v] c
khi to nh sau: Vi v V th
0 if v = s
d [v ] =
+ if v s,
Do nh ngha ca nhn khong cch nn ta c d[v] (s, v) vi v V. Cc thut ton tm
ng i ngn nht t s n v s tm cch cc tiu ha dn cc nhn khong cch d[v] cho n
khi d[v] = (s, v) vi v V bng cch s dng cc php co.
Php co theo cnh (u, v) E, gi tt l php co (u, v), c thc hin nh sau:

87

Phn tch thit k thut ton v nh gi phc tp gii thut

d[u]

c[u,v]
v

d[v]

Gi s xc nh c d[u]. Xt ng i t s n u. Ta ni thm cnh (u,v) (nu c cnh ny)


c ng i t s n v, v c di l d[u] + c[u,v]. Nu xy ra bt ng thc:
d[u] + c[u, v] < d[v]
th ta cn thay ng i t s n v bng ng i t s n v m ngay trc nh v l nh u cn
i qua, tc l:
d[v] = d[u] + c[u, v]
Khi ta ni rng d[v] c gim bi php co (u, v).

5.2. Thut ton Dijkstra


Ch rng thut ton Dijkstra ch p dng i vi th G c trng s khng m.
nh ngha: Mt nhn khong cch d[v] l c nh nu ta bit d[v] = (s, v) v khng th
gim d[v] c na thng quan mt php co, ngc li ta ni nhn d[v] l t do.
Thut ton
Bc 1: Khi to

Khi to nhn khong cch d[s] := 0;

d[v] := a[s, v], v s (a l ma trn k ca th).

Khi to mi trng thi nhn l t do: avail[v] := true, v s.

Bc 2: Lp hai thao tc sau

C nh nhn: Chn trong s cc nh c nhn t do, ly ra nh u c d[u] nh nht, ghi nhn


n tr thnh nh c nh, tc avail[u] := false;

Sa nhn: Dng nh u, xt tt c cc nh v k nh u v thc hin php co theo cnh (u, v)


cc tiu ha d[v]. Ti bc ny, nu dng php co (u, v), ta nn lu vt bng mng pred
bi lnh pred[v] := u. Vic lu vt ny gip ln li ng i ngn nht da vo mng pred
sau khi thut ton Dijkstra hon tt.

Bc 3: Truy vt

S dng mng lu vt pred tm li ng i ngn nht t s n t vi di ng i ngn


nht l d[t].
M phng thut ton Dijkstra trn Pascal
procedure Dijkstra;

88

Nguyn Ch Trung Nguyn Th Thu Thy


begin
(*Khi to*)
for v V do
begin
d[v] := a[s, v];
pred[v] := s;
avail[v] := true;
end;
d[s] := 0;
avail[s]:= false;
stop := false;
(*Bc lp*)
while not stop do
begin
(*C nh nhn*)
d[u] := min {d[v] : v V v avail[v] = true};
avail[u] := false ;
(*Sa nhn*)
for v V do
if avail[v] then
if d[v] > d[u] +a[u, v] then
begin
d[v] := d[u] +a[u, v];
pred[v] := u;
end;
end;
(* kim tra iu kin kt thc lp*)
stop := true;
for v V do
if avail[v] then stop := false;
end;
end;

89

Phn tch thit k thut ton v nh gi phc tp gii thut

6. Bi ton v cy khung nh nht


6.1. Cc khi nim c bn
nh ngha 1. Cu l mt cnh ca th m nu xa n th lm tng s thnh phn lin thng
ca th.
nh ngha 2. Cy l th v hng, lin thng v khng c chu trnh. th khng c chu
trnh gi l rng.

Nh vy mt rng c th c t 1 n nhiu cy.


V d: Di y gm mt rng c 3 cy:

nh l 5.4. Gi s T = (V, E) l th c n nh. Khi cc mnh sau l tng ng:

(1) T l cy
(2) T khng cha chu trnh v c n - 1 cnh
(3) T lin thng v c n - 1 cnh
(4) T lin thng v mi cnh ca n u l cu.
(5) Hai nh bt k ca T c ni vi nhau bi ng mt ng i n.
(6) T khng cha chu trnh, nhng nu c thm vo n mt cnh th ta thu c ng
mt chu trnh.
nh ngha 3. Gi s G = (V, E) l th v hng lin thng. Cy T = (V, F) vi F E, c
gi l mt cy khung ca th G.

Ni cch khc, cy khung ca mt th trc ht l mt cy, sau cn thm iu kin s nh


ca n bng s inh ca th.
Vi mt th, ngi ta c th xy dng nhiu cy khung khc nhau.
nh l 5.5. S lng cy khung ca th l nn-2.
nh ngha 4. Trong s cc cy khung xy dng t mt th, cy khung c tng trng s trn
cc cnh nh nht gi l cy khung cc tiu.

C hai thut ton tm cy khung cc tiu: Kruskal v Prim.

90

Nguyn Ch Trung Nguyn Th Thu Thy

6.2. Thut ton Kruskal


Thut ton s xy dng tp cnh T ca cy khung T nh nht H = (V, T) theo tng bc. Trc
ht xp cc cnh ca th G theo th t khng gim ca trng s. Bt u t tp T = , mi
bc ta s ln lt duyt trong danh sch cnh sp xp, t cnh c di nh nht n cnh
c di ln hn, tm ra cnh m vic b sung n vo tp T khng to thnh chu trnh trong
tp ny. Thut ton kt thc khi thu c tp T gm n - 1 cnh.
procedure Kruscal;
begin
T := ;
while |T| < (n-1) and (E ) do
begin
Chn e l cnh c di nh nht trong E;
E := E \ {e};
if T {e} khng cha chu trnh then T := T {e};
end;
if |T| < n - 1) then th khng lin thng;
end;

V d
2

33
18

1
17

20
16

8
6

9
4

14

Bc khi to: T := . Sp xp cc cnh ca th theo th t khng gim ca th, ta c dy


(3, 5), (4, 6), (4, 5), (5, 6), (3, 4), (1, 3), (2, 3), (2, 4), (1, 2)
dy di tng ng ca chng l:
4,

8,

9,

14,

16,

17,

18,

20,

33

ba ln lp u tin, ta b sung c vo T cc cnh (3, 5), (4, 6), (4, 5). Nu tip tc b sung
cnh (5, 6) vo T th s to thnh vi hai cnh (4, 5) v (4, 6) c trong T chu trnh. Tnh hung
tip theo cng tng t xy ra i vi cnh (3, 4) trong dy. Tip theo, ta b sung cnh (1, 3) v
(2, 3) vo T v thu c cy khung T cc tiu cn tm gm 5 cnh:
T = {(3, 5), (4, 6), (4, 5), (1, 3), (2, 3)}
Vn chn cnh e a vo T khng to thnh chu trnh

91

Phn tch thit k thut ton v nh gi phc tp gii thut


rng cc cnh trong T cc bc lp trung gian s to thnh mt rng. Cnh e cn kho st
s to thnh mt chu trnh vi cc cnh trong T nu hai u ca n cng thuc vo mt cy con
ca rng ni trn. Do , nu cnh e khng to thnh chu trnh trong T th n phi ni hai cy
khc nhau trong T. V th kim tra xem c th b sung cnh e vo T ta ch cn kim tra xem
n c ni vi hai cy khc nhau trong T hay khng.
lm c iu ny, ta c th phn hoch tp cc nh ca th thnh cc tp con khng giao
nhau, mi tp xc nh mt cy con trong T (c hnh thnh do b sung cnh vo T). Xt th
trong v d trn, u tin ta c su tp con 1 phn t
{1}, {2}, {3}, {4}, {5}, {6}.
Sau khi b sung cnh (3, 5) ta c 5 tp con
{1}, {2}, {3, 5}, {4}, {6}
Tip theo, khi cnh (4, 6) c chn ta c 4 tp con
{1}, {2}, {3, 5}, {4, 6}
bc 3, ta chn cnh (4, 5), khi hai tp con c ni li vi nhau, ta thu c 3 tp con:
{1}, {2}, {3, 4, 5, 6}
R rng tip theo ta khng th chn (4, 6) hoc (3, 4) v chng thuc mt tp con, nn s to
thnh chu trnh trong T.
Bi vy cc cnh cn li l (1, 3) v (2, 3) ni cc cy con ni trn s ln lt c chn.

6.3. Thut ton Prim


Thut ton Kruskal lm vic km hiu qu i vi th dy. khc phc ta s dng thut ton
Prim (cn gi l phng php ln cn gn nht, hay Ngi lng ging gn nht).
tng ca thut ton Prim

tng ca thut ton Prim nh sau: Bt u t mt nh s ty ca th, u tin ta ni nh


s vi nh ln cn gn n nht, chng hn l nh y. Ngha l trong s cc nh k nh s, cnh (s,
y) c trng s nh nht. Tip theo, trong s cc cnh k vi hai nh s hoc y, ta tm cnh c
trng s nh nht, cnh ny dn n nh th ba z, v ta thu c cy gm ba nh v hai cnh.
Qu trnh ny c tip tc cho n khi ta thu c cy gm n nh v n - 1 cnh th n chnh l
cy khung cc tiu cn tm.
Gi s th cho bi ma trn trng s C = {c[i, j], i, j = 1, 2, , n}. Trong qu trnh thc hin
thut ton, mi bc c th nhanh chng chn nh v cnh cn b sung vo cy khung, cc
nh ca th s c gn nhn. Nhn ca nh v gm hai phn v c dng (d[v], near[v]),
trong d[v] dng ghi nhn di cnh nh nht trong s cc cnh ni nh v vi cc nh
ca cy khung ang xy dng (ta s gi l khong cch t nh v n tp cc nh ca cy
khung), ni mt cch chnh xc:
d[v] = min { c[v, w] : w VH } ( = c[v, z])

92

Nguyn Ch Trung Nguyn Th Thu Thy


cn near[v] ghi nhn nh ca cy khung gn v nht (near[v] := z)
M phng thut ton Prim trn Pascal
procedure Prim;
begin
(*Bc khi to*)
chn s l nh no ca th;
VH := {s}; T := ; d[s] := 0; near[s] := s;
for v V \ VH do
begin d[v] := c[s, v]; near[v] := s;
end;
(* Bc lp*)
stop := false;
while not stop do
begin
Tm nh u V \ VH tha mn
d[u] = min {d[v] : v V \ VH} ;
VH := VH {u} ; T := T {(u, near[u]} ;
if |VH| = n then
begin
H := (VH , T ) l cy khung cc tiu ;
stop := true ;
end
else
for v V \VH do
if d[v] > c[u, v] then
begin
d[v] := c[u, v];
near[v] := u;
end;
end;
end;

V d: Tm cy khung nh nht ca th cho bi ma trn trng s sau:

93

Phn tch thit k thut ton v nh gi phc tp gii thut

33

17

18

20

16

14

2
C=

3
4
5
6

Bng di y ghi nhn ca cc nh trong cc bc lp ca thut ton, nh nh du * l nh


c chn b sung vo cy khung (khi nhn ca n khng b bin i trong cc bc tip
theo, v th ta nh du - ghi nhn iu .
Bc lp

nh 1

nh 2

nh 3

nh 4

nh 5

nh 6

VH

Khi to

[0, 1]

[33, 1]

[17, 1]*

[, 1]

[, 1]

[, 1]

[18, 3]

[16, 3]

[4, 3]*

[, 1]

1, 3

(3, 1)

[18, 3]

[9, 5]*

[14, 5]

1, 3, 5

(3,1),(5,3)

[18, 3]

[8, 4]*

1,3,5,4

(3,1),(5,3),
(4,5)

[18,3]*

1,3,5,4, 6

(3,1),(5,3),
(4,5),(6,4)

1,3,5,4,6,2

(3,1),(5,3),
(4,5),(6,4),
(2,3)

BI TP CHNG 5
1. Cho th sau:

Hy biu din th bng


a). Ma trn k
b). Danh sch k
2. Cho th sau

Hy biu din th bng


c) Ma trn trng s b) Danh sch k

94

Nguyn Ch Trung Nguyn Th Thu Thy


3. Cho cc th

Hy minh ha cc bc ca thut ton


a) Tm kim theo chiu su
b) Tm kim theo chiu rng
4. Cho th

Nu cch sp xp th t cc nh do thut ton Topological-Sort to ra cho hnh trn. Minh ha


thut ton.
5. Cho th

Xc nh cc thnh phn lin thng mnh ca th.

95

Phn tch thit k thut ton v nh gi phc tp gii thut

CC CHUYN MN HC
1. Hash table

10. Deapth First Search, Breadth First Search

2. Balanced Tree

11. Shorted Path (ng i ngn nht)

3. B Tree

12. Minimum Spanning Tree (cy khung ti thiu)

4. Red Black Trees

13. Flow Network (lung trong mng)

5. AVL Trees

14. Topological Sort

6. Splay Trees

15. Probabilistic Algorithm

7. Skip List

16. The class P, NP, and NP complete, Co-NP (


phc tp bi ton)

8. Heap
9. Priority Queue

Ghi ch

Chuyn t 1 n 9: cp n cc cu trc d liu nng cao: nh ngha cu trc d


liu tru tng; Cc php ton (khi to, thm, xa, sa, ); Cc ng dng (nhng ng
dng no dng n?). C th tham kho ti liu trn wikipedia.

Chuyn 13: cp n cc ni dung: Lung trong mng; Lung chi ph ti thiu; a


lung;

Chuyn t 10 n 14: Lu cp n cc ni dung: Nu bi ton cn gii quyt;


Cc thut ton * (v d thut ton A*) ; Cc ng dng. Cc chuyn t 1 n 13 c th
tham kho ti liu Ton ri rc ca Nguyn c Ngha (H BK HN).

Chuyn 15: cp n cc ni dung: T tng chung ca thut ton l g? V d


minh ha.

Chuyn 16: cp n vic chng minh phc tp ca bi ton: Th no l lp P


(tn ti thut ton a thc gii)? lp NP? NP-complete? (khng tn ti thut ton a
thc gii); Chng minh mt thut ton thuc lp NP-C. Ch phc tp thut ton
(tnh O(?)) khc vi phc tp bi ton (C th gii c hay khng th gii c).

96

You might also like