You are on page 1of 78

Chuyn :

PHN TCH THIT K THUT TON


PHN 1: THUT TON V PHN TCH THUT TON
I. KHI NIM BI TON V THUT TON
1. Khi nim bi ton
Trong phm vi tin hc, ta c th quan nim bi ton l mt vic no ta mun my tnh
thc hin.
Mt bi ton c m t bi hai thnh phn: tp d liu u vo cho trc (Input) v tp
kt qu ra cn nhn c (Output).
Thut ng mt bi ton c hiu theo ngha ph dng, bi ton c nhiu b d liu khc
nhau.
V d: gii bi ton tm c chung ln nht (UCLN) ca hai s nguyn dng M, N. Thut
ton gii bi ton ny phi p ng vi bt k b gi tr c th ca b d liu vo M, N.
2. Khi nim thut ton:
Vic cho mt bi ton l m t r Input v Output. Vn l lm th no tm ra Ouput?.
chnh l li gii ca bi ton
C nhiu xu hng khc nhau trong vic nghin cu li gii ca cc bi ton. Trong ton
hc c xu hng nghin cu nh tnh, chng minh s tn ti li gii bi ton m khng cn
thit ch ra mt cch tng minh cch tm li gii .Trong vic nghin cu thut ton y,
chng ta quan tm ti cch tng minh tm Output t Input ca bi ton.
C nhiu nh ngha khc nhau v thut ton, di y l mt nh ngha thng dng
Thut ton gii mt bi ton l mt dy hu hn cc thao tc c sp xp theo mt
trnh t xc nh sao cho sau khi thc hin dy thao tc y, t Input ca bi ton, ta nhn c
Output cn tm
3. Cc bc gii bi ton trn my tnh:
a. Xc nh bi ton:
Vic xc nh bi ton chnh l xc nh r hai thnh phn Input, Output v mi lin h gia
chng.
V d: gii bi ton tm c chung ln nht (UCLN) ca hai s nguyn dng M, N.
Input: hai s nguyn dng M, N
Output: UCLN ca M v N

b. Thit k hoc la chn thut ton:


Mt bi ton c th c nhiu thut ton gii. Nhng mt thut ton th ch c th dng
gii quyt cho mt bi ton c th m thi. Vn t ra y nu c nhiu thut ton gii
mt bi ton th ta nn chn thut ton no? D nhin ta s chn thut ton no tt nht. Nhng
mt thut ton th no c cho l tt nht, n c nh gi da trn nhng tiu ch no?
Ty theo bi ton m ta s la chn thut ton theo cc tiu ch sau y:
(1) Tnh hiu qu v thi gian: l thi gian thc hin xong mt bi ton
(2) Tnh hiu qu v khng gian: l dung lng cn thit lu tr cc d liu cn thit khi
x l bi ton
(3) Tnh kh thi khi ci t thut ton: l thut ton c d ci t hay khng, c tn nhiu
cng sc ca ngi lp trnh khng.
V d: i vi mt bi ton ln v s ln gii bi ton l nhiu ln th tiu ch (1) s c
u tin hng u. Nhng i vi bi ton nh v s ln gii bi ton khng nhiu th thng
thng ta s chn tiu ch (3) lm tiu ch c chn u tin
c. Vit chng trnh:
Vit chng trnh l tng hp gia vic la chn cch t chc d liu v s dng ngn ng
lp trnh din t ng thut ton
Cu trc d liu (Data Structures): l cc n v cu trc (construct) ca ngn ng lp
trnh dng biu din cc m hnh d liu, v d nh mng (array), bn ghi (record), tp
(file), xu (string), danh sch lin kt (list linked),
Cc cu trc d liu c la chn khng nhng cn c kh nng biu din c d liu
vo Input v d liu ra Output ca bi ton cn gii m cn cn phi ph hp vi cc thao tc
ca thut ton v ci t c bng ngn ng lp trnh c la chn.
Hai bc b v c thng c thc hin khng tch ri v gn kt cht ch vi nhau rt cht
ch. V c nhng thut ton ch thch ng v hiu qu vi mt cch t chc d liu nht nh.
Nh vy c thut ton tt cha m phi chn c cu trc d liu thch hp, ng thi phi
c k thut ci t chng trnh tt.
d. Kim th v hiu chnh:
Sau khi c vit xong, chng trnh vn cn c th c nhiu li khc cha pht hin c
nn c th khng c kt qu ng. V vy, cn phi kim th tnh ng n ca chng trnh.
C nhiu cch thc hin c iu , cch thng dng l thc hin chng trnh vi mt
s b Input tiu biu ph thuc vo c th ca bi ton m bng cch no ta bit trc
c b kt qu Output tng ng. Cc b Input v Output tng ng ny gi l cc Test.
Trong qu trnh kim th nu pht hin c sai st, ta phi hiu chnh li chng trnh ri th
li. Trn c s nh gi cc li ca chng trnh qua kim th c th xc nh c hoc ngn
ng lp trnh, hoc cu trc d liu thm ch c thut ton la chn l khng ph hp, cn thit
quay li cc cng vic ca bc trc .

e. Vit ti liu
Ti liu trnh by cc ni dung lin quan n m t bi ton, thut ton, cu trc d liu,
thit k chng trnh v hng dn s dng. Ti liu (bao gm c cc ch thch trong chng
trnh) l cn thit khng nhng cho ngi dng c th khai thc tt chng trnh, xut
phng n hon thin chng trnh m cn cho chnh ngi lp trnh hoc ngi c
chng trnh d dng chnh sa, nng cp chng trnh khi cn thit
II. PHN TCH THUT TON
1. phc tp ca thut ton:
Mt trong nhng tiu ch thng c ly nh gi thut ton l thi gian thc hin thut
ton. Vy, lm th no o c thi gian thc hin ca mt chng trnh (m t mt thut
ton)?
a. Dng mu chun
y l cch rt t nhin v thng c s dng. Da vo thi gian thc t thc hin cc
chng trnh vit bng cng mt ngn ng lp trnh cho cc thut ton khc nhau vi cng cc
b d liu vo Input nh nhau, trn cng mt h thng my tnh kt lun thut ton no
nhanh, thut ton no chm. Tuy nhin vic ny cng d mc li v khi thc hin chng trnh,
ngoi yu t thut ton cn cc yu t khc ca h thng, c trng d liu chy th cng c
nh hng n thi gian chy ca chng trnh. V th so snh chnh xc hn cn xy dng
cc b d liu vo Input theo cc mu chun (benchmark) sao cho c th tha nhn mt
chng trnh thc hin tt trn mu chun th c coi l tt trn mi d liu vo.
b. Phn tch thut ton
Mt cch khc nh gi chng trnh (thut ton) l da vo mi cu lnh ca chng
trnh ngun s thc hin bao nhiu ln trn mt tp d liu vo. Phn ln cc mi trng lp
trnh u c b m lnh (statement couter) l cng c thc hin php o .
Mc tiu ca phn tch thut ton khng ch l so snh, nh gi gip cho vic la chn
thut ton tt m cn da vo kt qu phn tch nh gi hiu chnh, ci tin thut ton
c c tt hn. Nhiu chng trnh cho thy, tng thi gian thc hin mt chng trnh ln
thng tiu ph cho nhng phn nh ca chng trnh. V nguyn tc, s cc thao tc tru
tng trong thut ton l rt ln. Tuy nhin thng th tnh nng ca thut ton ch phc thuc
vo mt vi i lng. Khi nh gi thi gian thc hin thut ton ta ch c bit n cc
php ton m s ln thc hin khng t hn cc php ton khc (cha trong cc phn nh ca
chng trnh).
Vic ch n cc php ton c thc hin nhiu ln l iu cn thit khi ci t thut
ton bng chng trnh. V d, ngi lp trnh cn quan tm ln ci tin cc vng lp
trong v cc php ton trong l cc php ton c thc hin lp li nhiu ln nht.
Cch nh gi thi gian thc hin thut ton c lp vi h thng my tnh dn ti khi
nim phc tp ca thut ton. Thi gian thc hin thut ton ph thuc rt nhiu yu t.
Mt yu t rt quan trng l kch thc ca d liu vo. D liu cng ln th thi gian thc
hin thut ton cng ln. Ta k hiu T(n) l hm o s lng cc php ton c bn xut hin
khi thc hin thut ton v s nguyn phc tho ngc l kch thc d liu vo
3

2. K php phc tp ca thut ton


Ta c th gi hm T(n) l thi gian thc hin mt thut ton no . Gii s, f(n) v g(n) l
cc hm xc nh dng vi mi n. Khi ta ni phc tp tnh ton ca thut ton c thi
gian thc hin l T(n) l:
Hm O ln (c l ln): O(g(n)) nu tn ti cc hng s phan vn mnh v n0 sao cho
T(n) c.g(n) vi mi n n0 v gi l k php ch O ln, hm g(n) c gi l gii hn trn
ca hm T(n).
V d: nu T(n) = n2 + 1 th T(n) = O(n2).
Tht vy, chn c = 2 v n0 = 1, khi mi n 1, ta c:
T(n) = n2 + 1 2n2 = 2g(n)
3. Cc cch xc nh phc tp ca thut ton
a. Quy tc hng s
Nu mt thut ton T c thi gian thc hin T(n) = O (c1f(n)) vi c1 l mt hng s dng
th c th coi thut ton T c phc tp tnh ton l O (f(n)).
Tht vy, v T(n) = O(c1f(n)) nn tn ti c0 > 0 v n0 >0 T(n) c0.c1f(n) vi mi n n0.
Chn c = c0.c1, vi mi n > n0 ta c T(n) cf(n). Vy quy tc hng s l ng.
Nh vy, hng s y khng quan trng.
b. Quy tc cng
Gi thit, thut ton gm hai phn lin tip T1 v T2. Khi nu phn T1 ca thut ton c
thi gian thc hin l T1(n) = O(f(n)) v phn T2 c thi gian thc hin l T2(n) = O(g(n)), khi
thi gian thc hin thut ton s l
T1(n) + T2(n) = O(f(n) + g(n))
Chng minh: V T1(n) = O(f(n)) nn tn ti cc hng s c1 v n1 sao cho
T1(n) c1.f(n) vi mi n n1
V T2(n) = O(g(n)) nn tn ti cc hng s c2 v n2 sao cho
T2(n) c2.f(n) vi mi n n2
Chn c = max(c1, c2) v n0 = max(n1, n2) ta c vi mi n n0:
T(n) = T1(n) + T2(n) c1f(n) + c2g(n) cf(n) + cg(n) = c(f(n) + g(n))
l iu phi chng minh
c. Quy tc ly max
Nu thut ton T c thi gian thc hin T(n) = O(f(n) + g(n)) th c th coi thut ton T c
phc tp tnh ton l O(max(f(n),g(n))).
Tht vy, v T(n) = O(f(n)+g(n)) nn tn ti n0 > 0 v c > 0 T(n) cf(n) + cg(n), vi mi
n n0
Vy T(n) cf(n) + cg(n) 2c.max(f(n), g(n)) vi mi n n0
4

T suy ra iu cn chng minh


d. Quy 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 s l: O(f(n).g(n))
Chng minh: Thi gian thc hin k(n) ln on thut ton T s l k(n)T(n), theo nh ngha:
-

Tn ti ck0 v nk>0 k(n)ckg(n) vi mi nnk

Tn ti cT0 v nT>0 T(n)cTf(n) vi mi nnT

Vy vi mi n max(nT,nk) ta c k(n)T(n) ckcT(f(n)g(n)). T suy ra iu cn chng


minh.
4. Cc thut ng thng dng cho phc tp thut ton
phc tp
O(1)
O(logn)
O(n)
O(nlogn)
O(nb)
O(bn) (b>1)
O(n!)
5. nh gi thi gian thc hin chng trnh

Thut ng
phc tp hng s
phc tp lgarit
phc tp tuyn tnh
phc tp nlogn
phc tp a thc
phc tp hm m
phc tp giai tha

Trc ht, ta phn loi cu lnh trong ngn ng lp trnh bc cao. C cc loi cu lnh
thng dng sau:
- Cu lnh n thc hin mt thao tc, v d cu lnh gn n gin (khng cha li gi
hm trong biu thc), c/ghi n gin, cu lnh chuyn iu khin n gin (break, goto,
continue, return)
-

Cu lnh hp thnh l dy cc cu lnh to thnh mt khi c lp

Cu lnh r nhnh dng IFTHEN (cn gi l cu lnh iu kin IF)

Cc cu lnh lp

nh gi thi gian thc hin chng trnh, cn thit phi bit nh gi thi gian thc hin
cc cu lnh. lm iu ta p dng cc quy tc tnh phc tp thut ton trnh by
mc trn, c th:
-

Thi gian thc hin mt lnh n khng ph thuc vo kch thc d liu nn s l O(1)

max

Thi gian thc hin mt cu lnh hp thnh s c tnh theo quy tc cng v quy tc

- Thi gian thc hin cu lnh IF: gi s thi gian thc hin hai cu lnh thnh phn dng
l f(n) v g(n) th thi gian thc hin ca cu lnh IF s c tnh theo quy tc max nn s l
O(max(f(n),g(n))).
5

- Thi gian thc hin cu lnh lp s p dng theo quy tc nhn, ngha l O(k(n)f(n)),
trong k(n) l s ln lp v f(n) l thi gian thc hin cu ln bn trong vng lp
6. Mt s v d
Phn tch thi gian thc hin ca cc on chng trnh sau:
V d 1:
VAR i, j, n: longint;
s1, s2: longint;
BEGIN
{1} Readln(n);
{2} s1:=0;
{3} FOR i:=1 TO n DO
{4}
s1:=s1+i;
{5} s2:=0;
{6} FOR j:=1 TO n DO
{7}
s2:=s2+j*j;
{8} writeln(1+2++,n,=,s1);
{9} writeln(1^2+2^2+..+,n,^2=,s2);
END.

Thi gian thc hin chng trnh ph thuc vo n


Cc cu lnh {1}, {2}, {4}, {5}, {7}, {8}, {9} c thi gian thc hin l O(1)
Cu lnh {3} thi gian thc hin l O(n). Cu lnh {6} thi gian thc hin l O(n)
Vy thi gian thc hin ca chng trnh l
Max(O(1), O(1), O(n), O(1), O(n),O(1), O(1)) = O(n)
V d 2:
{1}
{2}
{3}
{4}
{5}
{6}

c:=0;
FOR i:=1 TO 2*n DO
c:=c+1
FOR i:=1 TO n DO
FOR j:=1 TO n DO
c:=c+1

Cu lnh {1}. {3}, {6} c thi gian thc hin l O(1). Lnh lp FOR {2} c s ln lp l 2n
nn lnh {2} c thi gian thc hin l O(n). Lnh lp 5 c s ln lp l n nn lnh {5} c thi
gian thc hin l O(n). Lnh lp {4} c s ln lp l n v n ch cu lnh lp {5} nn thi c
thi gian thc hin l O(n2).
Vy thi gian thc hin ca on chng trnh trn l
Max(O(1), O(n), O(n2)) = O(n2)
6

V d 3:
{1}
{2}
{3}

FOR i:=1 TO n DO
FOR j:=1 TO i DO
c:=c+1

Cu lnh {3} c thi gian thc hin l O(1)


Khi i=1, j chy t 1 n 1 nn lnh lp For {2} lp 1 ln
Khi i:=2, j chy t 1 n 2 nn lnh lp For {2} lp 2 ln

Khi i:=n, j chy t 1 n n nn lnh lp For {2} lp n ln


Nh vy lnh {3} c lp 1+2+3+n=n(n+1)/2 ln, do lnh {1} c thi gian thc hin
l O(n2)
Vy thi gian thc hin on chng trnh trn l O(n2)
BI TP
Phn tch thi gian thc hin ca cc on chng trnh sau:
Cu 1.
Readln(n);
S:=0;
i:=1;
WHILE i<n DO
BEGIN
Readln(X);
S:= S + X;
Inc(i);
END;
M:= S/n;
Writeln(M);

Cu 2.
FOR i := 1 TO n DO
FOR j := 1 TO n DO
BEGIN
c[i,j] := 0;
FOR k := 1 TO n DO
c[i,j] := c[i,j] + a[i,k] * b[k,j];
END;
7

Cu 3.
j:=n;
d:=0;
REPEAT
j:=j div 2;
d:=d+1;
UNTIL j<1

Cu 4.
FOR i:=1 TO n DO
IF i mod 2 =0 THEN c:=c+1
ELSE c:=c+2;

Cu 5.
FOR i:=1 TO n DO
IF i mod 2 = 0 THEN
FOR j:=1 TO n DO DO c:=c+1;

Cu 6.
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;

PHN 2: THIT K THUT TON


