Professional Documents
Culture Documents
ca Tin hc
Bui 3:
Cu trc d liu v thut gii
2 M ha
Khi nim Qui
3 M ha
Chng trnh qui
4 M ha
Mt nh nghi qui phi c 2 thnh phn:
5 M ha
V d: Tnh UCLN(x,y) theo thut ton Euclide
(a)UCLN(x,y) = x nu y = 0
(b)UCLN(x,y) = UCLN(y, phn d ca x/y) nu y<>0
6 M ha
THUT GII QUAY LUI
BACK TRACKING
7 M ha
Tng quan thut gii Quay lui (Back Tracking)
Cu hnh mt li gii X1 X2 X3 Xn
Tp kh nng K1 K2 Km
8 M ha
M hnh thut gii quay lui:
Xc nh phn t Xi bng quy
void Try( int i )
{
If (Xi l phn t cui cng trong cu hnh)
< Thng bo cu hnh tm c>;
else
for ( mi Kj thuc tp kh nng c cho Xi)
[ if ( Chp nhn Kj ) ]
{
Th chn Kj cho Xi;
Try( i+1); //Gi quy xc nh phn t Xi+1
B ghi nhn Kj chn cho Xi chn kh nng khc;
}
}
9 M ha
Hai im mu cht quyt nh phc tp ca bi ton l:
1. Xc nh tp kh nng c: Ph thuc vo vic phn tch
nhu cu d liu ca tng thnh phn trong cu hnh
2. Kim tra kh nng c phi ph hp vi thnh phn cn
xc nh.
10 M ha
Bi ton: Lit k cc dy nh phn c di n
Phn tch:
Biu din cu hnh dy nh phn di dng: X[1..n]
Tp kh nng c cho mi phn t Xi l {0, 1}
Thut gii xc nh phn t Xi ca dy nh phn nh sau:
void Try(int i)
{
if ( i > n ) <Thng bo cu hnh tm c>;
else
for (int j =0; j<= 1; j++)
{
X[ i ] = j;
Try( i + 1 );
}
}
11 M ha
M i tun: ch ra hnh trnh ca qun M xut pht
t mt trn bn c i qua tt c cc cn li ca
bn c, mi ng 1 ln.
Phn tch:
Cu hnh li gii l BC[1..n][1..n]
cha s th t hnh trnh ca 2
(u, v)
qun M.
Tp kh nng cha cc gi tr
dng tnh ta cc k tip 1
(x, y)
dx[1..8] = {-2,-1, 1, 2, 2, 1, -1, -2}
dy[1..8] = { 1, 2, 2, 1, -1, -2, -2, -1}
iu kin chn kh nng cho
bc i th i l c chn
phi :
Thuc bn c
V cha i qua
12 M ha
Thut gii xc nh bc i th i ca qun M
void Try(int i)
{ int j,u,v;
if (i > n*n) <Thng bo cu hnh tm c>;
else
for ( j =1; j <= 8 ; j++)
{
u =x+dx[j]; v = y+dy[j];
if (u >= 1 && u <= n && v >= 1 && v<=n && BC[u,v] = 0)
{
x = u; y = v;
BC[u,v] = i;
Try(i+1);
x = u-dx[j]; y = v-dy[j];
BC[u,v] = 0;
}
}
}
13 M ha
Bi ton:
Lit k cc hon v ca dy s {1, 2, .., n}
14 M ha
Thut gii xc nh phn t Xi ca mt hon v
void Try(int i)
{ if ( i > n ) <Thng bo cu hnh tm c>;
else
for (int j = 1; j<= n; j++)
if (F[j] = 0)
{
X[i] = j;
F[j] = 1;
Try( i + 1 );
F[j] = 0;
}
}
15 M ha
V d: Lit k cc tp con k phn t
ca tp S = {1, 2, .., n}. Trong (k <= n)
16 M ha
Thut gii xc nh phn t Xi ca mt tp con
void Try(int i)
{ if ( i > K ) <Thng bo cu hnh tm c>;
else
for (int j = 1; j<= N; j++)
if (F[j] = 0)
{
X[i] = j;
F[j] = 1;
Try( i + 1 );
F[j] = 0;
}
}
17 M ha
Mt cch gii khc ca bi ton tp con
18 M ha
Thut gii xc nh phn t Xi ca mt tp con
void Try(int i)
{
if ( i > K ) <Thng bo cu hnh tm c>;
else
for (int j = X[i-1]+1; j<= N-K+i; j++)
{
X[i] = j;
Try( i + 1 );
}
}
19 M ha
K THUT NHNH CN
20 M ha
Cng dng
21 M ha
M hnh nh gi nhnh cn
trong thut ton quay lui:
// Khi to cu hnh BESTCONFIG xu nht
void Init()
{
<Khi to mt cu hnh BESTCONFIG xu nht>
}
//M hnh thut ton quay lui xc nh X[i] c nh gi nhnh cn
void Try( int i )
{
If (Xi l phn t cui cng trong cu hnh)
<Cp nht BESTCONFIG>;
else
for ( mi Kj thuc tp kh nng c cho Xi)
[ if ( Chp nhn Kj ) ]
{
Th chn Kj cho Xi;
if (cn hy vng tm ra cu hnh tt hn BESTCONFIG) Try( i+1);
B ghi nhn Kj chn cho Xi chn kh nng khc;
}
}
22 M ha
Bi ton ngi du lch
2
1 3 0 3 2 1
3 3 0 1 2
1
1 2 1 0 4
2
1 2 4 0
2 4
4 Ma trn chi ph C
23 M ha
Phn tch:
24 M ha
Cc vn cn thc hin khi xc nh thnh phn X[i]:
1. Kim tra kh nng c cho thnh phn X[i] hp l: kh nng
cha c chn cho cc thnh phn trc X[i].
2. Ghi nhn tng chi ph cho hnh trnh t X[1] n X[i].
3. D on cu hnh li gii tt hn hay xu hn BESTCONFIG
25 M ha
2- Ghi nhn tng chi ph
cho hnh trnh t X[1] n X[i]
2 4
4
26 M ha
3- D on cu hnh li gii
tt hn hay xu hn BESTCONFIG
27 M ha
Thut gii xc nh thnh phn X[i]
void Try(int i)
{ if ( i > n )
if ( T[n] + C[x[n] , 1] < Smin )
{
Smin = T[n] + C[x[n] , 1];
Ghi nhn X l hnh trnh tt nht: Bestway = X;
}
else
for (int j = 2; j <= n; j++)
if (F[ j ] = 0)
{
X[ i ] = j; F[ j ] = 1;
T[ i ] = T[i -1] + C[ x[i -1], j];
if ( T[ i ] + (n-i+1)*Cmin < Smin) Try( i + 1 );
F[ j ] = 0;
}
}
28 M ha
Bi ton chui 123
V d: n = 9. Chui no sau y hp l?
131213212
123212313
123212321
29 M ha
Phn tch
30 M ha
Cc vn cn thc hin khi xc nh thnh phn X[i]:
1. Kim tra kh nng c cho thnh phn X[ i ] hp l: ngha l
chui X[1..i] khng c 2 chui con lin k ging nhau.
2. Ghi nhn s lng s 3 c trong chui X[1..i]
3. D on cu hnh li gii tt hn hay xu hn BESTCONFIG
31 M ha
1- Kim tra chui X[1..i] khng c 2 chui con
lin k ging nhau.
V d: int ChuoiHopLe(int i)
123212321 {
123212321 for (L = 1; L <= i / 2; L++)
123212321 if ( X[(iL+1) .. i] = X[(i2L+1) .. (i- L)] )
123212321 return 0;
123212321 return 1;
}
32 M ha
2- Ghi nhn s lng s 3 trong chui X[1..i]
33 M ha
3- D on cu hnh li gii
tt hn hay xu hn BESTCONFIG
131213212 Do 2 chui con k phi khc nhau nn:
131213212 Trong 4 s lin tip phi c mt s 3.
131213212 Do , mt dy con c di l k phi c t nht (k / 4) s 3.
131213212 Sau khi xc nh thnh phn X[i] v ghi nhn s lng s 3
trong T[i], ta cn (n i) thnh phn cn xc nh.
131213212
Do , cu hnh tm c phi c t nht (T[i] + (n-i)/4) s
131213212 lng s 3.
Nu (T[i] + (n-i)/4) < Min3 th c kh nng tm c cu hnh
tt hn BESTCONFIG, ngc li th cu hnh tm c s
khng tt hn BESTCONFIG.
34 M ha
Thut gii xc nh thnh phn X[i]
void Try(int i)
{ if ( i > n )
{
Min3 = T[n];
Ghi nhn X l chui tt nht: BestStr = X;
}
else
for (int j = 1; j <= 3; j++)
{
X[i] = j;
if (ChuoiHopLe( i ))
{
if (j == 3) T[i] = T[i -1] + 1;
else T[i] = T[i -1];
if ( T[ i ] + (n - i)/4 < Min3) Try( i + 1 );
}
}
}
35 M ha
Gii thut chia tr
(Devide and conquer)
36 M ha
Tng quan gii thut chia tr
37 M ha
Mt s bi ton tiu biu
Tm nh phn
QuickSort
Nhn s nguyn ln
38 M ha
Tm nh phn trn mng sp th t
39 M ha
Thut gii: Tm nh phn trn mng sp th t
40 M ha
Bi ton tng t:
Tm ng i cho xe c ti trng ln nht
C N thnh ph, cho bit mi con ng ni t thnh ph i n thnh ph j
(vi i <> j) c th cho xe vi trng ti khng qu C[i, j] i qua.
Cho thnh ph xut pht x v thnh ph ch y. Hy tm mt ng i t
thnh ph x ti thnh ph y m trng ti ln nht c th c.
tng:
Khi to: Cmax = MAX{Cij} vi mi i khc j; Cmin =Min{Cij}
Xt on [ Cmin , Cmax]
1. t Cm = (Cmax+Cmin) div 2.
2. Ta kim tra xem c tn ti ng i t x ti y cho xe c trng ti Cm hay
khng?
a) Nu tn ti ng i, ta ghi nhn kt qu v xt tip on [Cm+1,Cmax].
b) Nu khng tn ti ng i, ta chuyn sang xt on [Cmin ,Cm -1].
3. Lp li cho ti khi on c gi tr u ln hn gi tr cui.
41 M ha
Thut gii chn l trnh c ti trong ln nht
void Chon(int Cmin, int Cmax)
{
if (Cmin <= Cmax)
{
Cm = (Cmin + Cmax)/2;
d = 0; // di l trnh
LoTrinh[0] = x; // Mng ghi nhn l trnh i t x n y
if (TonTai(LoTrinh, d, x, Cm ) )
{
GhiNhan(LoTrinh, d, Cm);
Chon(Cm+1, Cmax);
}
else Chon(Cmin, Cm-1) ;
}
}
42 M ha
Thut gii kim tra tn ti l trnh cho xe
c ti trng Cm i qua
int TonTai(LoTrinh[ ], int &d, int i, int Cm)
{
int j;
if ( i = y ) return 1;
for (j = 0; j < n; j++)
if (F[ j ] = 0 && C[ i ][ j ] >= Cm)
{
F[ j ] = 1;
d++;
LoTrinh[d] = j;
if (TonTai(LoTrinh, d, j, Cm)) return 1;
d--;
F[ j ] = 0;
}
return 0;
}
43 M ha
Bi ton tng t
44 M ha
Thut ton sp xp mng Quick Sort
tng thut ton sp xp tng cho dy X[L .. R]
Bc 1: Phn chia dy X[L .. R] thnh 2 dy con bng cch:
Chn gi tr P ca 1 phn t trn dy X[L .. R] lm mc phn
hoch.
i ch cc phn t X[i]>= P vi cc phn t X[j]<= P, vi i < j
Khi i > j, dy ban u c phn thnh 2 phn:
1. X[ L .. j ] cha gi tr <= P
3. X[ j .. i ] cha gi tr = P
2. X[ i .. R ] cha gi tr >= P
Bc 2:
Nu X[L .. j] c hn 1 phn t th sp xp tng dy X[L .. j]
Nu X[i .. R] c hn 1 phn t th sp xp tng dy X[i .. R]
45 M ha
Minh ha thut ton
5 1 7 5 3 6 2 9
i j
2 1 7 5 3 6 5 9
i j
2 1 3 5 7 6 5 9
i=j
2 1 3 5 7 6 5 9
L j i R
2 1 3 7 6 5 9
1 2 3 5 6 7 9
L=j i=R L=j i R
7 9
7 9
j L i=R
1 2 3 5 5 6 7 9
46 M ha
Thut gii Quick Sort
void QuickSort(X[L .. R])
{
int i = L;
int j = R;
P = X[i];
while (i <= j)
{
while (X[i] < P) i++;
while (X[j] > P) j--;
if (i <= j)
{
if (X[i] <> X[j]) Hoanvi(X[i], X[j]);
i++; j--;
}
}
if (L < j) QuickSort(X[L ..j ]);
if (i < R) QuickSort(X[i .. R]);
}
47 M ha
Nhn hai s nguyn X.Y c n ch s
Phn tch:
Chia X thnh 2 s nguyn c n/2 ch s: X=A.10n/2+B
Chia Y thnh 2 s nguyn c n/2 ch s: Y=C.10n/2+D
X.Y = A.C.10n+(A.D+B.C)10n/2+B.D
Mt khc: R = (A + B)(C + D) = A.C + A.D + B.C + B.D
A.D+B.C = R A.C B.D
Khi : X.Y = A.C.10n+(R-A.C-B.D)10n/2+B.D
Php nhn vi 10n thc cht l thm n ch s 0
3 php nhn s nguyn ln n/2 ch s :A.C, B.D, (A+B)(C+D)
tip tc c phn chia cho n khi 2 ton hng ch c mt ch
s.
48 M ha
V d: nhn X=981 vi Y=1234.
49 M ha
Thut gii: Nhn 2 s nguyn c n ch s
51 M ha
6. Trn bn c vung 4x4 xp 8 qun c gm 4 qun mu en v 4 qun mu trng sao
cho trn mi hng v mi ct c ng mt qun mu en v 1 qun mu trng. Th hin
trn mn hnh cc cch sp xp ny
7. Mt ngi cha mang theo s tin l M vo mt ca hng mua K mn qu tng cho
cc con. Trong ca hng c N mt hng, mt hng th i c gi tin l Ai. Ngi cha cn
chn K (K < N) mt hng khc nhau lm qu sao cho tng s tin ca K mt hng ny
khng ln hn s tin mang theo v chnh lch gi tin ca K mt hng l thp nht.
8. Mt dy chuyn sn xut c N (N<=100) v tr. C N cng nhn, cho bit nng sut ca
cng nhn th i m lm v tr th j l Cij (Cij : Integer). Hy sp xp N cng nhn vo N
v tr sao cho t nng sut cao nht.
9. Cho ma trn vung cp 8 cha cc s nguyn. Tm gi tr ln nht ca tng 8 s hng
trn ma trn s trn sao cho 2 s hng bt k trong 8 s hng trn khng nm trn cng
mt hng, khng cng nm trn mt ct v khng cng nm trn ng cho .
10. Cho mt bng A c M hng, N ct (3 M, N 50), Mi phn t ca bng l mt s nguyn
nhn gi tr t 0 n 99. Cho mt s K (2 K Min(M, N)). Tm K phn t trong bng A
tng ca K phn t ny l ln nht, vi iu kin l trn mi hng chn nhiu nht mt
phn t, mi ct chn nhiu nht mt phn t.
11. Mt c s sn xut cn phn cng M nhn vin tham gia thc hin N hp ng sn xut
sn phm (M >= N). Mi nhn vin ch tham gia thc hin mt hp ng. Ngi ta d
tnh rng, nu phn cng i nhn vin tham gia thc hin hp ng j th c thi gian hon
thnh hp ng l T[i,j]. Hy tm phng n phn cng mi hp ng bao nhiu nhn
vin sao cho tng s thi gian hon thnh N hp ng l t nht.
52 M ha