I. THUT TON DUYT
Nh chng ta bit cc thut ton c xy dng gii quyt vn nh vo mt quy
tc no . Tuy nhin c nhng vn khng theo quy tc, v khi phi dng phng php
vt cn.
Vt cn, duyt, quay lui l mt s tn gi tuy khng ng ngha nhng cng ch mt
phng php rt n gin trong tin hc: tm nghim ca mt bi ton bng cch xem xt tt c
cc phng n c th. i vi con ngi phng php ny thng l khng kh thi v s
phng n cn kim tra qu ln. Tuy nhin i vi my tnh, nh tc x l nhanh, my tnh
c th gii rt nhiu bi ton bng phng php vt cn.
u im ln nht ca phng php vt cn l lun m bo tm ra nghim chnh xc. Ngoi
ra phng php vt cn cn c mt s u im so vi cc phng php khc l i hi rt t b
nh v ci t n gin. Hn ch duy nht ca phng php ny l thi gian thc thi rt ln,
phc tp thng bc m. Do vt cn thng ch p dng tt vi cc bi ton c kch thc
nh.
Mc d vy, khng nn coi thng phng php ny. Rt nhiu bi ton ch c thut ton
duy nht l vt cn. Trong mt s tnh hung khc, chng hn nh thi gian lp trnh hn ch
th vt cn c th coi nh mt gii php tnh th. Rt nhiu trng hp ta c th s dng vt
cn theo phng chm: th mt 1ting vit mt chng trnh vt cn chy trong trong 4
ting, cn hn mt 4 ngy tm thut ton hiu qa chng trnh chy trong 1 pht.
Chng ta khng cp k v vic p dng phng php vt cn i vi cc bi ton n
gin nh tm gi tr nh nht, ln nht hay tm tt c cc s nguyn t ca mt tp hp. Chng
ta s xem xt thut ton vt cn i vi cc bi ton tm cu hnh t hp v bi ton ti u t
hp, l lp cc bi ton rt tng qut v ph bin trong tin hc
1. Phng php:
Trong nhiu bi ton, vic tm nghim c th quy v vic tm vect hu hn (x1,x2,,x n,
), di vect c th xc nh trc hoc khng. Vect ny cn phi tha mn mt s iu
kin ty thuc vo yu cu ca bi ton. Cc thnh phn xi c chn ra t tp hu hn Ai.
Ty tng trng hp m bi ton c th yu cu: tm mt nghim, tm tt c cc nghim
hoc m s nghim.
T tng ca thut ton quay lui vt cn nh sau: Ta xy dng vect nghim tng bc, bt
u t vecto khng (). Thnh phn u tin x1 c chn ra t tp S1=A1. Gi s chn c
cc thnh phn x1, x2, , xi. Lp li qu trnh trn tip tc m rng nghim. Nu khng th
chn c thnh phn xi+1 (Si+1 rng) th ta quay li chn mt phn t khc ca Si cho xi. Nu
khng cn mt phn t no khc ca Si ta quay li chn mt phn t khc ca Si-1 lm xi-1 v
c th tip tc. Trong qu trnh m rng nghim, ta phi kim tra nghim ang xy dng l
nghim ca bi ton cha. Nu ch cn tm mt nghim th khi gp nghim ta dng li. Cn nu
cn tm tt c cc nghim th qu trnh ch dng li khi tt c cc kh nng la chn ca
thnh phn ca vect nghim c vt cn.
Thut ton duyt thng c dng m hnh quy sau:
9

PROCEDURE Try(i)
BEGIN
<xc nh Si>
FOR xi Si DO BEGIN
<ghi nhn thnh phn th i>
IF (tm thy nghim) THEN <a ra nghim>
ELSE Try(i+1)
<loi phn t th i>
END;
END;

Hoc ta c th s dng m hnh quy quay lui nh sau:


PROCEDURE Try(i)
BEGIN
FOR (mi phng n chn) DO
IF (chn c) THEN
BEGIN
<Thc hin bc i th i>
IF (thnh cng) THEN (thng bo kt qu)
ELSE Try(i+1)
<Hy bc i th i>
END;
END;

Vi m hnh tng qut trn ta c ba vn trng tm cn lm l:


- Tm cch biu din nghim ca bi ton di dng mt dy cc i tng c chn
dn tng bc;
- Xc nh tp Si cc ng c vin c chn lm thnh phn t i ca nghim. Chn cch
thch hp biu din Si;
-

Tm cc iu kin mt vect c chn lm nghim bi ton.

2. Gii cc bi ton cu hnh t hp bng thut ton duyt


a. T hp:
Mt t hp chp k ca n l mt tp con k phn t ca tp n phn t.
S lng t hp chp k ca n c tnh theo cng thc sau:

C kn

n!
k!(n k)!

Chng hn tp {1,2,3,4} c cc t hp chp 2 l: {1,2}, {1,3, {1,4, {2,3}, {2,4}, {3,4}. V


trong tp hp cc phn t khng phn bit th t nn tp {1,2} cng l tp {2,1} v do , ta
coi chng ch l mt t hp.
Bi ton t ra cho chng ta l hy xc nh tt c cc t hp chp k ca tp n phn t.
n gin ta ch xt bi ton tm cc t hp ca tp cc s nguyn t 1 n n. i vi mt tp
10

hu hn bt k, bng cch nh s th t ca cc phn t, ta cng a c v bi ton i vi


tp cc s nguyn t 1 n n.
Nghim cn tm ca bi ton tm cc t hp chp k ca n phn t phi tho mn cc iu
kin sau:
-

L mt vector x =(x1,x2,xk)

xi ly gi tr trong tp {1,2,n}

Rng buc: xi<xi+1 vi mi gi tr i t 1 n k-1.

C rng buc 3 l v tp hp khng phn bit th t phn t nn ta sp xp cc phn t theo


th t tng dn.
gii quyt bi ton ny ta cn xc nh 3 vn quan trng
-

Biu din nghim: xy dng mt mng x biu din t hp

- Xc nh tp Si: l t xi-1+1 n (n-k+i). iu ny ng cho c trng hp i = 1 ta


thm vo x0=0
-

iu kin mt vect c chn l: x[i1]< x[i] nki.

Di y l ton b chng trnh gii bi ton trn. n gin, cc gi tr n,k c nhp


t bn phm v cc t hp c in ra mn hnh. Ngi c c th ci tin chng trnh
nhp/xut ra file.
PROGRAM tohop;
USES crt;
CONST
max = 20;
VAR
n,k : integer;
x : array[0..max] of integer;
{===============================}
PROCEDURE Input;
BEGIN
clrscr;
write('n,k = '); readln(n,k);
writeln('Cac TO hop chap ',k,' cua ',n);
END;
{===============================}
PROCEDURE print;
VAR
i : integer;
BEGIN
FOR i := 1 TO k DO write(' ',x[i]);
writeln;
END;
{===============================}
PROCEDURE try(i:integer);
VAR j : integer;
BEGIN
11

FOR j := x[i-1]+1 TO n-k+i DO


BEGIN
x[i] := j;
IF i = k THEN Print ELSE try(i+1);
END;
END;
{===============================}
PROCEDURE solve;
BEGIN
x[0] := 0;
try(1);
END;
{===============================}
BEGIN
Input;
solve;
END.

b. Chnh hp lp:
Chnh hp lp chp k ca n l mt dy k thnh phn, mi thnh phn l mt phn t ca tp n
phn t, c xt n th t v khng yu cu cc thnh phn khc nhau.
S lng chnh hp lp chp k ca n c tnh theo cng thc sau:
k

An n k
Mt v d d thy nht ca chnh hp lp l cc dy nh phn. Mt dy nh phn di m l
mt chnh hp lp chp m ca tp 2 phn t {0,1}. Chng hn 101 l mt dy nh phn di
3. Ngoi ra ta cn c 7 dy nh phn di 3 na l 000, 001, 010, 011, 100, 110, 111. V c
xt th t nn dy 101 v dy 011 l 2 dy khc nhau.
Nh vy, bi ton xc nh tt c cc chnh hp lp chp k ca tp n phn t yu cu tm
cc nghim nh sau:
-

L mt vector x =(x1,x2,xk)

xi ly gi tr trong tp {1,2,n}

Khng c rng buc no gia cc thnh phn.

Ch l cng nh bi ton tm t hp, ta ch xt i vi tp n s nguyn t 1 n n. Nu tp


hp cn tm chnh hp khng phi l tp cc s nguyn t 1 n n th ta c th nh s cc
phn t ca tp a v tp cc s nguyn t 1 n n
Do khng c rng buc no gia cc thnh phn nn i vi bi ny ch cn dng mt mng
x lu nghim
Di y l chng trnh
PROGRAM Chinhhoplap;
USES crt;
CONST max = 20;
VAR
12

n : integer;
x : array[1..max] of integer;
{===============================}
PROCEDURE Input;
BEGIN
clrscr;
write('n = '); readln(n);
writeln('Cac day nhi phan DO dai ',n);
END;
{===============================}
PROCEDURE print;
VAR i : integer;
BEGIN
FOR i := 1 TO n DO write(' ',x[i]);
writeln;
END;
{===============================}
PROCEDURE try(i:integer);
VAR j : integer;
BEGIN
FOR j := 0 TO 1 DO
BEGIN
x[i] := j;
IF i = n THEN Print ELSE try(i+1);
END;
END;
{===============================}
PROCEDURE solve;
BEGIN
try(1);
END;
{===============================}
BEGIN
Input;
solve;
END.

c. Chnh hp khng lp:


Khc vi chnh hp lp l cc thnh phn c php lp li, tc l c th ging nhau, chnh
hp khng lp chp k ca tp n phn t cng l mt dy k thnh phn ly t tp n phn t c
xt th t nhng cc thnh phn khng c php ging nhau.
S lng chnh hp khng lp chp k ca n c tnh theo cng thc sau:

A kn

n!
(n k)!

Chng hn c n ngi, mt cch chn ra k ngi xp thnh mt hng l mt chnh hp


khng lp chp k ca n.
13

Mt trng hp c bit ca chnh hp khng lp l hon v. Hon v ca mt tp n phn t


l mt chnh hp khng lp chp n. Ni mt cch trc quan th hon v ca tp n phn t l
php thay i v tr ca cc phn t (do mi gi l hon v).
Nghim ca bi ton tm cc chnh hp khng lp chp k ca tp n s nguyn t 1 n n l
cc vector x tho mn cc iu kin:
-

x c k thnh phn: x = (x1,x2,xk)

Cc gi tr xi ly trong tp {1,2,..n}

Rng buc: cc gi tr xi i mt khc nhau, tc l xixj vi mi ij.

Chnh hp khng lp yu cu cc phn t phi khc nhau. m bo iu , ngoi mng


x, ta s dng thm mt cu trc d liu na l mng d nh du. Khi mt gi tr c chn,
ta nh du gi tr , v khi chn, ta ch chn cc gi tr cha nh du. Mng d s l "trng
thi" ca thut ton.
Di y l chng trnh tm ton b hon v ca n s nguyn t 1 n n
PROGRAM Hoanvi;
USES crt;
CONST max = 20;
VAR n : integer;
x,d : array[1..max] of integer;
{===============================}
PROCEDURE Input;
BEGIN
clrscr;
write('n = '); readln(n);
writeln('Cac hoan vi cua day ',n);
END;
{===============================}
PROCEDURE print;
VAR i : integer;
BEGIN
FOR i := 1 TO n DO write(' ',x[i]);
writeln;
END;
{===============================}
PROCEDURE try(i:integer);
VAR j : integer;
BEGIN
FOR j := 1 TO n DO
IF d[j] = 0 THEN
BEGIN
x[i] := j; d[j] := 1;
IF i = n THEN Print ELSE try(i+1);
d[j] := 0;
END;
END;
{===============================}
14

PROCEDURE solve;
BEGIN
try(1);
END;
{===============================}
BEGIN
Input;
solve;
END.

3. Bi ton 8 qun hu
Yu cu bi ton: Cho bn c vua nxn. Hy xp n con hu ln bn c sao cho khng con
no khng ch con no. Hai 2 con hu khng ch nhau nu chng trn cng mt hng, mt
ct hoc mt ng cho.
Chng hn khi n =8 ta c mt cch t sau, cc en l cc v tr t hu:

chuyn bi ton ny v dng chun ca bi ton tm cu hnh t hp, ta c c nhn xt:


mi con hu phi trn mt hng v mt ct. Do ta coi con hu th i hng i v nu bit
x[i] l ct t con hu th i th ta suy ra c li gii. Vy nghim ca bi ton c th coi l
mt vector x gm n thnh phn vi ngha:
-

Con hu th i c t hng i v ct x[i].

x[i] ly gi tr trong tp {1,2n}

- Rng buc: cc gi tr x[i] khc nhau tng i mt v khng c 2 con hu trn cng
mt ng cho.
ci t bi ton ny, chng ta s phn tch chi tit v cc rng buc trn.
Rng buc th nht l cc gi tr x[i] phi khc nhau. Ta c th dng mt mng nh du
nh thut ton hon v m bo iu ny.
Rng buc th 2 l cc con hu khng c nm trn cng mt ng cho chnh v ph.
Ta d dng nhn ra rng 2 v tr (x1,y1) v (x2,y2) nm trn cng ng cho chnh nu:
x1y1=x2y2=const.
Tng t, 2 v tr (x1,y1) v (x2,y2) nm trn cng ng cho ph nu:
x1y1=x2y2=const

15

Do , con hu i t ti v tr (i,x[i]) v con hu j t ti v tr (j,x[j]) phi tho mn rng


buc:
ix[i] jx[j] v i+x[i] j+x[j] vi mi ij
Ta c th vit ring mt hm Ok kim tra cc rng buc . Nhng gii php tt hn l
dng thm cc mng nh du m t rng mt ng cho chnh v ph c mt con hu
khng ch. Tc l khi ta t con hu i v tr (i,j), ta s nh du ng cho chnh i-j v
ng cho ph i+j.
Nh vy v cu trc d liu, ta dng 4 mng:
-

Mng x vi ngha: x[i] l ct ta s t con hu hng th i.

- Mng cot vi ngha: cot[j]=1 nu ct j c mt con hu c t, ngc li th


cot[j]=0.
- Mng dcc vi ngha: dcc[k]=1 nu ng cho chnh th k c mt con hu c
t, tc l ta t mt con hu ti v tr (i,j) m ij=k; ngc li th dcc[k]=0.
- Tng t ta dng mng dcp vi ngha: dcp[k]=1 nu ng cho ph th k c mt
con hu c t.
Di y l chng trnh
CONST n=8;
TYPE vector = array[1..n] of longint;
VAR cot:array[1..n] of longint;
Dcc:array[1-n..n-1] of longint;
Dcp:array[1+1..n+n] of longint;
X:vector;
PROCEDURE print;
VAR i:longint;
BEGIN
FOR i:=1 TO n DO write(x[i],);
Writeln;
END;
PROCEDURE xephau(i:longint);
VAR j:longint;
BEGIN
FOR j:=1 TO n DO
IF (cot[j]=0) and (dcc[i-j]=0) and (dcp[i+j]=0) THEN
BEGIN
X[i]:=j;
Cot[j]:=1;
Dcc[i-j]=1;
Dcp[i+j]:=1;
IF j=n THEN print ELSE xephau(j+1);
Cot[j]:=0;
Dcc[i-j]:=0;
Dcp[i+j]:=0;
END;
END;
16

BEGIN
Fillchar(cot,sizeof(cot),0);
Fillchar(dcc,sizeof(dcc),0);
Fillchar(dcp,sizeof(dcp),0);
Xephau(1);
Readln;
END;

Bi ny c tt c 92 nghim. Mt trong nhng nghim l (1, 5, 8, 6, 3, 7, 2, 4)


BI TP
Cu 1. Bi ton t p
Tm tt c cc t p di n
Mt t p l mt xu di n ch gm cc k t A,B,C m khng c 2 xu con lin tip
no ging nhau.
Chng hn ABAC l mt t p di 4, BABCA l mt t p di 5.
Cu 2. Bi ton rt tin t ng
Mt my ATM hin c n (n<=20) t tin c mnh gi t1, t2, .., tn. Hy a ra mt cch tr
vi s tin ng bng S, nu khng th tr ng bng S th thng bo khng chn c
Cu 3. Bi ton xp ba l
C mt bal c ti trng m v n vt, vt i c trng lng wi v c gi tr vi. Hy la
chn cc vt cho vo bal sao cho tng trng lng ca chng khng qu M v tng gi tr
ca chng l ln nht.
Cu 4. Bi ton ngi du lch
C n thnh ph, d[i,j] l chi ph di chuyn t thnh ph i n thnh ph j. (Nu khng c
ng i th d[i,j] = ). Mt ngi mun i du lch qua tt c cc thnh ph, mi thnh ph
mt ln ri tr v ni xut pht sao cho tng chi ph l nh nht. Hy xc nh mt ng i
nh vy.
Cu 5. Bi ton m i tun
Cho mt bn c c kch thc nxn (n>=3). Mt con m di chuyn theo lut c vua c t
trong 1 vi ta u l (x1, y1). Hy tm mt ng i vi n2-1 bc i sao cho trn mi
trn bn c u c m nhy n ng 1 ln
Cu 6. Vit chng trnh lit k tt c cc xu nh phn c ng n ch s (n>=3) sao cho
khng c xu con 101
Cu 7. C n cp v chng. Hy xp h vo 1 bn trn gm 2n chic gh sao cho
- Khng c gh tha
- Nam n ngi xen k
- V chng khng c ngi cnh nhau
17

II. THUT TON SP XP


1. Tm quan trng ca bi ton sp xp:
Sp xp mt danh sch cc i tng theo mt th t no l mt bi ton thng c
vn dng trong cc ng dng tin hc. V d ta cn sp xp danh sch th sinh theo tn vi th
t Alphabet, hoc sp xp danh sch sinh vin theo im trung bnh vi th t t cao n thp.
Mt v d khc l khi cn tm kim mt i tng trong mt danh sch cc i tng bng gii
thut tm kim nh phn th danh sch cc i tng ny phi c sp xp trc .
Tm li sp xp l mt yu cu khng th thiu trong khi thit k cc phn mm. Do
vic nghin cu cc phng php sp xp l rt cn thit vn dng trong khi lp trnh.
2. Sp xp trong v sp xp ngoi
Sp xp trong l s sp xp d liu c t chc trong b nh trong ca my tnh, ta
c th s dng kh nng truy nhp ngu nhin ca b nh v do vy n thc hin rt nhanh.
Sp xp ngoi l s sp xp c s dng khi s lng i tng cn sp xp ln khng th
lu tr trong b nh trong m phi lu tr trn b nh ngoi. C th l ta s sp xp d liu
c lu tr trong cc tp tin.
3. Pht biu bi ton:
Gi s cc i tng cn c sp xp l cc mu tin gm mt hoc nhiu trng. Mt
trong cc trng c gi l kha sp xp (key), kiu ca n l mt kiu c quan h th t
(nh cc kiu s nguyn, s thc, chui k t...).
Danh sch cc i tng cn sp xp s l mt mng ca cc mu tin va ni trn. Mc
ch ca vic sp xp l t chc li cc mu tin sao cho cc kha ca chng c sp th t
tng ng vi quy lut sp xp.
V d: Cho mng a cc i tng, cn sp xp li cc thnh phn (phn t) ca mng a
nhn c mng (dy) a mi vi cc phn t c gi tr kha tng dn:
a[1].key a[2].key a[n].key
trnh by cc v d minh ha chng ta s dng PASCAL lm ngn ng th hin v s
dng khai bo sau:
CONST Max = 1000;
TYPE Object = Record
Key : KeyTYPE;
OtherFields : OtherTYPE;
END
Tarray = aray [1..Max]of Object
VAR a: Tarray;
n:longint;
PROCEDURE Swap(VAR x,y:Object);
VAR temp : Object;
BEGIN
temp := x; x := y; y := temp;
END;

Cn thy rng th tc Swap c thi gian thc hin l O(1)


18

4. Cc thut ton sp xp n gin:


a. Sp xp ni bt (sp xp tro i - Bubble Sort):
* tng: Chng ta tng tng rng cc mu tin c lu trong mt mng dc, qua qu
trnh sp xp, mu tin no c kha nh s c ni ln trn. Chng ta duyt tan mng, t
di ln trn. Nu hai phn t cnh nhau m khng ng th t tc l nu phn t nh hn
li nm di th phi cho n ni ln bng cch i ch hai phn t ny cho nhau. Vic ny
lp li cho n khi khng cn phn t no ng sai th t.
* M t c th:
- Lt th nht: Xt cc phn t t a[n] n a[2], vi mi phn t a[j], so snh kho ca n
vi kho ca phn t a[j-1] ng ngay trc n. Nu kho ca a[j] nh hn kho ca a[j-1] th
hon i a[j] v a[j-1] cho nhau. Sau lut th nht phn t nh c kha nh nht s ni ln v
tr th nht
- Lt th 2: Xt cc phn t t a[n] n a[3], v lm tng t nh trn. Sau lt th 2
phn t c kha nh th 2 s ni ln v tr th 2

- Lt th n-1: th dy c sp xp xong
V d: Sp xp mng gm 10 mu tin c kha l cc s nguyn: 5, 6, 2, 2, 10, 12, 9, 10, 9
v 3
Bng sau ghi li cc gi tr kho tng ng vi tng lt thc hin thut ton trn.
Kha

a[1] a[2]

a[3] a[4] a[5] a[6]

a[7] a[8]

a[9] a[10]

Ban u

10

12

10

Lt 1

10

12

10

10

12

10

10

12

10

10

10

12

10

10

12

10

10

12

10

10

12

10

10

12

10

12

10

12

Lt

Lt 2
Lt 3
Lt 4
Lt 5
Lt 6
Lt 7
Lt 8
Lt 9
Kt qu

10

19

* Chng trnh:
PROCEDURE BubbleSort;
VAR i,j: integer;
BEGIN
FOR i := 1 TO n-1 DO
FOR j := n DOWNTO i+1 DO
IF a[j].key < a[j-1].key THEN
Swap(a[j],a[j-1]);
END;

* nh gi phc tp:
S php ton so snh a[j].key > a[j-1].key c dng nh gi hiu sut v mt thi gian
cho thut ton sp xp ni bt. Ti lt th i cn n i php so snh. Nh vy tng s php so
snh cn thit l:
n 1

T(n) (n i) (n 1) (n 2) ... 1
i 1

n(n 1)
O( n 2 )
2

Vy thut ton c phc tp l T(n) = O(n 2 )


* Mt cch ci t khc ca thut ton trn cng cho phc tp O(n2)
FOR i := 1 TO n-1 DO
FOR j := i+1 TO n DO
IF a[j].key < a[i].key THEN
Swap(a[j],a[i]);

b. Sp xp chn (Selection Sort):


* tng: Tm phn t c kha nh nht trong dy sau tro i n vi phn t u tin
ca dy. Sau li tip tc tm phn t c kha nh nht (tr phn t u tin) ri tro i vi
phn t th 2. Vic ny lp li cho n khi khng cn phn t tro i.
* M t c th:
- u tin chn phn t c kha nh nht trong n phn t t a[1] n a[n] v hon v n vi
phn t a[1].
- Chn phn t c kha nh nht trong n-1phn t t a[2] n a[n] v hon v n vi a[2].
- Tng qut bc th i, chn phn t c kho nh nht trong n-i+1 phn t t a[i] n a[n]
v hon v n vi a[i].
- Sau n-1 bc ny th mng c sp xp.
V d: Sp xp mng gm 10 mu tin c kha l cc s nguyn: 5, 6, 2, 2, 10, 12, 9, 10, 9
v 3

20

Bng sau ghi li cc gi tr kho tng ng vi tng lt thc hin thut ton trn.
Kha
Lt
Ban u
Lt 1
Lt 2
Lt 3
Lt 4
Lt 5
Lt 6
Lt 7
Lt 8
Lt 9
Kt qu

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
5
2

6
6
2

2
5
5
3

2
2
6
6
5

10
10
10
10
10
6

12
12
12
12
12
12
9

9
9
9
9
9
9
12
9

10
10
10
10
10
10
10
10
10

10

9
9
9
9
9
9
9
12
12
10
10

3
3
3
5
6
10
10
10
10
12
12

* Chng trnh:
PROCEDURE SelectionSort;
VAR i,j,LowIndex: integer;
LowKey: KeyTYPE;
BEGIN
{1} FOR i := 1 TO n-1 DO
BEGIN
{2}
LowIndex := i;
{3}
LowKey := a[i].key;
{4}
FOR j := i+1 TO n DO
{5}
IF a[j].key < LowKey THEN
BEGIN
{6}
LowKey := a[j].key;
{7}
LowIndex := j;
END;
{8}
Swap(a[i],a[LowIndex]);
END;
END;

* nh gi phc tp:
Cc lnh: {2}, {3}c thi gian thc hin l O(1).
Vng lp FOR {4} {7} thc hin n-i ln v j chy t i+1 n n, mi ln lp thc hin ht
O(1) thi gian nn n tn O (n-i) thi gian. Mc khc vng lp {1} thc hin n-1 ln nn thi
gian tng cng thc hin chng trnh l

21

n 1

T(n) (n i) (n 1) (n 2) ... 1
i 1

n(n 1)
O( n 2 )
2

c. Sp xp thm dn (sp xp xen - Insertion Sort):


* tng: Ln lt xt cc phn t trong dy, ti mi phn t ang xt ta s chn vo v tr
thch hp trong danh sch cc phn t c xt trc .
* M t c th:
Trc ht ta xem phn t a[1] l mt dy c th t.
- Lt 1, xen phn t a[2] vo danh sch c th t a[1] sao cho a[1], a[2] l mt danh
sch c th t.
- Lt 2, xen phn t a[3] vo danh sch c th t a[1], a[2] sao cho a[1], a[2], a[3] l
mt danh sch c th t.
- Tng qut, lt i, xen phn t a[i+1] vo danh sch c th t a[1],a[2],..a[i] sao cho
a[1], a[2],.. a[i+1] l mt danh sch c th t.
- Phn t ang xt a[j] s c xen vo v tr thch hp trong danh sch cc phn t c
sp trc a[1],a[2],..a[j-1] bng cch so snh kho ca a[j] vi kho ca a[j-1] ng ngay
trc n. Nu kho ca a[j] nh hn kho ca a[j-1] th hon i a[j-1] v a[j] cho nhau v tip
tc so snh kho ca a[j-1] (lc ny a[j-1] cha ni dung ca a[j]) vi kho ca a[j-2] ng
ngay trc n...
- Sau n-1 lt thc hin vic chn th mng c sp xp.
V d: Sp xp mng gm 10 mu tin c kha l cc s nguyn: 5, 6, 2, 2, 10, 12, 9, 10, 9
v 3
Bng sau ghi li cc gi tr kho tng ng vi tng lt thc hin thut ton trn.
Kha
Lt
Ban u
Lt 1
Lt 2
Lt 3
Lt 4
Lt 5
Lt 6
Lt 7
Lt 8
Lt 9

a[1]

a[2]

a[3]

a[4] a[5] a[6] a[7] a[8] a[9] a[10]

5
5
2
2
2
2
2
2
2
2

6
6
5
2
2
2
2
2
2
2

10

12

10

6
5
5
5
5
5
5
3

6
6
6
6
6
6
5

10
10
9
9
9
6

12
10
10
9
9

12
10
10
9

12
10
10

12
10

12

22

* Chng trnh:
PROCEDURE InsertionSort;
VAR i,j: integer;
BEGIN
{1} FOR i := 2 TO n DO
BEGIN
{2}
J := i;
{3}
WHILE (j>1) AND (a[j].key < a[j-1].key) DO
BEGIN
{4}
swap(a[j], a[j-1]);
{5}
j := j-1;
END;
END;
END;

* nh gi phc tp:
Vng lp {1} c i chy t 2 n n nn nu gi T(n) l thi gian sp n phn t th ta c
n 1

T(n) (n i)
i 1

n(n 1)
O( n 2 )
2

5. Thut ton sp xp nhanh (QuickSort):


Chng ta vn xt mng a cc phn t a[1]..a[n]. Gi s x l 1 gi tr kha m ta gi l
cht . Ta phn hoch dy a[1]..a[n] thnh hai mng con "bn tri" v "bn phi". Mng con
"bn tri" bao gm cc phn t c kha nh hn cht, mng con "bn phi" bao gm cc phn
t c kha ln hn hoc bng cht.
Sp xp mng con bn tri v mng con bn phi th mng cho s c sp bi v tt
c cc kha trong mng con bn tri u nh hn cc kha trong mng con bn phi.
Vic sp xp cc mng con bn tri v bn phi cng c tin hnh bng phng php
ni trn.
Mt mng ch gm mt phn t hoc gm nhiu phn t c kha bng nhau th c th t.
sp xp mt dy c ch s t L n H ta tin hnh cc bc nh sau:
- Chn cht x (c th chn ngu nhin hoc nh sn thng l chn x=a[(L+H)div 2])
- Phn hoch mng cho thnh hai mng con a[L]..a[x] v a[x+1]..a[H]. So snh cc phn
t thuc mng bn tri v bn phi vi cht. Cho i chy t L sang phi, j chy t H sang tri;
nu pht hin mt cp ngc th t: i<=j v a[i].key>=a[j].key th phi i ch hai phn t
cho n khi i>j. Lc dy trnh trng: kha cc phn t on L..i < kha ca x; kha ca
cc phn t on j..H >= kha ca x.
- Sp xp mng a[L]..a[j]
- Sp xp mng a[i]..a[H]
Th tc QuickSort(L, H) sau dng sp xp on t L ti H. sp xp dy s, ta gi
QuickSort(1,n).
23

PROCEDURE QuickSort(L, H: longint);


VAR i,j : longint;
x, tmp: object;
BEGIN
i:=L;
j:=H;
x:=a[(L+H) div 2];
REPEAT
WHILE a[i].key < x.key DO inc(i);
WHILE a[j].key > x.key DO inc(j);
IF i<=j THEN
BEGIN
tmp:a[i];
a[i]:=a[j];
a[j]:=tmp;
inc(i);
dec(j);
END;
UNTIL i>j;
IF L<j THEN QuickSort(L,j);
IF i<H THEN QickSort(i, H);
END;

* nh gi phc tp
QuickSort s hot ng rt km trong trng hp dy c sp sn. Khi phi mt n
N ln gi quy v mi ln ch loi c 1 phn t. Thi gian thc hin trong trng hp xu
nht ny l khong N2/2 c ngha l O(N2)
Trong trng hp tt nht phn chia s c hai na dy bng nhau. Khi thi gian thc
hin ca thut ton T(N) s c tnh l
T(N) = 2T(N/2) + N
Hay T(N) NlogN ngha l O(NlogN)
Trong trng hp trung bnh thut ton cng c phc tp khong 2NlogN = O(NlogN).
6. Thut ton sp xp ha nhp (trn) hai ng trc tip (MergeSort):
tng ca thut ton ny bt ngun t vic trn hai dy c sp xp thnh mt dy
mi cng c sp xp.
a. Trn hai dy sp xp:
Bi ton: Cho hai mng A v B c sp xp theo chiu khng gim. T hai mng
cho hy a cc gi tr ca A v B vo mng C m vn m bo trt tr sp xp.
Gi s ta c hai dy sp xp nh sau:
17

32

49

89

06

25

53
24

gii quyt bi ny ta dng hai bin duyt t u mi dy. Ti mi bc, tin hnh so
snh gi tr ca hai phn t ti v tr ca hai bin duyt. Nu phn t no nh hn ta a
phn t xung di dy mi v tng bin duyt tng ng ln 1. Qu trnh c lp li
cho ti khi tt c cc phn t ca hai dy c duyt v xt
M phng thut ton ca v d trn:
Ban u:

Bc 1:

Bc 2:

Bc 3:

Bc 4:

Bc 5:

Bc 6:

25

Bc 7:

Th tc trn hai dy sp xp trn HS t vit.


Ta thy rng thc hin vic sp xp trn th hai dy c trn khng phi l hai dy
ring bit m nm trn cng 1 dy. Hy ni cch khc ta trn hai phn ca mt dy ch
khng phi hai dy ring bit. Ngoi ra kt qu trn li c lu ngay ti dy ban u ch
khng lu ra mt dy khc.
Do vy ta phi ci tin th tc trn hai phn ca mt dy A (vi phn u c ch s t
al n am, phn sau c ch s t am+1 n ar). Dng mt mng tm C lu kt qu trn
sau sao chp vo mng ban u a.
Th tc ny c vit nh sau:
PROCEDURE Merger(VAR A: object; al,am,ar:longint);
VAR i, j, k: longint;
C:object;
BEGIN
i := al; j := am+1; k:= al;
WHILE (i<=am) and (j<=ar) DO
BEGIN
IF A[i]>A[j] THEN BEGIN C[k]:=A[j]; inc(j); END
ELSE BEGIN C[k]:=A[i]; inc(i); END;
inc(k);
END;
WHILE i<=am DO BEGIN C[k]:=A[i]; inc(i); inc(k); END;
WHILE j<=ar DO BEGIN C[k]:=A[j]; inc(j); inc(k); END;
FOR i:=al TO am DO A[i]:=C[i];
END;

b. Ha nhp hai ng trc tip


tng: thc hin vic sp xp ha nhp hai ng trc tip u tin ta coi mi
phn t ca dy l 1 danh sch con gm 1 phn t c sp xp. Tip theo trn tng 2
cp dy con 1 phn t k nhau to thnh cc dy con 2 phn t c sp. Cc dy con 2
phn t c sp ny li c trn vi nhau to thnh dy con 4 phn t c sp. Qu
trnh trn tip tc cho n khi cn duy nht 1 dy con c sp, chnh l dy ban u.
26

V d m phng vic sp xp 1 dy bng thut ton trn

Ta s dng quy vit th tc sp xp trn


PROCEDURE
MegerSort(VAR
A:object;
longint);
VAR mid: longint;
BEGIN
IF R>L THEN
BEGIN
mid:= (L+R) div 2;
MegerSort(A, L, Mid);
MegerSort(A, Mid+1, R);
MegerSort(A, L, Mid, R);
END;
END;

L,

R:

BI TP
Cu 1. Cho mng A[1..N, 1..M] cha cc s nguyn. Hy sp xp li cc gi tr ca cc
trong A sao cho
* A[i,1] A[i,2] A[i,M]
* A[1,j] A[2,j] A[N,j]
D liu: cho file MANG.INP gm N+1 dng
+ Dng 1: cha hai s N v M
+ Dng i+1 (1 i N): ghi M s A[i,1], A[i,2], ..., A[i,N]
Cc s ghi trn cng mt dng cch nhau t nht mt du cch.
Kt qu ghi vo file c tn MANG.OUT
27

V d:
MANG.INP
58
13983245
52416179
43341032
53816354
82121134

MANG.OUT
11111111
22222233
33333344
44445555
66788899

Cu 2. Xt tp F(N) tt c cc s hu t trong on [0,1] vi mu s khng vt qu N


(1<N<=100).
V d, tp F(5):

0 1 1 1 1 3 2 3 4 1
1 5 4 3 2 5 3 4 5 1

Cho trc mt s nguyn dng N, vit chng trnh in ra mi phn s ti gin thuc
F(N) theo th t tng dn ca gi tr.
Cu 3. Cho N (N<=300) on s nguyn [ai, bi] hy tm mt s m s thuc nhiu on
s nguyn nht.
V d, c 5 on [0,10], [2,3], [4,7], [3,5], [5,8], ta chn s 5 thuc 4 on [0,10], [4,7],
[3,5], [5,8].
Cu 4. Cho 2 dy s: A c n phn t, B c m phn t, cc phn t l cc s nguyn x
Tm s lng gi tr trong A m c mt trong B
Yu cu: Vit s lng tm ra c
D liu vo: file AB.IN c dng u l hai s n, m.
T dng th 2 ln lt l cc s ca A sau l cc s ca B. (0<n,m<10^6, |x|<10^9)
Kt qu ra: File AB.OUT gm 1 dng ghi s lng tm c
V d:
AB.IN
34
2567556

AB.OUT
2

Cu 5. qun l nhn s mt tnh n (c khong 1 triu ngi), hy sp xp tui ca dn


c y theo th t t nh n ln. Bit rng tui dn c ch nm trong khong t 1 n
100.
Tui ca dn c c cho vo file T_IN.TXT vit lin tip nhau cch nhau t nht mt
du cch hoc mt du xung dng. Kt qu a ra file T_OUT.TXT
cu trc file
vo nhng c sp xp.
28

V d:
T_IN.TXT
T_OUT.TXT
1 2 20 4 45 62 3
122234445
2 4 55 2 4 5 100
20 45 55 62 100
Cu 6. Ngi ta c N on dy xch (N<=20000), mi on dy xch l mt chui cc mt
xch c ni vi nhau. Cc on dy xch ny tch ri nhau. Mi on c khng qu 20000
mt xch.
Bng cch ct ra mt mt xch, sau hn li, ta c th ni hai dy xch thnh mt on.
Thi gian ct v hn mi mt xch l 1 n v thi gian v c xem l bng nhau vi
mi mt xch.
Nhim v ca bn l phi ni chng li thnh mt on xch duy nht vi thi gian t
nht (hay s mt xch b ct v hn li l t nht).
Input:
D liu cho trong file NOIXICH.IN c cu trc nh sau:
Dng u tin l s N, s on xch.
Nhng dng tip theo ghi N s nguyn dng, s th i l s mt xch
c trong on xch th i (1<= i <= N)
Hai s cnh nhau trn mt dng cch nhau t nht l mt du cch.
Output:
Kt qu ghi vo file NOIXICH.OUT mt s duy nht l s n v thi gian m bn cn
ni N on xch cho.
V d:
NOIXICH.IN
3
47
6

NOIXICH.OUT
2

NOIXICH.IN
4
578
9

NOIXICH.OUT
3

Cu 7. Cho on thng [a0,b0] v mt dy cc on thng [a1,b1], [a2,b2], [a3,b3], ,


[an,bn]. Vi 0<n<106, ai, bi (i= 0, n ) l s nguyn v -109 <ai, bi <109. Tm phn on thng
ring ca on thng [a0,b0] tc l cc im thuc [a,b] nhng khng thuc bt c on
[ai,bi] no vi i= 1, n
Yu cu: Ch ra cc phn on thng ring tm c. Nu khng thng bo khng tm ra.
D liu vo: File DOAN.INP c cc thng tin
-

Dng u tin cha hai s nguyn a0, b0 v s n

Dng th 2 cha cc cp s nguyn dng ai, bi (i= 1, n )


29

D liu ra: File DOAN.OUT c cc thng tin


-

Dng u tin: ghi t Yes hoc No ty theo c tn ti on ring hay khng

T dng th 2 tr i ghi cc on ring nu c (mi on ring trn mt dng)

V d:
DOAN.INP
-3 5 4
-8 -2 8 20 -1 3 4 6

DOAN.OUT
YES
-2 -1
34

30

Chuyn :

PHNG PHP QUY HOCH NG


I. GII THIU
Trong chng trnh Tin hc chuyn ngnh cc trng i hc s phm, phng php
quy hoch ng hu nh khng c nhc n hoc ch gii thiu s qua nn nhiu sinh
vin mi ra trng t ra lng tng khi gp nhng bi ton dng ny trong vic ging dy
mn Tin hc dnh cho cc lp chuyn Tin ph thng. Hn na, ti liu, sch bo vit v
phng php quy hoch ng rt t, hu ht gio vin u t tm ti, nghin cu, t bin
son chng trnh ging dy. My nm gn y B Gio dc v o to mi chnh thc
a ra chng trnh ging dy dnh cho cc lp chuyn Tin cc trng ph thng, trong
quy hoch ng l mt chuyn bt buc trong chng trnh tin hc chuyn ca lp 11
chim mt thi lng ln (15 tit). Nhng bi ton p dng phng php quy hoch ng
cng thng xuyn xut hin trong cc thi hc sinh gii Tin hc cp tnh, cp quc gia,
Olympic cho nn vic nm c kin thc, k nng gii bi ton quy hoch ng ca gio
vin dy chuyn Tin cng nh hc sinh trong cc i tuyn Tin hc l vn rt cn thit.
Bn thn ti l mt gio vin ging dy mn Tin hc trong trng THPT chuyn L Qu
n Khnh Ho, qua nhiu nm tham gia bi dng i tuyn hc sinh gii mn Tin
hc cp trng, cp tnh v qua hai nm ging dy lp chuyn Tin, ti rt ra c mt
s kinh nghim trong vic ging dy chuyn quy hoch ng. Sau y ti xin c gii
thiu mt s kinh nghim trong vic s dng phng php quy hoch ng gii mt s
bi ton trong tin hc.
Quy hoch ng l mt phng php nhm gim thi gian chy ca cc thut ton th
hin cc tnh cht ca cc bi ton con gi u nhau (overlapping subproblem) v cu trc
con ti u (optimal substructure). Phng php quy hoch ng do nh ton hc Richard
Bellman php minh vo nm 1953.
Phng php quy hoch ng (dynamic programming) l mt k thut c p dng
gii nhiu lp bi ton, c bit l cc bi ton ti u. y l phng php c ngha trong
vic gii quyt cc bi ton thc t.
Phng php ny da trn nguyn l ti u ca Bellman: Nu mt dy cc la chn l
ti u th mi dy con ca n cng l ti u.
tng ca phng php: khng phi tnh li kt qu bi ton con ta lu cc kt qu
tnh vo mt bng v ch vic s dng li gi tr ca n khi cn thit.
Khc vi phng php chia tr l k thut tip cn TOP - DOWN (i t trn xung),
phng php quy hoch ng dng k thut BOTTOM - UP (i t di ln):
Xut pht t cc trng hp ring n gin nht, c th tm ngay ra nghim. Bng cch
kt hp nghim ca chng, ta nhn c nghim ca bi ton c ln hn. C th tip tc,
chng ta s nhn c nghim ca bi ton ban u.

31

Trong qu trnh tm nghim ca bi ton t di ln chng ta s s dng bng lu gi


kt qu ca cc bi ton con gii trc . Kt qu ca nhng bi ton con ny c th l
c s cho vic gii bi ton ln hn.
Khi gii mt bi ton con, cn n nghim ca bi ton con nh hn, ta ch cn ly kt
qu t bng, khng cn phi gii li. Chnh v th m gii thut nhn c bng phng
php ny rt c hiu qu.
u im ca phng php quy hoch ng: chng trnh chy nhanh.
Phm vi p dng ca phng php quy hoch ng:
+ Cc bi ton ti u: nh tm xu con chung di nht, bi ton ba l, tm ng i ngn
nht, bi ton tmat vi s php bin i t nht,
+ Cc bi ton c cng thc truy hi.
Hn ch ca phng php quy hoch ng:
Phng php quy hoch ng khng em li hiu qu trong cc trng hp sau:
+ S kt hp li gii ca cc bi ton con cha chc cho ta li gii ca bi ton ln.
+ S lng cc bi ton con cn gii quyt v lu tr kt qu c th rt ln, khng th
chp nhn c.
+ Khng tm c cng thc truy hi.
II. CU TRC CHUNG CA CHNG TRNH CHNH:
BEGIN {Chng trnh chnh}
Chun b: c d liu v khi gn mt s gi tr ban u;
To bng;
Tra bng v ghi kt qu;
END.
III. CC BC GII BI TON QUY HOCH NG:
1. M t bi ton di dng cc bi ton con;
2. Tnh nghim ti u ca bi ton con trong trng hp ring n gin nht;
3. Tm cc cng thc quy biu din nghim ti u ca bi ton ln thng qua nghim
ti u ca cc bi ton con.
4. Tnh nghim ti u t di ln (bottom up) v ghi li cc nghim ti u ca cc bi
ton vo bng.
5. Da vo bng lu kt qu ca cc bi ton tm c tm nghim cho bi ton
ban u.
IV. MT S V D
1. Dy Fibonaci:
bi: In ra mn hnh 20 s hng u ca dy Fibonaci.
32

Bit:

F1 = 1 ;

F2 = 1
vi i > 2

Fi = Fi-1+ Fi-2
Gii thut:

+ Tnh nghim ca bi ton trong trng hp ring n gin nht.


F1 = F2 = 1
+ Tm cc cng thc quy biu din nghim ti u ca bi ton ln thng qua nghim
ti u ca cc bi ton con.
Fi = Fi-1+ Fi-2

vi i > 2

Mi s hng u ca dy Fibonaci c biu din trong bng sau:


i
F[i]

1
1

2
1

3
2

4
3

5
5

6
8

7
13

8
21

9
34

10
55

2. T hp chp k ca n phn t:
bi: Tnh cc phn t ca mng C[n, k] = C nk = s t hp chp k ca n phn t, vi
0 k n 20.
Bit

Cn0 Cnn 1
Cnk Cnk11 Cnk1

Gii thut:
+ Tnh nghim ca bi ton trong trng hp ring n gin nht:
FOR i := 1 TO n DO
BEGIN
C[0, i] := 1;
C[i, i] := 1;
END;

+ Tm cc cng thc quy biu din nghim ti u ca bi ton ln thng qua nghim
ti u ca cc bi ton con.
FOR i := 2 To n Do
FOR j := 1 To i-1 Do C[i, j] := C[i-1,j-1] + C[i-1,j];
n\k
1
2
3
4
5

0
1
1
1
1
1

1
1
2
3
4
5

1
3 1
6 4
10 10

1
5

1
33

3. Dy con khng gim lin tc di nht


bi: Cho dy s nguyn A1, A2, ... , AN. Hy tm dy con B gm mt s phn t lin
tc trong A khng gim di nht.
V d:
Input
9
3 2 1 4 5 8 9 6 7
Output
1 4 5 8 9
Gii thut:
+ Gi T[i] (i=1..N) l di ln nht ca dy con khng gim lin tc khi c i phn t t
1 n i trong A chn, trong phn t th i phi c chn.
+ Trng hp n gin nht gi s dy A ch c 1 phn t th T[1]=1;
+ Cng thc quy:
Vi i 2 ta c:
Nu A[i] A[i-1] th T[i] = T[i-1] + 1, ngc li T[i] = 1.
FOR i:=2 to N do
If A[i] >= a[i-1] then T[i]:=T[i-1] + 1 Else T[i]:=1;
+ Nghim ca bi ton:
Tm v l v tr phn t ln nht trong mng T
v:=1;
FOR i:=1 to N do if T[i] T[v] then v:=i;
Nh vy dy con tm c s c T[v] phn t v phn t cui cng l phn t th v
trong A. Cho nn dy con tm c s l dy gm cc phn t t v T[v] + 1 n phn t
th v ca dy A.
In dy con tm c
FOR i:= v-T[v]+1 to v do write(A[i], );
4. Tm dy con khng gim di nht:
bi: Cho mt dy n s nguyn. Hy loi b khi dy mt s phn t c mt dy
con khng gim di nht. In ra dy con .
V d:
Input:
10
34

6 -7

-3

15

Kt qu tm c dy con khng gim di nht c 4 phn t:


-7 -3

Gii thut:
+ T chc d liu:
Gi A l dy ban u.
Gi B[i] l s phn t ca dy con di nht trong dy c i phn t u tin A[1] .. A[i] v
A[i] c chn lm phn t cui. (i [1, n])
C l dy con khng gim di nht tm c.
Truoc[i] l ch s ca phn t trc phn t i (cc phn t gi li C).
+ Gii thut to bng: (Tnh mng B v mng Truoc)
Trng hp n gin nht: dy ch c 1 phn t, th B[1] := 1;
FOR i = 2 to n Do
Vi mi (j < i) v (A[j] <= A[i]),

tm B[j] ln nht (gi l BMax).

B[i] := Bmax + 1;
Trc[i] := j; {j l ch s ng vi BMax tm c}
Trong v d trn ta c bng sau:
i
1
2
3
4
5
A[i]
2
6
-7
5
8
B[i]
1
2
1
2
3
Truoc[i]
0
1
0
3
4
Dy con khng gim di nht c 4 phn t: -7

6
1
2
3
-3

7
-3
2
3
5

8
5
3
7
9

9
15
4
8

10
9
4
8

PROCEDURE TaoBang;
VAR i, j, BMax, chiSo :byte;
BEGIN
B[1] := 1; truoc[1]:=0;
FOR i := 2 TO n DO
BEGIN
BMax := 0; chiso:=0;
FOR j := i-1 DOwnTO 1 DO
IF (A[j] <= A[i]) and (B[j] > BMax) THEN
BEGIN
BMax := B[j];
chiSo := j;
END;
B[i] := BMax + 1; Truoc[i] := chiSo;
END;
END;
35

+ Tra bng: tm cc phn t ca dy C:


Tm phn t ln nht ca mng B. (ng vi ch s ChiSoMax). Phn t ln nht ca
mng B chnh l s phn t ca dy C.
A[ChiSoMax] l phn t cui ca dy C. Da vo mng Truoc, ta tm cc phn t
cn li trong dy C: tm ngc t cui dy ln u dy.
PROCEDURE TraBang;
VAR chiSo, ChiSoMax, i : byte;
BEGIN
ChiSoMax := n;
FOR i:= n-1 DOwnTO 1 DO
IF B[i] > B[ChiSoMax] THEN ChiSoMax := i;
chiSo := ChiSoMax;
FOR i := B[ChiSoMax] DOwnTO 1 DO
BEGIN
C[i]:= A[chiSo];
chiSo := Truoc[chiSo];
END;
END;

5. Bi ton bal 1:
bi: Cho n mn hng (n 50). Mn th i c khi lng l A[i] (s nguyn). Cn
chn nhng mn hng no b vo mt ba l sao tng khi lng ca cc mn hng
chn l ln nht nhng khng vt qu khi lng W cho trc. (W 100). Mi mn ch
chn 1 hoc khng chn.
Input:
n

A[1] A[2]

A[n]

V d:
4 10
5

Output:
Tng khi lng ca cc mn hng b vo ba l.
Khi lng ca cc mn hng chn.
Trong v d trn:
Tng khi lng ca cc mn hng b vo ba l l 10
Khi lng cc mn hng c chn: 5

Hng gii:
36

+ T chc d liu:
Fx[k, v] l tng khi lng ca cc mn hng b vo ba l khi c k mn hng u tin
chn v khi lng ti a ca ba l l v.
Vi k [1, n], v [1, W].
Ni cch khc: Khi c k mn chn, Fx[k, v] l khi lng ti u khi khi lng ti a
ca ba l l v.
Khi lng ti u lun nh hn hoc bng khi lng ti a:
Fx[k,v] v.
V d: Fx[4, 10] = 8 Ngha l trong trng hp ti u, tng khi lng ca cc mn
hng c chn l 8, khi c 4 mn u tin chn (t mn th 1 n mn th 4) v khi
lng ti a ca ba l l 10. Khng nht thit c 4 mn u c chn.
+ Gii thut to bng:
Trng hp n gin ch c 1 mn chn: Ta tnh Fx[1, v] vi mi v.
Nu c th chn (ngha l khi lng ti a ca ba l >= khi lng ca cc mn hng
th 1), th chn: Fx[1, v] := A[1];
Ngc li ( v < A[1] ), khng th chn, ngha l Fx[1, v] := 0;
* Gi s ta tnh c Fx[k1 , v ] n dng k1, v [1, W]. Khi c thm mn th k
chn, ta cn tnh Fx[k , v] dng k, v [1,W].
Nu c th chn mn hng th k (v >= A[k]), th c 2 trng hp:
Trng hp 1: Nu chn thm mn th k b vo ba l th:
Fx[k, v] := Fx[k1, u ] + A[k]; Vi u l khi lng cn li sau khi chn mn th k.
u = v A[k]

Trng
hp
2:
Fx[k, v] := Fx[k1, v ];

Ngc

li,

khng

chn

mn

th

k,

th

Trong 2 trng hp trn ta chn trng hp no c Fx[k, v] ln hn. Ngc li (v <


A[k]), th khng th chn, ngha l Fx[k, v] := Fx[k1, v];
+ Cng thc quy l:
If v >= A[k] Then Fx[k,v] := Max(Fx[k-1, v - A[k]] + A[k] , Fx[k-1,v])
Else Fx[k,v] := Fx[k-1, v];
Di y l bng Fx[k,v] tnh c trong v d trn:
A
5
2
4
3

k\v
1
2
3
4

1
0
0
0
0

2
0
2
2
2

3
0
2
2
3

4
0
2
4
4

5
5
5
5
5

6
5
5
6
6

7
5
7
7
7

8
5
7
7
8

9
5
7
9
9

10
5
7
9
10

37

PROCEDURE TaoBang;
VAR k ,v : integer;
BEGIN
FOR v:=1 TO W DO
IF v >= A[1] THEN Fx[1, v] := A[1] ELSE Fx[1, v] := 0;
FOR k:= 2 TO n DO FOR v:=1 TO W DO
IF v >= A[k] THEN
Fx[k,v]:= Max(Fx[k-1,v-A[k]]+ A[k], Fx[k-1,v])
ELSE Fx[k,v]:=Fx[k-1,v];
END;

+ Gii thut tra bng tm cc mn hng c chn:


Ch : Nu Fx[k, v] = Fx[k1, v] th mn th k khng c chn.
Fx[n, W] l tng khi lng ti u ca cc mn hng b vo ba l.
Bc 1: Bt u t k = n, v = W.
Bc 2: Tm trong ct v, ngc t di ln, ta tm dng k sao cho Fx[k,v] > Fx[k1, v].
nh du mn th k c chn:
Chn[k] := true;
Bc 3: v := Fx[k, v] A[k].
Nu v > 0 th thc hin bc 2, ngc li thc hin bc 4
Bc 4: Da vo mng Chn in ra cc mn hng c chn.
PROCEDURE TraBang;
VAR k, v: Integer;
BEGIN
k := n; v := w;
FillChar(chon,SizeOf(chon),false);
REPEAT
WHILE Fx[k,v] = Fx[k-1,v] DO Dec(k);
chon[k]:= True;
v := Fx[k,v] - A[k];
UNTIL v = 0;
FOR k := 1 TO n DO
IF chon[k] THEN Write(A[k]:5); Writeln;
END;

6. Bi ton ba l 2
bi: Cho n mn hng (n 50). Mn th i c khi lng l A[i] v gi tr C[i] (s
nguyn). Cn chn nhng mn hng no b vo mt ba l sao tng gi tr ca cc mn
38

hng chn l ln nht nhng tng khi lng ca chng khng vt qu khi lng W
cho trc (W 100). Mi mn ch chn 1 hoc khng chn.
Input:
nW
A[1] C[1]
A[2] C[2]

A[n] C[n]
V d:
5 13
34
45
56
23
11
Output:
Tng gi tr ca cc mn hng b vo ba l.
Khi lng v gi tr ca cc mn hng chn.
Trong v d trn:
Tng gi tr ca cc mn hng b vo ba : 16
Cc mn c chn:
1(3, 4) 2(4, 5) 3(5, 6) 5(1, 1)
Hng dn gii:
Tng t bi ba l 1, nhng Fx[k, v] l gi tr ln nht ca ba l khi c k mn hng u
tin chn v khi lng ti a ca ba l l v.
Cng thc quy l:
If v >= A[k] Then
Fx[k,v]:= Max(Fx[k-1, v-A[k]] + C[k], Fx[k-1,v])
Else
Fx[k,v]:=Fx[k1,v];
Ch : ch khc bi bal 1 ch dng C[k] thay cho A[k]

39

Di y l bng Fx[k,v] tnh c trong v d trn:


k/v
1
2
3
4
5

1
0
0
0
0
1

2
0
0
0
3
3

3
4
4
4
4
4

4
4
5
5
5
5

5
4
5
6
7
7

6
4
5
6
8
8

7
4
9
9
9
9

8
4
9
10
10
10

9
4
9
11
12
12

10
4
9
11
13
13

11
4
9
11
14
14

12
4
9
15
15
15

13
4
9
15
15
16

7. Bi ton ba l 3
bi: Cho n loi hng (n 50). Mi mn hng thuc loi th i c khi lng l A[i] v
gi tr C[i] (s nguyn). S lng cc mn hng ca mi loi khng hn ch. Cn chn nhng
mn hng ca nhng loi hng no b vo mt ba l sao tng gi tr ca cc mn hng
chn l ln nht nhng tng khi lng ca chng khng lt qu khi lng W cho trc
(W 100). Mi loi hng c th hoc khng chn mn no, hoc chn 1 mn, hoc chn
nhiu mn.
Input:
nW
A[1] C[1]
A[2] C[2]

A[n] C[n]
V d:
5 13
34
45
56
23
11
Output:
Tng gi tr ca cc mn hng b vo ba l.
S lng ca cc loi hng chn.
Trong v d trn:
Tng gi tr ca cc mn hng b vo ba l: 19
Cc mn c chn:
Chn 1 mn hng loi 1, mi mn c khi lng l 3 v gi tr l 4
40

Chn 5 mn hng loi 4, mi mn c khi lng l 2 v gi tr l 3


Hng dn gii:
+ T chc d liu:
Fx[k, v] l tng gi tr ca cc mn hng b vo ba l khi c k loi hng
u tin chn v khi lng ti a ca ba l l v.
Vi k [1, n], v [1, W].
X[k, v] l s lng cc mn hng loi k c chn khi khi lng ti a ca
ba l l v.
+ Gii thut to bng:
* Trng hp n gin ch c 1 mn chn: Ta tnh Fx[1, v] vi mi v:
X[1, v] = v div A[1]
Fx[1, v] = X[1, v] * C[1]
* Gi s ta tnh c Fx[k1 , v ] n dng k1, vi mi v [1,W].
Khi c thm loi th k chn, ta cn tnh Fx[k , v] dng k, vi mi v [1,W]
Nu ta chn xk mn hng loi k, th khi lng cn li ca ba l dnh cho cc loi hng t
loi 1 n loi k 1 l: u = v xk * A[k]
Khi gi tr ca ba l l: Fx[k, v]= Fx[k1,u] + xk * C[k]
Vi xk thay i t 0 n yk, ta chn gi tr ln nht v lu vo Fx[k, v].
Trong yk = v div A[k] l s lng ln nht cc mn hng loi k c th c chn b
vo ba l, khi khi lng ti a ca ba l l v.
Tm li: cng thc quy l:
Fx[k,v] = Max(Fx[k-1, v xk * A[k]] + xk * C[k])
Max xt vi xk thay i t 0 n v div A[k], v v xk * A[k] > 0
Di y l bng Fx[k,v] v X[k, v] tnh c trong v d trn. Bng mu xm l X[k, v]:
k/v
1
2
3
4
5

1
0
0
0
0
0

2
0
0
0
0
0

0
0
0
0
1

3
0
0
0
0
1

4
4
4
4
4

4
1
0
0
0
0

4
4
4
4
5

5
1
0
0
0
1

4
5
5
7
7

6
1
1
0
1
0

8
8
8
8
8

2 8 2 8 2
0 9 1 9 1
0 9 0 10 1
0 10 2 11 1
0 10 0 11 0

9
12
12
12
13
13

3
0
0
3
0

10
12 3
13 1
13 0
14 2
14 0

11
12 3
14 2
14 0
16 4
16 0

12
16 4
16 0
16 0
17 3
17 0

13
16 4
17 1
17 0
19 5
19 0

41

PROCEDURE TaoBang;
VAR xk, yk, k: Byte;
FMax, XMax, v : Word;
BEGIN
FOR v:= 1 TO W DO
BEGIN
X[1, v] := v div A[1];
F[1, v] := X[1, v] * C[1];
END;
FOR k:= 2 TO n DO
FOR v:= 1 TO W DO
BEGIN
FMax := F[k-1, v] ;
XMax := 0;
yk := v div A[k];
FOR xk:= 1 TO yk DO
IF(v-xk*A[k]>0)andF[k-1,v-xk*A[k]]+xk*C[k]>FMax) THEN
BEGIN
FMax := F[k-1, v - xk * A[k]] + xk * C[k];
XMax:= xk;
END;
F[k, v] := FMax;
X[k, v] := XMax;
END;
END;

Gii thut tra bng:


Fx[n, W] l gi tr ln nht ca ba l.
Bt u t X[n, W] l s mn hng loi k c chn.
Tnh v = W X[n, W]* A[n].
Tm n [n 1, v ] ta tm c X[n 1, v]. C tip tc ta tm c X[1, v].
Ch : khi tra bng, ta khng dng mng Fx[k, v], nn ta c th ci tin: dng 2 mng
mt chiu thay cho mng hai chiu Fx.
8. Bi ton xu con chung di nht
bi: Cho hai xu k t A v B. Tm xu k t C c nhiu k t nht, vi C va l xu
con ca xu A, va l xu con ca xu B. (Xu con l xu k t c c khi b bt mt s k
t trong xu cha).
D liu: Vo t tp tin vn bn XauChung.inp gm hai dng, mi dng l mt xu k
t.
Kt qu: a ra tp tin vn bn XauChung.out gm 2 dng:
Dng u l di ca xu con chung di nht.
Dng th hai l xu con chung C.
42

V d
XauChung.INP

XauChung.OUT

CEACEEC

AECECA

AEEC

Hng dn:
+ T chc d liu
Mng hai chiu L[0..Max, 0..Max] lu kt qu cc bi ton con.
+ To bng
Gi L[i,j] l di ln nht ca dy con chung ca hai dy khi dy A c i phn t v dy
B c j phn t chn A1...Ai v B1..Bj. Vi i<=m v j<=n (m,n l di hai xu).
+ Trng hp n gin: nu i=0 hoc j=0 (mt trong hai xu rng) th L[i,j] =0.
+ Cng thc quy
Nu (i>0) and (j>0) and (Ai<>Bj)
th c L[i,j] =Max(L[i-1,j], L[i,j-1])
Nu (i>0) and (j>0) and (Ai=Bj) th L[i,j] = 1+ L[i-1,j-1]
+ To bng
PROCEDURE Taobang;
VAR i,j:byte;
BEGIN
Fillchar(L,sizeof(L),0);
FOR i:=1 TO m DO
FOR j:=1 TO n DO
IF A[i]=B[j] THEN L[i,j]:= 1 + L[i-1,j-1]
ELSE L[i,j]:=Max(L[i-1,j],L[i,j-1]);
END;

+ Tra bng
Xu chung C:=
Xut pht t L[n,m] hng v L[0,0].
Nu A[i]=B[j] chn A[i] hoc B[j] a vo u dy C ri li v L[i-1,j-1]
Nu Ai<>Bj th:
Nu L[i-1,j] > L[i,j-1] li v L[i-1,j]
Nu L[i-1,j] <= L[i,j-1] th li v L[i,j-1]
43

PROCEDURE Trabang;
VAR i, j:byte;
BEGIN
C:=;
I:=m; j:=n;
REPEAT
IF A[i]=B[j] THEN
BEGIN
C:= A[i]+C;
Dec(i); Dec(j);
END
ELSE IF L[i,j-1] > L[i-1,j] THEN j:=j-1 ELSE i:=i-1
UNTIL (i=0) or (j=0);
END;

9. Bi ton chia ko
bi: Cho n gi ko (n 50). Gi th i c A[i] vin ko. Cn chia cc gi ko ny cho
2 em b sao cho tng s vin ko mi em nhn c chnh lch t nht. Mi em nhn
nguyn gi. Khng m gi ko ra chia li. Hy lit k s ko trong cc gi ko mi em
nhn c.
Input:
n
A[1] A[2] A[n]
Output: S ko trong cc gi ko mi em nhn c, v tng s ko mi em nhn c.
Hng dn gii:
Gi S l tng s vin ko S := A[1] + A[2] + + A[n];
S2 l na tng s ko: S2 := S div 2;
Cho em b th nht chn trc nhng gi ko sao cho tng s vin ko m em nhn
c l ln nht nhng khng vt qu s ko S2.
Gi ko no em b th nht khng chn th em b th hai chn.
Bi ton c a v Bi ton ba l 1( hng dn trn).
10. Bi ton i tin
bi: Cho n loi t giy bc. T giy bc th i c mnh gi A[i]. S t mi loi khng
gii hn. Cn chi tr cho khch hng s tin M ng. Hy cho bit mi loi tin cn bao
nhiu t sao cho tng s t l t nht. Nu khng i c, th thng bo KHONG DOI
DUOC. N < 50; A[i] < 256; M < 10000.
Input:
nM
A[1] A[2] A[n]
44

V d:
3 18
3 10 12
Output: Tng s t phi tr. S t mi loi.
Hng dn gii: Tng t Bi ton ba l 3
Gi Fx[i, j ] l s t t nht c dng tr s tin j ng khi c i loi tin t loi 1 n
loi i. Vi i = 1 .. n; j = 1 .. M.
X[i, j] l s t giy bc loi th i c dng chi tr s tin j ng.
* Trng hp n gin ch c 1 loi tin chn: Ta tnh Fx[1, j] vi mi j
F[1,j]

= j div A[1] nu j mod A[1] = 0

F[1,j]

= nu j mod A[1] 0 (khng i c)

* Gi s ta tnh c Fx[i1 , j ] n dng i1, vi mi j [1,M]. Khi c thm loi


tin th i chn, ta cn tnh Fx[i , j] dng i, vi mi j [1, M].
Nu ta chn k t loi i, th s tin cn li dnh cho cc loi tin khc t loi 1 n loi i
1 l: u = j k * A[k]
Khi tng s t l: Fx[i, j]= Fx[i1,u] + k
Vi k thay i t 0 n kMax, ta chn gi tr nh nht v lu vo Fx[i, j].
Trong kMax = j div A[k] l s t nhiu nht ca loi tin i i s tin j.
Tm li: cng thc quy l:
Fx[i,j] = Min(Fx[i-1, j k * A[i]] + k)
Min xt vi k thay i t 0 n j div A[i], v j k * A[i] > 0
+
V. BI TP
Bi 1 : Ti ba gang
Trong truyn c tch "Cy Kh" ta bit rng chim thn ch ngi anh vi mt ci ti
ba gang n hn o y vng bc chu bu. Ngi em bn khon khng bit chn vt
no cho vo ti v ch c mt ci ti ba gang..
Gi s rng trn hn o kia c N vt khc nhau, vt th i c gi tr l ai v c th
tch l bi. Cng gi s rng ci ti m ngi em mang i ch c th tch l M. Bn hy gip
ngi em chn ra trong N vt trn mt s vt sao cho tng th tch ca cc vt
c chn khng vt qu M v tng gi tr cc vt c chn l ln nht.
Input: Cho trong file vn bn CAYKHE.INP
Dng u tin ghi hai s N, M (N,M100)
N dng tip theo, dng th i ghi hai s ai v bi ln lt l gi tr v th tch ca vt
th i (ai, bi100)
45

Output: Ghi ra file vn bn CAYKHE.OUT


Dng u tin ghi tng gi tr ln nht c th cho vo trong ti
Dng th hai ghi s hiu cc vt c cho vo trong ti. u tin ghi K l s lng
vt c chn, tip theo l K s th hin s hiu cc vt c chn.
V d:
CAYKHE.INP
5 10
20 3
19 1
30 7
24 3
15 6

CAYKHE.OUT
63
3124

Bi 2: Kinh doanh bt ng sn.


Ti thnh ph Silicon, Mt ngi n c tha k mt khon tin N ngn USD, ngi
quyt nh u t vo vic kinh doanh bt ng sn bng cch mua cc mnh t hnh
vung c kch thc l cc s nguyn, bit rng mi mt vung t c gi tr 1 ngn USD.
Hy ch cch cho ngi n mua t sao cho tng s tin mua t ng bng N ngn USD v
s mnh t mua c cng t cng tt.
D liu: Vo t file vn bn MUADAT.INP gm mt s nguyn dng duy nht N c gi
tr khng vt qu 60000
Kt qu: Ghi ra file vn bn MUADAT.OUT mt dy s nguyn dng xp theo th t
gim dn l kch thc cc mnh t mua c
V d:
MUADAT.INP

MUADAT.OUT

30

4321

Bi 3: Xy thp
C N khi hnh hp ch nht. Ngi ta mun xy mt ci thp bng cch chng cc
khi ny ln nhau. m bo an ton, cc khi c t theo nguyn tc:
+ Chiu cao ca mi khi l kch thc nh nht trong ba kch thc
+ Cc mp ca cc khi c t song song vi nhau sao cho khng c phn no
ca khi nm trn b cha ra ngoi so vi khi nm di.
Hy tm phng n xy dng thp t c cao nht.
D liu vo: Cho trong file TOWN.INP:
Dng u tin l s N
N dng tip, mi dng ghi 3 s nguyn dng l kch thc ca mt khi . Cc
khi c nh s t 1 theo trnh t xut hin trong file.
46

Kt qu: ghi ra file TOWN.OUT:


Dng th nht ghi s M l s lng khi dng xy thp
M dng tip theo ghi cc khi xp t y thp ln nh thp, mi dng gm 4 s theo
th t K a b c, trong K l s hiu khi , a l kch thc chn lm y nh, b l
kch thc chn lm y ln, c l kch thc chn lm chiu cao.
Cc s trn mt dng trong cc file c ghi cch nhau t nht mt du cch. Gii hn s
khi khng qu 5000 v cc kch thc ca cc khi khng qu 255.
V d:
TOWN.INP
9
755
448
115
422
515
427
292
133
555

TOWN.OUT
4
1575
9555
5551
4242

Bi 4: Vng quanh th gii ( thi hc sinh gii Ton quc 2003)


Trn tuyn ng ca xe du lch vng quanh th gii xut pht t bn xe x c N khch
sn nh s t 1 n N theo th t xut hin trn tuyn ng, trong khch sn i cch a
im xut pht A[i] km (i=1,2,...,N): A[1]<A[2]<....<A[n].
m bo sc khe cho hnh khch, theo tnh ton ca cc nh chuyn mn, sau khi
chy c P km xe nn dng li cho khch ngh ngi khch sn. V th, nu xe dng
li cho khch ngh khch sn sau khi i c Q km th li xe phi tr mt lng pht l
(Q-P)2.
Yu cu: Hy xc nh xem trn tuyn ng n khch sn N, xe cn dng li ngh
nhng khch sn no tng lng pht m li xe phi tr l t nht.
D liu vo t file vn bn TOURISM.INP
-

Dng u tin cha s nguyn dng N (N10000)

Dng th hai cha s nguyn dng P (P500)

Dng th ba cha cc s nguyn dng A[1]], A[2], ..., A[n] (hai s lin tip trn
dng c ghi cch nhau bi du cch; A[i]2000000, i=1,2,...,N)

Kt qu ghi ra file vn bn TOURISM.OUT:


-

Dng u ghi Z l lng pht m li xe phi tr

Dng th 2 ghi k l tng s khch sn m li xe cn dng li cho khch ngh


47

Dng th ba cha ch s ca k khch sn m xe dng li cho khch ngh (trong


nht thit phi bao gm c ch s ca khch sn th N)

V d:
TOURISM.INP
4
300
250 310 550 590

TOURISM.OUT
500
2
24

Bi 5: Duyt im
Xt li vung to thnh t n*n dng, cc ng ca li c nh s t 1 n n
t tri qua phi v t trn xung di (1n20000). mi hng th i, ngi ta cho on
thng xc nh bi hai im li v ri (1lirin, i=1n).
Yu cu: Xc nh di ca ng i ngn nht dc theo cc cnh ca li t im
(1,1) n im (n,n) v tho mn cc iu kin:
Ch i sang phi, sang tri hoc xung di
i qua tt c cc im thuc cc on thng cho
D liu: Vo t file vn bn VISIT.INP:
Dng u tin cha s nguyn dng n
Dng th i trong n dng sau cha hai s nguyn dng li, ri
Kt qu: a ra file vn bn VISIT.OUT mt s nguyn duy nht l di ca ng i
ngn nht tm c.
V d:
VISIT.INP
6
26
34
13
12
36
45

VISIT.OUT
24

Bi 6: Nhng v khch sp vo nh hng


Mt nh hng bt u m ca ti thi im 0 v ng ca ti thi im T=2.109. Ti
ca ra vo nh hng c treo mt bng hin th s. Ti thi im 0, s trn bng l 0 v c
sau 1s s trn bng gi nguyn gi tr hoc tng, gim mt n v. Bng ch hin th c
cc s khng m.

48

C N v khch sp i qua nh hng, v khch sp th i i qua nh hng ti thi im Ti


v s thch ca ng ta l s Si. Nu nh thi im ng ta i qua nh hng bin s trc ca
nh hng hin ng s ng ta thch th ng ta s vo v tiu mt s tin l Pi.
Yu cu: Hy gip nh hng iu khin bng s sao cho tng s tin m cc v khch sp
vo nh hng l ln nht.
Input: Cho trong file WELCOME.INP
Dng u tin ghi s nguyn dng N (N200)
Trong N dng tip theo, dng th i ghi thng tin v v khch th i gm ba s nguyn
dng Ti, Si v Pi.
Output: Ghi ra file WELCOME.OUT mt s nguyn duy nht l tng s tin ln nht m
nh hng nhn c.
V d:
WELCOME.INP WELCOME.OUT
3
7
213
324
1 3 10
Bi 7: Di chuyn t Ty sang ng
Cho hnh ch nht M x N vung (cc hng nh s t 1 n M t trn xung v cc
ct nh s t 1 n N t tri sang phi), mi vung cha mt s nguyn. C th di
chuyn t mt sang mt khc thuc ct bn phi cng dng hoc lch mt dng. Tm
cch di chuyn t ct 1 sang ct N sao cho tng cc s ca cc i qua l nh nht.
Input: T file vn bn WTOE.INP
Dng u tin cha hai s nguyn M, N (1M,N100)
Tip theo l M dng, mi dng ghi N s nguyn l cc s nm trn cc vung ca
hng tng ng bt u t ct 1 n ct N. Cc s nguyn ny c gi tr tuyt i
khng vt qu 30000
Output: Ghi ra file vn bn WTOE.OUT
Dng th nht ghi tng cc s trong cc i qua
Dng th 2 ghi N s ln lt l ch s hng ca cc trn hnh trnh bt u t ct 1
n ct N
V d:
WTOE.INP
22
26
35

WTOE.OUT
9
21

49

Bi 8: Dy con i xng di nht (daydx.pas)


Dy s c A1, A2, , AN c gi l i xng nu cc cp s cc v tr i v N-i+1
bng nhau (vi i=1..N). Cho trc mt dy s c N phn t, mi phn t l s nguyn. Hy
tm cch loi b mt s phn t trong dy dy thu c to thnh mt dy i xng di
nht.
D liu vo: File vn bn DAYDX.INP c cu trc nh sau:
+ Dng 1: S nguyn N (2N5000);
+ Dng th 2 ghi N s nguyn l cc s hng trong dy c gi tr tuyt i 1000, mi
s cch nhau mt du cch.
D liu ra: File vn bn DAYDX.OUT vi yu cu nhh sau:
+ Dng u ghi s nguyn M l s cc cc s hng ca dy i xng tm c;
+ Dng th 2 ghi M s hng ca dy tm c, mi s cch nhau mt du cch.
V d:
DAYDX.INP
DAYDX.OUT
13
7
132315234143 2341432
2
Bi 9: Ni mng my tnh
Cc hc sinh khi n thc tp trong phng my tnh thng hay chi tr chi in t
trn mng. ngn nga, ngi trc phng my ngt tt c cc my tnh ra khi mng
v xp chng thnh mt dy trn mt ci bn di v gn cht my xung mt bn ri nh
s th t cc my t 1 n N theo chiu t tri sang phi. Cc hc sinh tinh nghch khng
chu thua, h quyt nh tm cch ni cc my trn bn bi cc on dy ni sao cho mi
my c ni vi t nht mt my khc. tin hnh cng vic ny, h o khong cch
gia hai my lin tip. Bn hy gip cc hc sinh ny tm cch ni mng tho mn yu cu
t ra sao cho tng di cp ni phi s dng l t nht.
D liu: vo t file vn bn CABLE.INP:
Dng u tin cha s lng my N (1N25000)
Dng th i trong s N-1 dng tip theo cha cc khong cch t my i n my i+1
(i=1,2,...,N-1). Gi thit rng khong cch t my 1 n my N khng vt qu 106.
Kt qu: Ghi ra file vn bn CABLE.OUT di ca cp ni cn s dng.
V d:
CABLE.INP
CABLE.OUT
6
7
2
2
3
2
2
50

Chuyn :

L THUYT TH
I. MT S KHI NIM
Mt th (Graph) G (V,E) bao gm mt tp hp hu hn V cc nt hay nh (Vertices)
v mt tp hu hn E cc cp nh m ta gi l cung (edges)
V d: Trong thc t ta bt gp nhiu th nh mng my tnh, mng in, mng giao
thng.Bng hnh v, th c th m t nh sau:

a)

b)
Hnh 1: th

Nu (v1,v2) l cc cp nh thuc E th ta ni: c mt cung ni v1 v v2 hay c ng i


trc tip t v1 n v2. Nu cung (v1, v2) khc cung (v2,v1) th ta c mt th nh hng
(hnh 1.b), lc (v1,v2) c gi l cung nh hng. Nu th t cc nt trn cung khng
c coi trng th ta gi l th v hng (hinh 1.a) tc l vi mi cung (v1,v2) trong th
G, nu cung (v1,v2) bng cung (v2,v1) th l th v hng
Trong hnh 1.a, i t nh 1 n nh 5 ta c nhiu cch i, V d: 125 hay
1235. Ta gi mi cch i nh vy l mt ng i. Tng qut: Mt ng i (path)
t nh vp n nh vq trong th G l mt dy nh vp, vi1, vi2, vi3,,vin , vq m (vp,vi1),
(vi1, vi2),,(vin,vq) l cc cung ca G.
ng i n (Simple Path) l ng i m mi nh trn , tr nh u v nh cui,
u khc nhau
Mt chu trnh n (Cycle) l ng i n m trong nh u v nh cui trng nhau.
V d trong hnh 1.a c mt s chu trnh: 1241; 2542.
Trong th G, hai nh vi v vj gi l lin thng (Connected) nu tn ti t nht mt
ng i t vi n vj
Mt th G gi l lin thng nu vi mi cp nh phn bit vi v vj trong V(G) u c
ng i t vi n vj. Hnh 1.a l th lin thng cn th hnh 1.b khng lin thng v
khng c ng i t nh 1 n nh 2
Trong th, i khi ngi ta cn gn mt gi tr th hin mt thng tin lin quan n
cung (gi l trng s), trong trng hp ny th c gi l th c trng s. V d,

51

mng li giao thng ng b gia cc thnh ph vi trng s ng vi mi tuyn ng


gia hai thnh ph l di ca tuyn ng

Hnh 2: th c trng s
+ i vi th v hng G=(V,E). Xt mt cnh e E. nu e=(u, v) th ta ni hai nh u v
v l k nhau v cnh e ny lin thuc vi nh u v nh v
+ Vi mt nh v trong th v hng, ta nh ngha bc (degree) ca v, k hiu l deg(v)
l s cch cnh lin thuc vi v
II. BIU DIN TH
1. Danh sch nh k
i vi mi nh trong th trong hnh 3, ta c danh sch cc nh k tng ng:

Hnh 3

nh
A
B
C
D
E
F

Cc nh k
B, F
A, C, , F
B, D
B, C, E, F
D F
A, B, D, E

Danh sch cc nh k
lu tr th trong file, ta c th s dng danh sch cc nh k. Vi th trong
hnh 3, cu trc ca file lu tr n trong file DOTHI.INP nh sau:
DOTHI.INP
Gii thch
6
- Dng u l s nh ca th
BF
- Dng th 2 l cc nh k ca nh A
ACDF
- Dng th 3 l cc nh k ca nh B
BD
.
BCEF
- Dng th 7 l cc nh k ca nh F
DF
ABDE
52

2. Ma trn k
Danh sch cc nh k ca th hnh 3 c th c biu din li bng mt ma trn A
c kch thc 6x6 trong gi tr ca (i,j) th nh i v j k nhau. Quy c nh sau:

Vi quy c , th hnh 3 c biu din li bng ma trn:


nh A B C D E F
0 1 0 0 0 1
A
1 0 1 1 0 1
B
0 1 0 1 0 0
C
0 1 1 0 1 1
D
0 0 0 1 0 1
E
1 1 0 1 1 0
F
V d : Ma trn k ca th c hng G=(V,E) di y s c biu din bi ma trn:

A
B
C
D
E

A
0
0
0
1
0

B
1
0
1
0
0

C
1
0
0
0
0

D
0
1
1
0
1

E
1
0
0
0
0

Hnh 4
+ Ma trn biu din th v hng l ma trn i xng, iu ny khng ng vi th
c hng
3. Danh sch cnh
Ngoi hai cch biu din trn ta c th biu din th bng cch a ra tt c cc cnh
ca th
th trong hnh 3 c biu din trong file DOTHI.INP nh sau
DOTHI.INP
AB
AF
BC
BD
BF
CD
DE
DE
EF

Gii thch
Mi dng l mt
cnh ca th
ni hai nh k
nhau

53

III. DUYT TH
Cho th G=(V,E), duyt th l cch thm tt c cc nh ca th theo mt trt t
no
V d: Cho th hnh 5.a th ta c hai trt t thm cc nh ca th l tm kim theo
chiu su (hnh 5.b) v tm kim theo chiu rng (hnh 5.c) vi nh xut pht l nh 1

a)

b)

c)

Hnh 5
1. Tm kim theo chiu su
a. tng:
Xut pht t mt nh u trong th, ta ln lt duyt qua tt c cc ln cn v ca u, nu
v cha c thm th thc hin thm v. Qu trnh duyt th c tip tc vi nh v sao
cho tt c cc nh ca th u c thm.
b. Gii thut
PROCEDURE DFS(u);
{u l mt nh ca th G}
BEGIN
Thm u;
FOR cc nh k v ca u DO
IF v cha c thm THEN DFS(v)
END;
c. Chng trnh:
vit c chng trnh da vo gii thut trn, ta cn tr li cc cu hi
+ Thm u l thc hin cng vic g? y l cu lnh mang tnh tng qut, vic thm u
cn ty thuc vo tng yu cu c th thc hin cc cng vic khc nhau
+ Lm th no xc nh c v l nh k ca u? Nu ta biu din th bng ma trn
A th ch cn kim tra gi tr A[u,v], nu bng 1 th v l nh k ca u
54

+ Lm th no bit c nh v cha c thm? Khi thm mt nh no ta thc


hin nh du n c thm.
Th tc tm kim th theo chiu su:
{A l ma trn biu din th. Chon l mng dng
nh du khi 1 nh c thm}
PROCEDURE DFS(u:integer);
VAR v:integer;
BEGIN
Write(u:3); chon[u]:=true;
FOR v:=1 TO N DO
IF(Chon[v]=False)and(A[v,u]=1)THEN DFS(v);
END;
d. M rng: {Kh quy}
+ Nhc li v STACK: l b nh do chng trnh Pascal t ng to ra khi thc hin
cc chng trnh con quy, STACK c c ch hot ng l vo trc ra sau tc l ci g
c a vo STACK trc th c ly ra sau
+ chuyn c chng trnh con quy sang kh quy ta ch cn to ra b nh
STACK c c ch a vo/ly ra nh trong chng trnh quy. Thng thng ngi ta
dng kiu mng hoc con tr to b nh STACK.
+ Vit li gii thut theo cch kh quy
+ Tham kho th tc tm kim theo chiu su bng cch kh quy
PROCEDURE DFS(u:integer);
VAR v,dinh:integer;
chon:Array[0..100]of boolean;
Stack:Array[0..100] of integer;
BEGIN
Fillchar(chon,sizeof(chon),false);
{a 1 nh vo Stack}
dinh:=1; Stack[1]:=u; chon[u]:=true;
write(u:3);
WHILE dinh>=1 DO
BEGIN
{ly 1 nh ra khi Stack}
u:=Stack[dinh];dinh:=dinh-1;
IF chon[u]=false THEN write(u:3);
chon[u]:=true;
55

FOR v:=N DOWNTO 1 DO


IF(A[u,v]=1)and(chon[v]=false)THEN
BEGIN
{a 1 nh vo Stack}
dinh:=dinh+1; Stack[dinh]:=v;
END;
END;
END;

2. Tm kim theo chiu rng


a. tng:
Xut pht t 1 nh u trong th, sau khi thm tt c cc nh k v ca u, tip tc thm
cc nh k ca v. C tip tc nh vy cho n khi tt c cc nh ca th c thm.
b. Gii thut:
thc hin tm kim theo chiu rng ta s dng b nh Queue (ngc vi Stack), c
ch ca n l vo trc ra trc, vo sau ra sau
+ Gii thut lit k tng bc
B1: a u vo Queue
B2:Nu Queue cha rng th ly 1 nh trong Queue ra v gn cho p. thm p
B3: Xt tt c cc nh k v ca p, nu v cha c thm th a vo Queue. Quay li B2
+ Gii thut gii m Pascal
PROCEDURE BFS(u)
BEGIN
Push(u,Q); {a u vo Queue;}
WHILE Q cha rng DO
BEGIN
u:=POP(Q); {ly 1 nh trong Queue ra v gn cho u}
Thm u;
FOR cc ln cn v ca u DO
IF v cha c thm THEN Push(v,Q);
END;
END;

c. Chng trnh:
Tham kho th tc sau y
PROCEDURE BFS(u:integer);
VAR v,dinh,dau:integer;
chon:Array[0..100]of boolean;
Q:Array[0..100] of integer;
56

BEGIN
Fillchar(chon,sizeof(chon),false);
dinh:=1;
dau:=1;
write(u:3);
Q[1]:=u;
chon[u]:=true;
WHILE dinh>=dau DO
BEGIN
u:=Q[dau];
dau:=dau+1;
IF chon[u]=false THEN write(u:3);
chon[u]:=true;
FOR v:=N DOWNTO 1 DO
IF(A[u,v]=1)and(chon[v]=false)THEN
BEGIN
dinh:=dinh+1;Q[dinh]:=v;
END;
END;
END;

IV. TNH LIN THNG TRONG TH


Khi nim lin thng trong th: Mt th G gi l lin thng nu vi mi cp nh
phn bit vi v vj trong V(G) u c ng i t vi n vj.
Bi ton: Cho mt th G=(V,E) Hy cho bit cc nh trong th lin thng vi nhau
hay khng?
Ta c th p dng gii thut php duyt th kim tra tnh lin thng trong th
bng cch so snh s lng nh c thm vi s nh ca th G. Nu bng nhau th G
l lin thng, ngc li khng lin thng. bit c s nh c thm trong gii thut
DFS hoc BFS ta dng thm mt bin m. Hai gii thut DFS v BFS c th c sa
li nh sau:
PROCEDURE DFS(u, dem);
{u l mt nh ca th G}
BEGIN
Thm u; inc(dem);
FOR cc nh k v ca u DO
IF
v
cha
c
thm
DFS(v,dem)
END;

THEN

57

PROCEDURE BFS(u, dem)


BEGIN
Push(u,Q); {a u vo Queue;}
WHILE Q cha rng DO
BEGIN
u:=POP(Q); {ly 1 nh trong Queue ra v gn cho u}
Thm u;inc(dem);
FOR cc ln cn v ca u DO
IF v cha c thm THEN Push(v,Q);
END;
END;

*Nhng thay i c gch chn


Trong chng trnh chnh ta c th vit nh sau:
Dem0;
DFS(u); {BFS(u);}
IF dem=N THEN Write( th lin thng)
ELSE Write( th khng lin thng);

Trong trng hp th khng lin thng th th s c chia thnh nhiu tp nh m


trong mi tp nh cc nh c ng i vi nhau nhng khng c ng i n cc nh
trong tp nh khc. Mi tp nh nh vy ta gi l mt thnh phn lin thng trong th.
V d th sau c 3 thnh phn lin thng:

Trong hai thnh phn lin thng u tin c 4 nh, thnh phn cn li ch c mt nh
duy nht. Ta d dng thy rng trong thnh phn lin thng u tin c 4 nh (1, 2, 3, 4) v
t 1 nh bt k trong 4 nh ny c th i n cc nh cn li nhng khng c ng i
n cc nh 5, 6, 7, 8, 9. nh 9 cng c xem l mt thnh phn lin thng v n khng
c ng i n tt c cc nh cn li.
Hai gii thut DFS v BFS ch thc hin thm c cc nh trong mt thnh phn lin
thng nn ta c th s dng hai gii thut ny lit k cc thnh phn lin thng trong
th.
on chng trnh sau lit k tt c cc thnh phn lin thng ca th:

58

FOR u=1 TO N DO
IF nh u cha c thm THEN
BEGIN
DFS(u); {BFS(u)}
Writeln;
END;

Trong th tc DFS (BFS) khi thc hin thm 1 nh th in nh ra mn hnh


V. CHU TRNH TRONG TH
Khi nim chu trnh n: Mt chu trnh n (Cycle) l ng i n m trong nh
u v nh cui trng nhau.
Bi ton: Cho th G=(V,E). Hy cho bit trong G c chu trnh n hay khng?
Da vo nh ngha v chu trnh n ta c th gii quyt bi ton bng cch trong qu
trnh duyt th, ti nh ang xt nu nh c nhiu hn 1 nh k c thm th kt
lun c chu trnh n. Ngc li nu xt ht tt c cc nh m khng c nh no nh
trn th ta kt lun trong G khng c chu trnh n.
V d 1: Cho th:

Trong th trn c mt ng i n l 1234


nh ang
xt
1
2
3
4

Cc nh
trong ng
i n
0
1
1, 2
1, 2, 3

nh k c
trong ng i
n
0
1
2
3, 1

Chu
trnh
Khng
Khng
Khng
C

Nh vy trong ng i n 1234 khi xt n nh 4 ta thy nh 4 c hai nh k


(1 v 3) tuy nhin 2 nh ny c c trong ng i n nn ta kt lun th cho c
chu trnh
V d 2: Cho th:

59

Trong th trn c cc ng i n l (152); (153); (154). Trong cc


ng i n ny ch c nh 5 l c 2 nh k tuy nhin khi xt n nh 5 th lun c 1
nh k c trong ng i (nh 1) nh k cn li cha xt. xt n cc ng i n
trong d th ta s dng thut ton duyt th nn ta cng c th p dng thut ton ny
kim tra tnh chu trnh trong th.
Qua 2 v d trn ta rt ra kt lun sau: Trong qu trnh duyt th, ti mt nh ang
c thm, ta xt cc nh k ca n, nu s lng nh k ca n c thm ln hn 1
th th ang xt c chu trnh.
Thut ton sau y p dng gii thut DFS kim tra tnh chu trnh trong th lin
thng, trong A l ma trn c kch thc N, u l nh ang xt
FUNCTION KT(A,N,u):Boolean;
BEGIN
Ktfalse; dem0;
FOR v1 TO N DO
BEGIN
IF c cung (u,v) v v c thm THEN inc(dem);
IF dem>1 THEN exit(true) {c chu trnh}
ELSE IF c cung (u,v) v v cha c thm THEN KT(A,N,v);
END; exit(false); {khng c chu trnh}
END;

VI. NG I NGN NHT


1. Mt ngun mt ch
a. Bi ton:
Cho th c trng s G=(V,E), cc nh c nh s t 1 n N. Yu cu tm ng i
ngn nht gia hai nh u v v cho trc
V d th G=(V,E) c cho nh sau:
Mt s ng i t nh 1 n nh 2
+ 12 ( di 20)
+ 142 ( di 18)
+ 1432 ( di 19)
+ 16542 ( di 17)
+ 165432 ( di 18)
Trong cc ng i lit k trn th ng i 16542 c di 17 l ng i
ngn nht t nh 1 n nh 2. Nh vy tm ng i ngn nht gia hai im bt k ta
c th lit k tt c cc ng i gia hai nh ri so snh tm ra ng i ngn nht. Tuy
vy, gia hai nh bt k trong mt th lin thng s c bao nhiu ng i? Cu tr li l
60

v s v mt cung trong ng i c th lp li nhiu ln. tm ng i ngn nht gia


hai nh bt k ta dng thut ton Dijkstra. Trong v d trn ta gi nh 1 l nh ngun,
nh 2 l nh ch
b. Gii thut
Gii thut Dijkstra tm kim ng i ngn nht t nh u n nh v trong th c N
nh c lu tr bng ma trn ln cn A, trong A[i,j] l gi tr ng i ca cung (i,j)
Thut ton lit k tng bc
Bc 0:
+ Khi to tp S rng. Tp S dng nh du mt nh c chn hay cha.
+ Tp D c N phn t dng lu tr di ngn nht t nh u n cc nh cn
li.Lc u gn D[i]=A[i,u] vi 1iN; m=u;
Bc 1: Nu m=v th kt thc
Bc 1: Chn nh m sao cho khong cch t m n u l nh nht v m cha c trong tp S
Bc 2: a m vo tp S
Bc 3: Nu i cha a vo S v D[m]+A[m,i]<D[i] th gn D[i]=D[m]+A[m,i]. Quay
li B1
Thut ton gii m Pascal
PROCEDURE Dijkstra(A,u,v);
BEGIN
S=rng; D[i]:=A[u,i]; (1iN)
a u vo S
m:=u;
WHILE m<>v DO
BEGIN
Chn m sao cho m S v m=min(D[i]) (1iN)
a m vo S
FOR tt c ln cn i ca m DO
IF i S v D[i]>D[m]+A[m,i] THEN D[i]:=D[m]+A[m,i]
END;
END;

Kt qu: D[v] l di ng i nh nht t u n v


i vi th m t trong v d trn,ta c th m t qu trnh tm kim ng i nh sau:

61

Bc
Khi
to
1
2
3
4
5

Tp S

nh
c
chn

Rng
1
1, 6
1, 6, 5
1, 6, 5, 4
1, 6, 5, 4,
3

6
5
4
3

20

11

20
20
17
17

11
10
10
10

7
7
7
7

2
2
2
2

16
16

Ta c th gii thch bng trn nh sau:


+ Khi to: Lc u tp S rng, gi tr ca D[i]=A[i,u] (1i6), D[i]= ngha l khng
c ng i trc tip t u n i
+ Bc 1: a nh 1 vo S. nh m=6 c chn v 6 S v D[6]=2 (nh nht trong
mng D). Lc ny ta so snh gi tr ca D[i] v D[m]+A[m,i] gn li gi tr nh hn cho
D[i] vi 1i6
Ta c:
i=
1
2
3
4
5
6
D[i]=
20
11
2

D[6]+A[6,i]=
x
2+ 2+ 2+
2+
2+5
* Lu : nh 1 a vo tp S nn ta khng thc hin tnh D[6]+A[6,1]
Trong bng trn ta thy D[6]+A[6,5] (=7)<D[5](= ) nn gn li D[5]= D[6]+A[6,5],
cc gi tr khc gi nguyn
Sau khi gn li, ta c gi tr ca mng D l
i=
1
2
3
4
5
6
D[i]=
20
11
7
2

+ Bc 2: a nh 6 chn Bc 1 vo tp S. nh tip theo c chn l nh 5


(Do D[5]=7 l nh nht, nh 6 v nh 1 c trong S nn khng c chn). Thc hin so
snh v gn li mng D tng t nh Bc 1
+ .
+ Bc 5: a nh 3 vo tp S. nh c chn l nh 2, do 2 trng vi nh v (v=2)
nn thut ton kt thc.
Kt qu: D[v=2]=17 l gi tr nh nht ca ng i t u (u=1) n v (v=2);

62

c. Nhn xt v gii thut


+ So vi thut ton thng thng, thut ton Dijkstra thc hin nhanh hn do khng cn
phi tm ra tt c ng i t nh ngun n nh ch. phc tp ca Dijkstra l O(n 2)
do trong thut ton s dng mt vng lp WHILE DO v 1 vng lp FOR DO lng nhau
+ Thut ton trn ch mi a ra c gi tr nh nht ca ng i t nh ngun n
nh ch ch khng ch ra ng i gia chng
d. Vn ng i trong thut ton Dijkstra
Ta c nhn xt nh sau: Php gn D[i]:=D[m]+A[m,i]ch c thc hin khi iu kin
D[i]>D[m]+A[m,i]c tha mn, tc l gi tr ca mng D ti nh i thay i, iu ny
cng ng ngha vi vic di ng i ngn nht t nh u n nh i s bng di
ng i ngn nht t nh u n nh m cng vi gi tr A[m,i], nh vy ng i ngn
nht t u n i s i qua m. Kt lun m l nh trc ca i. Vi kt lun ny, trong thut
ton Dijkstra ta cn phi lu li nh trc ca nh i l m khi gn li gi tr ca D[i].
Lu : Do lc u ta khi ti D[i]:=A[u,i] nn ta cng khi to nh trc ca nh i l
nh u.
Thut ton c sa li nh sau:
PROCEDURE Dijkstra(A,u,v);
BEGIN
S=rng;
D[i]:=A[u,i];luu[i]:=u; (1iN)
a u vo S
m:=u;
WHILE m<>v DO
BEGIN
Chn m sao cho m S v m=min(D[i]) (1iN)
a m vo S
FOR tt c ln cn i ca m DO
IF i S v D[i]>D[m]+A[m,i] THEN
BEGIN
D[i]:=D[m]+A[m,i]
Luu[i]:=m;
END;
END;
END;

Kt qu: ng i ngn nht t u n v c lu trong mng mt chiu LUU, gi tr ca


ng i ngn nht t u n v v D[v]
i vi gii thut trn ta c th m t li qu trnh tm kim ng i nh sau:

63

Bc
Khi
to
1
2
3
4
5

Tp S

nh
c
chn

1
1, 6
1, 6, 5
1, 6, 5, 4
1, 6, 5, 4, 3
1, 6, 5, 4, 3,
2

6
5
4
3

20(1) (1) 11(1) (1) 2(1)

20(1)
20(1)
17(4)
17(4)

(5)

(5)

16(4)
16(4)

11(1)
10(5)
10(5)
10(5)

7(6)
7(6)
7(6)
7(6)

2(1)
2(1)
2(1)
2(1)

* Gi tr ca mng LUU nm ch s trn trong 5 ct cui. LUU c gi tr


1
2
3
4
5
6
i
4
5
6
1
Luu[i] X 4
Vi cch lu ng i nh vy ta c th tm ng i ngn nht t nh 1 n nh 2
bng cch d ngc ng i: nh cui cng l nh 2, trc 2 l 4, trc 4 l 5, trc 5 l
6, trc 6 l 1, suy ra ng i ngn nht t 1 n 2 l: 24561. Vi mng LUU
nh trn, ta c on chng trnh in ng i nh sau:
WHILE u<>v DO
BEGIN
Write( u,);
U:=Luu[u];
END;
Write(v);

2. Mt ngun mi ch
Bi ton: Cho th G=(V,E) c cc nh c nh s th t t 1 n N. Yu cu tm
ng i ngn nht t nh u n tt c cc nh cn li.
T bi ton mt ngun mt ch ta c th p dng tm ng i ngn nht t mt nh
ngun u n tt c cc nh cn li bng cu lnh: FOR i:=1 TO n DO Dijkstr(A,u,i); Tuy
nhin, trong v d trn, thut ton Dijkstra p dng cho vic tm ng i ngn nht t nh
1 n nh 2, tt c cc nh c a vo tp S, iu ny cng ng ngha vi vic trong
mng D, gi tr D[i] l di ng i ngn nht t nh 1 n nh i v trong mng Luu
cng tm c ng i ngn nht t nh 1 n cc nh cn li. V d:
+ nh 1 n nh 6: 61 ( di 2)
+ nh 1 n nh 5: 561 ( di 7)
+ nh 1 n nh 4: 4561 ( di 10)
64

+ nh 1 n nh 3: 34561 ( di 16)
gii quyt mt bi ton trn ta ch cn sa li thut ton Dijkstra nh sau:
PROCEDURE SHORTEST-PATH(A,u);
BEGIN
S=rng;
D[i]:=A[u,i];luu[i]:=u; (1iN)
a u vo S
m:=u;
WHILE s nh trong S<N DO
BEGIN
Chn m sao cho m S v m=min(D[i]) (1iN)
a m vo S
FOR tt c ln cn i ca m DO
IF i S v D[i]>D[m]+A[m,i] THEN
BEGIN
D[i]:=D[m]+A[m,i]
Luu[i]:=m;
END;
END;
END;

* Cch tm ng i da vo mng LUU c thc hin ging bi ton mt ngun mt


ch
3. Bi ton mi ngun mi ch
Trong thut ton mt ngun mi ch, kt qu l mng LUU dng lu ng i ngn
nht t 1 nh n cc nh cn li. Bng cch s dng mng ny ta c th a ra ng i
ngn nht cng nh di ngn nht gia hai nh u v v bt k bng on chng trnh
sau:
DOdai:=0;
WHILE u<>v DO
BEGIN
Write(u,)
DOdai:=DOdai+A[u,luu[u]];
U:=luu[u];
END; Write(v);

Ngoi cch p dng gii thut Dijkstra ngi ta thng dng n gii thut Floyd tm
ng i ngn nht gia tt c cc nh trong th

65

VII. CY KHUNG V CY KHUNG CC TIU


1. Cy khung
Bi ton: Trong mt khu du lch c N im vui chi, ngi ta tnh ton nu phi xy ht
tt c cc con ng i t mt im bt k n cc im cn li th tn qu nhiu tin, do
vy ch cn xy dng 1 s con ng cn thit t 1 im c th i n tt c cc im
cn li. V d vi khu du lch c 6 im vui chi, nu xy dng ht tt c cc con ng t
1 nh n 5 nh cn li th ta c m hnh 6.a, tuy nhin ta ch cn xy dng 5 con ng
nh hnh 6.b hoc 6.c tit kim chi ph:

a)

b)

c)

Hnh 6
Hnh 6.b v 6.c l hai cch xy dng cc con ng sao cho t mt nh trong th
c ng i n tt c cc nh cn li. Ta c bi ton tng qut: Cho th lin thng
G=(V,E), trong E c mt s cnh. Hy tm cch loi b mt s cnh sao cho th vn
lin thng nhng khng c chu trnh n. Ta ni y l bi ton tm cy khung ca mt
th. th 6.b v 6.c l hai cy khung tm kim theo chiu su v tm kim theo chiu rng
ca th c nh xut pht l A. Ngoi ra ta c th lit k mt s cy khung khc ca th
hnh 6

Cy khung l th lin thng v khng c chu trnh n


2. Tm cy khung theo chiu su v cy khung theo chiu rng
tm cy khung ca mt th ta ng dng hai gii thut duyt th l tm kim theo
chiu su (DFS Depth-First Search) v tm kim theo chiu rng (BFS-Breadth-First
Search)
Bi ton tng qut: Cho th G=(V,E) gm N nh v M cung. Hy tm cy khung theo
chiu su v cy khung theo chiu rng
D liu vo: Cho bi tp tin vn bn DFS.INP (Hnh 5a)
66

+ Dng u ghi hai s nguyn N v M


+ M dng tip theo, mi dng gm 2 s nguyn l mt cung ca th
D liu ra: c ghi vo 2 tp tin vn bn:
+ Tp tin SAU.OUT gm N-1 dng, mi dng cha 2 s nguyn l 1 cung trong cy
khung (hnh 5b)
+ Tp tin RONG.OUT gm N-1 dng, mi dng cha 2 s nguyn l 1 cung trong cy
khung (hnh 5c)
V d:
DFS.INP
8 10
12
13
24
25
36
37
48
58
68
78
a. Cy khung theo chiu su

SAU.OUT
12
24
48
85
86
63
37

RONG.OUT
12
13
24
25
36
37
48

Khi duyt th theo DFS, ta s c c mt cy khung theo chiu su, tuy nhin th tc
trn ch a ra th t cc nh c duyt. Trong bi ton v d cn phi a ra cc cung
ca cy khung, do vy khi nh v tha mn yu cu l nh k ca u v v cha c thm th
ta a ra cung (u,v) l mt cung trong cy khung cn tm. Th tc DFS c sa li:
PROCEDURE
DFS_KH(u:integer);
BEGIN
nh du u c chn
FOR cc ln cn v ca u DO
IF v cha c chn THEN
BEGIN
In cung (u, v);
DFS(v);
END;
END;

67

b. Cy khung theo chiu rng


Tng t nh tm cy khung theo chiu su, ta cng ch cn bin i mt cht trong gii
thut BFS tm cy khung theo chiu rng
PROCEDURE BFS(u)
BEGIN
Push(u,Q); {a u vo Queue;}
WHILE Q cha rng o
BEGIN
u:=POP(Q); {ly 1 nh trong Q ra v gn cho u}
FOR cc ln cn v ca u DO
IF v cha c thm THEN
BEGIN
In cung (u,v);
Push(v,Q);
END;
END;
END;

3. Cy khung cc tiu
a. Khi nim
i vi bi ton tm cy khung ta khng quan tm n vic c phi l th G c
trng s hay khng v ch cn tm ra mt th lin thng khng c chu trnh n c y
cc nh ca G l c. Tuy nhin trong th c trng s, cc cy khung li c gi tr khc
nhau, gi tr ca cy khung l tng trng s ca cc cung trong cy khung , vn l phi
tm ra cy khung c gi tr nh nht. Cy khung nh vy gi l cy khung cc tiu
b. Bi ton:
Cho th c trng s G= (V,E) gm N nh v M cung. Yu cu tm ra cy khung c gi
tr nh nht ca G
V d: th hnh 7 v cy khung cc tiu tng ng vi n

a. th G

b. Cy khung cc tiu
Hnh 7
68

Cy khung cc tiu cng l mt cy khung nn n phi m bo cc tnh cht l lin


thng v khng c chu trnh. Tt nhin s cung ca n bng n-1 nh
gii bi ton ny ta c nhiu cch khc nhau
Cch 1: Tm tt c cc cy khung ca th G ri so snh c c cy khung c gi
tr nh nht.
Nhn xt: y l cch lm m nhiu ngi s ngh n u tin khi xy dng cy khung
cc tiu ca mt th, tuy nhin cch lm ny c nhiu nhc im nh phc tp ln,
kh tm cy khung, mt nhiu thi gian
Cch 2 (gii thut Prim): To mt th T c 2 nh thuc cung c trng s nh nht
trong G. a cung (1, 3) c trng s nh nht trong G vo T. i vi hai nh 1, 3 c cc
cung lin thuc l (1, 2); (1, 4); (2, 3); (3, 4); (3, 5); (3, 6) trong cung (3, 6) c trng s nh
nht (bng 10) nn ta a cung ny vo T. 3 nh 1, 3, 6 trong G c cc cung lin thuc vi n
l (1, 2); (1, 4); (2, 3); (3, 4); (3, 5); (4, 6), cung (4,6) c trng s nh nht nn a (4,6) vo
T. Cung tip theo c a vo T l (1, 4) hoc (2, 3), ta thy rng khi a (1, 4) vo T th
trong T xut hin chu trnh cn khi a (2, 3) vo thi khng xut hin chu trnh nn ta chn (2,
3). Cung tip theo l (2, 5). n y ta c T l th lin thng, khng c chu trnh, bao gm
tt c cc nh trong G v c 5 cung. Ta ni T l cy khung cc tiu ca G
tng ca cch lm trn l: lc u chn 1 cung nh nht trong G a vo T, sau
chn 1 cung nh nht trong G lin thuc vi 1 nh trong T a vo T vi iu kin cung
a vo T khng to ra chu trnh trong T. Qu trnh ny lp li n khi s cung trong T bng
s nh -1
Cch 3 (Gii thut Karuskal): To th T bao gm cc nh trong G v tp cung bng
rng. Trong G, chn cung c trng s nh nht l (1, 3) a vo T v loi khi G, tip
theo chn cung (4, 6) a vo T v (4, 6) l nh nht trong G (sau khi xa (1, 3)) v khi
a vo T khng to ra chu trnh. Vi quy lut chn cung nh nht trong G a vo T v
khng to ra chu trnh trong T th cc cung tip theo c a vo T l (2, 5), (3, 6), (2, 3).
Ch : Sau khi chn cung nh nht trong G, d c a vo T hay khng th ta cng thc
hin xa cung trong G.
tng ca cch lm trn l: Chn cung nh nht trong G a vo T vi iu kin n
khng to ra chu trnh trong T, qu trnh c lp li cho n khi s cung trong T bng s
nh -1
tng tm cy khung cc tiu theo cch 2 v 3 l tng ca hai gii thut Prim v
Karuskal. By gi ta i vo 2 gii thut ny
c. Gii thut Prim
PROCEDURE Prim(G) {tm cy khung cc tiu
ca th G theo gii thut Prim}
BEGIN
Chn cung nh nht trong G a vo T
FOR i:=1 TO s nh-2 DO
BEGIN
69

a cung c trng s nh nht trong G v


lin thuc vi 1 nh trong T vo T
END; {T l cy khung cc tiu ca G}

d. Gii thut Karuskal


PROCEDURE Karuskal(G) {tm cy khung cc tiu
ca th G theo gii thut Karuskal}
BEGIN
To T rng;
WHILE s cung trong T< s nh -1 DO
BEGIN
v:= cung trong G c trng s nh nht;
a v vo T;
IF T c chu trnh THEN loi v khi T;
Loi v khi G;
END;

e. So snh Prim v Karuskal


Trong Prim ta chn cnh c trng s nh nht v lin thuc vi mt nh trong T, tc l v
s c mt nh trong T v 1 nh ngoi T, cn trong karuskal, ta cng chn 1 cnh c trng
s nh nht nhng khng nht thit phi lin thuc vi mt nh trong G. Chnh v vy trong
Prim khi a v vo T ta khng cn kim tra T c chu trnh hay khng.
BI TP
Bi 1: D tic bn trn
C n nh khoa hc nh s 1, 2, ..., n v 26 lnh vc khoa hc k hiu A, B, C, ..., Z.
Thng tin v ngi th i c cho bi mt xu k t Si gm cc ch ci in hoa th hin
nhng lnh vc khoa hc m ngi bit.
V d: S2 = 'ABCXYZ' cho bit nh khoa hc th 2 c hiu bit v cc lnh vc A, B, C,
X, Y, Z.
Mt ln c n nh khoa hc n d mt ba tic. Ch nhn ca ba tic nh xp n nh
khoa hc ngi quanh mt bn trn, nhng mt vn khin ch nhn rt kh x l cc nh
khoa hc ca chng ta c hiu bit x hi tng i km, nn nu nh phi ngi cnh mt ai
khng hiu bit g v cc lnh vc ca mnh th rt kh ni chuyn.
Vy hy gip ch nhn xp n nh khoa hc ngi quanh bn trn sao cho hai ngi bt k
ngi cnh nhau phi c t nht mt lnh vc hiu bit chung, cc nh khoa hc ca chng
ta khng nhng n ngon m cn c th tr chuyn rm r.
D liu: Vo t file vn bn PARTY.INP. Trong :
Dng 1: Ghi s n
70

n dng tip theo, dng th i ghi xu k t Si


Kt qu: Ghi ra file vn bn PARTY.OUT gm n dng.
Dng th i ghi nh khoa hc ngi ti v tr i ca bn (Cc v tr trn bn trn c
nh s t 1 n n theo chiu kim ng h)
Lu :
n 20
Nu c nhiu cch xp th ch cn ch ra mt cch
Nu khng c cch xp th ghi vo file PARTY.OUT mt dng: NO SOLUTION
V d:
PARTY.INP
6
AV
DIQR
DV
CQ
AC
DR

PARTY.OUT
1
3
6
2
4
5

PARTY.INP
10
AX
BI
ABTX
AS
IK
KS
BE
AB
EK
AK

PARTY.OUT
1
3
2
5
6
4
8
7
9
10

PARTY.INP
6
AB
BC
CD
DE
EF
FG

PARTY.OUT
NO SOLUTION

Hng dn:
Ta chuyn bi ton v th: Mi nh khoa hc tng ng vi mt nh ca th, trn
th c cung (i,j) nu nh khoa hc th i c chung 1 lnh vc vi nh khoa hc th j.
Sau khi chuyn v th ta ch cn p dng thut ton tm kim chu trnh i qua tt c
cc nh
Bi 2: Ba tic
Mt ba tic ln c N khch tham d trong mt cn nh c nhiu phng, mi ngi
khch u c pht mt phiu n c ghi s th t khi n tham gia. Tuy nhin h c th
khng quen nhau. trnh vic xp mt ngi khch vo mt phng m ngi khng
bit tt c mi ngi trong phng, ban t chc quyt nh lp ra danh sch nhng ngi
quen bit nhau sau sp xp h vo cng mt phng. Danh sch nhanh chng c lp ra
di dng hai ngi quen nhau s c ghi trn mt dng bng s th t ca h, tuy nhin
cng vic chia nhm li gp kh khn v s lng khch tham d qu ng. Da vo danh
71

sch c, hy gip ban t chc chia nhm v cho bit s lng khch ca nhm ng nht.
Kch thc v s lng ca phng khng hn ch
D liu vo: Tp tin vn bn NHOM.INP
+ Dng u ghi s nguyn dng N (2N10000)
+ Cc dng tip theo ghi hai s x v y vi ngha hai ngi khch c s th t x v y
quen nhau
D liu ra: Ghi vo tp tin vn bn NHOM.OUT
+ Danh sch mi nhm c ghi trn mt dng
+ Dng cui cng l s lng ca nhm khch ng nht
Cc s cch nhau t nht mt du cch
V d:
NHOM.INP
10
16
17
23
28
38
39
45
4 10
5 10
89

NHOM.OUT
167
2389
4 5 10
4

Hng dn: p dng gii thut tm kim trn th xc nh cc thnh phn lin
thng
Bi 3: Cy khung
Cho th G=(V,E) c N nh v M cung. Yu cu vit chng trnh tm cy khung theo
chiu su v cy khung theo chiu rng ca th G.
D liu vo: tp tin vn bn CAYKHUNG.INP
+ Dng u gm 2 s nguyn N v M
+ M dng tip theo, mi dng 2 s nguyn l mt cung ca G
D liu ra: tp tin vn bn CAYKHUNG.OUT
+ N-1 dng u tin, mi dng ghi hai s nguyn l mt cung trong cy khung theo chiu
su
72

+ N-1 dng tip theo, mi dng ghi hai s nguyn l mt cung trong cy khung theo
chiu rng
V d:
CAYKHUNG.INP
68
12
15
23
26
36
34
46
56

CAYKHUNG.OUT
12
23
34
46
65
12
15
23
26
34

Hng dn: S dng gii thut tm kim theo chiu rng v tm kim theo chiu su
tm cy khung tng ng
Bi 4: Ni mng
Cho N my tnh c nh s t 1 n N. Chi ph ni mng gia my i v my j l Cij.
Yu cu: Tm cch ni dy cp sao cho cc my tnh trong mng l u kt ni c vi
nhau v chi ph l nh nht
D liu vo: c t file vn bn NOIMANG.INP c ni dung
+ Dng u l s nguyn N
+ Tip theo l mt ma trn kch thc NxN gm cc s nguyn, trong gi tr ca (i,j)
cho bit khong cch t my i n my j. Trn cng mt dng cc s cch nhau mt du
cch
Gii hn: 2N1000
D liu ra: Ghi vo file vn bn NOIMANG.OUT gm
+ Dng 1 l chi ph nh nht
+ T dng 2 tr i mi dng l mt cp cnh c ni
NOIMANG.INP
6
0 16 3 12 0 0
16 0 12 0 7 0

NOIMANG.OUT
37
13
25
73

3 12 0 13 16 10
32
12 0 13 0 0 5
36
0 7 16 0 0 16
64
0 0 10 5 16 0
Hng dn: p dng gii thut Karuskal hoc Prim tm cy khung cc tiu
Bi 5: Trong lng c mt ph ng ni ting khoe khoang, mt hm thy m tr con ang
chi, khe rung t ca mnh, ph ng thch : Ph ng c rt nhiu rung t, cc
tha rung c nh s t 1 n N v u c ng i n nhau, tr con hy ch ra tt
c cc cch ng ta c th i t tha rung th i n tha rung th j sao cho mi tha
rung c i qua khng qu 1 ln. m tr ln lt k ra cc ng i nhng do s lng
rung t ca ph ng qu nhiu nn k mi m khng ht.
Yu cu: Hy lp trnh gip tr con trong lng thc hin lit k cc ng i theo yu
cu ca ph ng
D liu vo: file vn bn DD.INP
+ Dng u gm 3 s nguyn N, u, v (2N1000; 1u,vN)
+ Cc dng tip theo gm 2 s nguyn i v j l mt cung trong th G, hai s cch nhau
bng 1 du cch
D liu ra: file vn bn DD.OUT
+Mi ng i c ghi trn mt dng
+ Hai s trn mi dng cch nhau bng 3 k t -->
V d:
DD.INP
515
12
13
14
24
25
34
45

DD.OUT
1-->2-->4-->5
1-->2--> 5
1-->3--> 4-->2-->5
1-->3--> 4--> 5
1-->4-->2-->5
1-->4-->5

Bi 6: Bn Nam va mi chuyn nh n thnh ph XYZ, thnh ph ny Nam c mt


ngi bn thn l An, sau khi lin lc An v Nam quyt inh gp nhau ti mt qun caf
trong thnh ph. V mi chuyn n nn Nam khng bit chn a im no v cng khng
bit ng i. a ch nh ca An, Nam v cc qun caf trong thnh ph c nh s t 1
n N, hy gip 2 bn tm qun caf gn nh hai bn nht v ch ng cho Nam n qun.
74

D liu vo: t file DIADIEM.INP


+ Dng u ghi 3 s nguyn N, u, v trong u v v l a im ca nh bn Nam v An
+ Cc dng tip theo mi dng ghi 3 s nguyn x, y, z trong z l di ng i t
im x n y
D liu ra: ghi vo file DIADIEM.OUT
+ Dng u l a im m ca qun caf m hai bn chn
+ Dng th 2 l tng tng di ng i ca hai bn Nam v An n m
+ Dng th 3 l ng i t nh bn Nam n qun caf m
V d:
DIADIEM.IPN
735
1 2 14
1 7 10
2 3 13
1 5 15
3 4 28
3 5 30
3 7 35
4 5 40
563
675

DIADIEM.OUT
36
6
653

Hng dn: p dng gii thut Dijkstral tm ng i ngn nht t nh An v nh


Nam n tt c cc quan caf trong thnh ph, qun caf c chn l qun c tng di
ngn nht t nh Nam v An n qun

75

MC LC
Chuyn : PHN TCH THIT K THUT TON................................................................... 1
PHN 1: THUT TON V PHN TCH THUT TON ........................................................ 1
I. KHI NIM BI TON V THUT TON ......................................................................... 1
1. Khi nim bi ton ................................................................................................................... 1
2. Khi nim thut ton: ............................................................................................................... 1
3. Cc bc gii bi ton trn my tnh:....................................................................................... 1
a. Xc nh bi ton: ............................................................................................................ 1
b. Thit k hoc la chn thut ton: ................................................................................... 2
c. Vit chng trnh:............................................................................................................. 2
d. Kim th v hiu chnh: ................................................................................................... 2
e. Vit ti liu........................................................................................................................ 3
II. PHN TCH THUT TON................................................................................................... 3
1. phc tp ca thut ton: ...................................................................................................... 3
a. Dng mu chun .............................................................................................................. 3
b. Phn tch thut ton ......................................................................................................... 3
2. K php phc tp ca thut ton .......................................................................................... 4
3. Cc cch xc nh phc tp ca thut ton.......................................................................... 4
a. Quy tc hng s ................................................................................................................ 4
b. Quy tc cng ..................................................................................................................... 4
c. Quy tc ly max ................................................................................................................ 4
d. Quy tc nhn .................................................................................................................... 5
4. Cc thut ng thng dng cho phc tp thut ton ........................................................... 5
5. nh gi thi gian thc hin chng trnh .............................................................................. 5
6. Mt s v d ............................................................................................................................. 6
BI TP .......................................................................................................................................... 7
PHN 2: THIT K THUT TON .............................................................................................. 9
I. THUT TON DUYT ............................................................................................................. 9
1. Phng php: ............................................................................................................................ 9
2. Gii cc bi ton cu hnh t hp bng thut ton duyt........................................................ 10
a. T hp: ........................................................................................................................... 10
b. Chnh hp lp: ................................................................................................................ 12
c. Chnh hp khng lp: ..................................................................................................... 13
3. Bi ton 8 qun hu ................................................................................................................ 15
BI TP ........................................................................................................................................ 17
II. THUT TON SP XP....................................................................................................... 18
1. Tm quan trng ca bi ton sp xp: .................................................................................... 18
2. Sp xp trong v sp xp ngoi .............................................................................................. 18
3. Pht biu bi ton: .................................................................................................................. 18
4. Cc thut ton sp xp n gin: ............................................................................................ 19
a. Sp xp ni bt (sp xp tro i - Bubble Sort): .......................................................... 19
b. Sp xp chn (Selection Sort): ....................................................................................... 20
c. Sp xp thm dn (sp xp xen - Insertion Sort): ........................................................... 22
5. Thut ton sp xp nhanh (QuickSort): .................................................................................. 23
6. Thut ton sp xp ha nhp (trn) hai ng trc tip (MergeSort): ................................... 24
a. Trn hai dy sp xp: ................................................................................................ 24
b. Ha nhp hai ng trc tip ...................................................................................... 26
BI TP ........................................................................................................................................ 27
76

Chuyn : PHNG PHP QUY HOCH NG ................................................................... 31


I. GII THIU ............................................................................................................................. 31
II. CU TRC CHUNG CA CHNG TRNH CHNH: ................................................... 32
III. CC BC GII BI TON QUY HOCH NG: .............................................. 32
IV. MT S V D ..................................................................................................................... 32
1. Dy Fibonaci: ......................................................................................................................... 32
2. T hp chp k ca n phn t: ................................................................................................. 33
3. Dy con khng gim lin tc di nht .................................................................................... 34
4. Tm dy con khng gim di nht: ......................................................................................... 34
5. Bi ton bal 1:....................................................................................................................... 36
6. Bi ton ba l 2 ....................................................................................................................... 38
7. Bi ton ba l 3 ....................................................................................................................... 40
8. Bi ton xu con chung di nht ............................................................................................ 42
9. Bi ton chia ko .................................................................................................................... 44
10. Bi ton i tin ................................................................................................................... 44
V. BI TP ................................................................................................................................... 45
Chuyn : L THUYT TH ................................................................................................ 51
I. MT S KHI NIM ............................................................................................................. 51
II. BIU DIN TH ............................................................................................................... 52
1. Danh sch nh k ................................................................................................................ 52
2. Ma trn k ............................................................................................................................. 53
3. Danh sch cnh ..................................................................................................................... 53
III. DUYT TH .................................................................................................................... 54
1. Tm kim theo chiu su ........................................................................................................ 54
a. tng: .......................................................................................................................... 54
b. Gii thut ........................................................................................................................ 54
c. Chng trnh: ................................................................................................................. 54
d. M rng: {Kh quy} .................................................................................................. 55
2. Tm kim theo chiu rng ...................................................................................................... 56
a. tng: .......................................................................................................................... 56
b. Gii thut: ...................................................................................................................... 56
c. Chng trnh: ................................................................................................................. 56
IV. TNH LIN THNG TRONG TH .............................................................................. 57
V. CHU TRNH TRONG TH ............................................................................................. 59
VI. NG I NGN NHT.................................................................................................... 60
1. Mt ngun mt ch ............................................................................................................... 60
a. Bi ton: ........................................................................................................................ 60
b. Gii thut ........................................................................................................................ 61
c. Nhn xt v gii thut ..................................................................................................... 63
d. Vn ng i trong thut ton Dijkstra .................................................................... 63
2. Mt ngun mi ch ............................................................................................................... 64
3. Bi ton mi ngun mi ch ................................................................................................. 65
VII. CY KHUNG V CY KHUNG CC TIU .................................................................. 66
1. Cy khung............................................................................................................................... 66
2. Tm cy khung theo chiu su v cy khung theo chiu rng ................................................ 66
a. Cy khung theo chiu su ............................................................................................... 67
b. Cy khung theo chiu rng ............................................................................................. 68
3. Cy khung cc tiu ................................................................................................................. 68
a. Khi nim ....................................................................................................................... 68
77

b. Bi ton: ......................................................................................................................... 68
c. Gii thut Prim ............................................................................................................... 69
d. Gii thut Karuskal ........................................................................................................ 70
e. So snh Prim v Karuskal .............................................................................................. 70
BI TP ........................................................................................................................................ 70

TI LIU THAM KHO


[1].

Ti liu gio khoa chuyn Tin Quyn 1, 2, 3 H S m (ch bin)

[2].

Tuyn chn cc bi ton Tin hc Nguyn Xun My (ch bin)

[3].

150 Bi ton Tin hc L Minh Hong

[4].

Mt s vn chn lc trong Tin Hc Nguyn Xun My

[5].

Cu trc d liu v gii thut L Minh Hong

[6].

Cu trc d liu v gii thut Xun Li

[7].

Gii thut v lp trnh L Minh Hong

[8].

Programming Challenges Miguel A. Revilla

[9].

The Algorithm Design Manual Steven S. Skiena

78

You might also like