You are on page 1of 12

MC LC

MC LC................................................................................................................................1
THUT TON CHIA TR...............................................................................................2
(Divide to Conquer)..................................................................................................................2
1) Khi nim:........................................................................................................................2
2) S chung:....................................................................................................................2
3) Thut ton :....................................................................................................................2
4) S thut ton chia tr:.............................................................................................3
5) Mt s v d.....................................................................................................................4
5.1) Bi ton thp H Ni................................................................................................4
5.6) Gii v ci t bi ton Mng con ln nht.............................................................7
5.6.1) Thut ton chia tr tm mng con ln nht gm cc thao tc:......................7
5.6.2) Thut ton chia tr tm mng con ln nht .................................................7
5.6.3) Thut ton MaxVector(a, i, j):...........................................................................8
5.6.4) Ci t chng trnh.......................................................................................8
5.6.5) Phn tch hiu qu ca thut ton:...................................................................12

THUT TON CHIA TR


(Divide to Conquer)
C l thut ton c s dng nhiu nht, quan trng nht l k thut Chia
Tr. K thut ny s chia bi ton hin thi thnh N bi ton nh hn, thc hin li
gii cho tng bi ton nh ny v t xy dng thut ton cho bi ton ln tng
hp. V d cho cc thut ton ny l Sp xp Trn(1) hoc Tm kim Nh phn(2).

1) Khi nim:
Chia tr l mt trong nhng phng php thit k gii thut c bn bao gm
cc thao tc:
Chia: Chia bi ton cn gii thnh mt lot cc bi ton con c
lp.
Tr: i hi vic gii cc bi ton con thu c.
Tng hp: Thc hin vic xy dng li gii ca bi ton t ra t
cc li gii ca bi ton con.

2) S chung:
S chung ca thut ton chia tr (Divide and Conquer) gm 3 thnh phn:
- Chia (Divide): Chia bi ton cn gii S ra thnh cc bi ton con
S1, S2, S3, ...
- Tr (Conquer): Gii cc bi ton con mt cch quy.
- Tng hp (Combine): Tng hp li gii ca bi ton S1, S2,
S3, ... thnh li gii ca bi ton S.
phn tch phc tp ca thut ton c th s dng cng th quy.
Vn t ra l cn gii cc bi ton con c lp bng cch no? l vn
trung tm ca bi ton.

3) Thut ton :
Gi s chng ta c thut ton gii bi ton kch thc d liu vo n vi thi
gian b chn bi cn2 (c: hng s). Xt thut gii gii chnh bi ton bng
cch:
- Bc 1: Chia bi ton cn gii thnh 3 bi ton con vi kch
thc n/2.
2

- Bc 2: Gii 3 bi ton bng thut ton .


- Bc 3 Tng hp li gii ca 3 bi ton con thu c li gii
ca bi ton.
* Tnh ng n ca thut ton
Gi s bc 3 i hi thi gian dn(d: hng s).
Gi:
T (n) = thi gian ca thut ton .
T (n) = thi gian ca thut ton .
Ta c:
T (n) = cn2 (theo gi thuyt)
T (n) = 3.T (n/2) + dn = .cn2 + dn.
Nu:
dn < c.n2/4 hay n > 4. d/c th thut ton nhanh hn thut ton .
Do 4.d/c l hng s nn vi n ln ta lun c n > 4. d/c.
iu cho thy vic s dng thut ton gii bi ton t ra bng cch chia
n thnh cc bi ton con c kch thc cng ngy cng nh n khi thu c
bi ton con kch thc n0 < 4.d/c s thu c hiu qu cao.

4) S thut ton chia tr:


procedure Divide_and_Conquer(n);
begin
if n n0 then
Gii bi ton mt cch trc tip;
else
begin
Chia bi ton thnh r bi ton con c kch thc n/k;
for (mi bi ton trong r bi ton con) do
Divide_and_Conquer(n/k);
Tng hp li gii ca r bi ton con thu c li gii ca bi ton;
end;
end;

5) Mt s v d
5.1) Bi ton thp H Ni
minh ha r hn cho k thut ny chng ta hy xt mt v d quen thuc
l bi ton Thp H Ni. Gi s c 3 cc A, B, C. Ban u ti A t mt s a
vi th t trn nh di to nh hnh v.

Yu cu ca bi ton l chuyn ton b s a trn sang cc B, trong qu trnh


chuyn c php s dng a C, mi ln chuyn ng 01 a v lun bo m
nguyn tc a nh nm trn a to trong sut qu trnh chuyn.
Bi ton
Thp H Ni trn c th gii vi thut ton thng minh sau: Gi s ta t 3 cc
trn ti cc nh ca mt tam gic u. Ti bc vi s lt l l, ta chuyn a nh
nht sang cc bn cnh theo chiu kim ng h, ti bc i vi s lt l chn, ta
thc hin mt thao tc bt k nhng khng ng n ci a nh nht. Cc bn d
dng kim tra rng l mt thut ton ng, tuy nhin n rt kh hiu, kh tng
qut sang cc trng hp khc.
Ta hy th vn dng t duy ca thut ton Chia Tr i vi bi ton Thp
H Ni ny. Bi ton chuyn N a t A sang B c th chia thnh 2 bi ton nh
hn vi kch thc N-1 nh sau: (a) Chuyn N-1 a u tin t A sang C (gi
nguyn trng thi ca a th N ti A). (b) Chuyn a th N t A sang B v chuyn
4

N-1 a t C sang B. Ch rng khi thc hin bi ton (b) phn chuyn N-1 a t
C sang B ta c th dng li hon ton thut ton ca bi (a) nhng vi v tr thay i
gia A v C v tt nhin b qua s c mt ca a th N trong A hay B. Vi cch t
duy nh vy, vic m phng thut ton s tng i kh do n phi gi qui n
chnh n nhng cch lm trn tht l d hiu v cho php chng ta p dng cho
nhiu lp bi ton khc. Chng ta hy xt mt vi v d.

5.2) Bi ton nhn cc s t nhin ln


Xt bi ton nhn 2 s t nhin n-bit X v Y. Bi ton nhn 2 s t nhin n-bit (n
ch s) c dy trong nh trng ph thng vi phc tp O(n2)(3). By gi
chng ta s xt li bi ton ny vi k thut Chia Tr. Ta phn tch mi s X, Y
thnh 2 phn, mi phn n/2 bit. cho n gin ta s lun xt n l ly tha ca 2.
X, Y s c phn tch thnh 2 phn n/2-bit nh sau:
X = A | B (X = A2n/2 + B)
Y=C|D
(Y = C2n/2 + D)
Khi tch XY s c dng:
XY = AC2n + (AD+BC)2n/2 + BD (1)
Da trn cng thc (1) ta c th suy lun n gin nh sau cho vic tnh tch
XY: chng ta s tnh 4 php nhn vi cc s n/2-bit l AC, AD, BC v BD, sau
thc hin 3 php cng vi cc s 2n-bit, cui cng l 2 php chuyn ch s (2 php
nhn vi ly tha ca 2) Cc php cng v php chuyn ch s u c thc hin
vi thi gian O(n), do ta thu c cng thc tnh phc tp ca php ton trn
T(n) l:
T(1) = 1
T(n) = 4T(n/2) + C.n (C-const)
(2) Cng thc (2) cho ta T(n) = O(n2) v nh vy ta cha thu c kt qu g
mi so vi phng php tnh t nh trng ph thng.
By gi ta bin i cng thc (1) di dng:

XY = AC2n + ((A-B)(D-C) + AC + BD)2n/2 + BD


(2) Cng thc (2) mc d phc tp hn (1) nhng chng c th c tnh bi:
- 3 php nhn n/2-bit: AC, BD v (A-B)(D-C).
- 6 php +,- cc s n/2-bit.
- 2 php chuyn ch s (nhn vi ly tha ca 2).
Do vy vi cch tnh trn ta c cng thc sau tnh phc tp ca thut ton
ny:
T(1) = 1
T(n) = 3T(n/2) + C.n (C-const)
(3) Cng thc (3) cho ta

Nh vy ta thu c mt kt qu mi cho vic thc hin php nhn 2 s t


nhin n-bit vi thut ton mnh hn php nhn bnh thng hc trong nh trng
(4).
5.3) Bi ton to lch thi u Tennis
Gi s cn lp mt lch thi u Tennis cho n = 2k vn ng vin (VV). Mi vn
ng vin phi thi u vi ln lt n-1 vn ng vin khc, mi ngy thi u 1 trn.
Nh vy n-1 l s ngy thi u ti thiu phi c. Chng ta cn lp lch thi u bng
cch thit lp ma trn c n hng, n-1 ct. Gi tr s ti v tr (i,j) (hng i, ct j) ch ra
vn ng vin cn thi u vi vn ng vin i trong ngy th j.
S dng k thut Chia Tr, chng ta hy lp lch thi u cho na (n/2) s vn
ng vin u tin. Bng vic s dng li gi qui chng ta a bi ton v
trng hp ch c 2 VV.
Chng ta minh ha bng trng hp n=8. Lch thi u cho 4 ngi u tin ca
danh sch chim na tri trn ca ma trn (4 hng, 3 ct). Phn na tri di (4
hng, 3 ct) ca ma trn l lch thi u ca 4 VV cn li (t 5 n 8). Phn ny thu
c t na tri trn bng cch cng 4 vo mi phn t tng ng ca ma trn.
in nt cc phn cn li ca ma trn chng ta ch cn xc nh lch thi u gia cc
VV vi s thp (n/2) vi cc VV vi s cao (n/2). lm vic ny chng ta
6

xp cc VV t 1 n n/2 u ln lt vi cc VV s cao vo ngy 4. Cc ngy


cn li thu c t ngy 4 bng cch hon v vng quanh cc VV vi s th t
cao. Qu trnh in s c m t trong hnh 2. Cc bn c th tng qut qu trnh
ny cho trng hp tng qut n=2k bt k.

5.6) Gii v ci t bi ton Mng con ln nht


Bi ton mng con ln nht: Mng a = {ap, ..., aq} vi 1<=p,q<=n c gi l
mng con ca a.
Ta gi trng lng ca mng con l tng cc phn t ca n.
Cho mng s a = {a1, a2, ..., an}.
Vn t ra l trong s cc mng con ca a hy tm mng con c trng lng ln
nht. Mng nh vy gi l mng con ln nht.
n gin ch xt bi ton trng lng ca mng con ln nht (khng cn tm v
tr ca p v q).
5.6.1) Thut ton chia tr tm mng con ln nht gm cc thao tc:

Chia: Chia mng a thnh 2 mng con vi chnh lch di l t nht,


k hiu l aL v aR.

Tr: Tnh mng con ln nht ca mi na mt cch quy.


Gi wL v wR l trng lng ca cc mng con ln nht ca aL v aR tng
ng.

Tng hp: Thot tin c th ngh n kt qu cn tm l max(wL,wR).


Tuy nhin phi tnh n tnh hung mng con ln nht nm nn im chia.
5.6.2) Thut ton chia tr tm mng con ln nht
function MaxSubVector(a, i, j);
begin
if i=j then MaxSubVector := a[i]
else
begin
m := (i+j)/2;
wL := MaxSubVector(a, i, m);
wR := MaxSubVector(a,m+1,j);
wM := MaxVector(a, i, m) + MaxVector(a, m+1, j);
MaxS
ubVector := max(wL, wR, wM);
end;
7

end;
5.6.3) Thut ton MaxVector(a, i, j):
function MaxVector(a, i, j);
begin
maxsum := -; sum := 0;
for k:=j downto i do
begin
sum := sum + a[k];
maxsum := max(sum, maxsum);
end;
MaxVector := maxsum;
end;

5.6.4) Ci t chng trnh


#include<stdio.h>
#include<conio.h>
#include<math.h>
/*nhp d liu*/
void nhap(int n,int *a)
{
int i;
printf("nhap cac phan tu");
for(i=0;i<=n-1;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
}
/*Hin th d liu nhp */
void hienthi(int n,int *a)
{
int i;
for(i=0;i<=n-1;i++)
{
printf("a[%d]=%d",i,a[i]);
printf("\n");
8

}
}
/*Hm mng con ln nht a ra mng con c gi tr ln nht
bng bao nhiu*/
int mangconlonnhat(int n,int *a)
{
int i,j,k,max,s;
max=a[0];
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
{
s=0;
for(k=i;k<=j;k++)
s=s+a[k];
if(s>max) max=s;
else
max=max;
}
return max;
}
main()
{
int n ,a[5];
printf("nhap so phan tu can nhap");
scanf("%d",&n);
nhap(n,a);
hienthi(n,a);
printf("gia tri lon nhat la %d",mangconlonnhat(n,a));
getch();
}
*S dng thut ton chia tr
#include<stdio.h>
#include<conio.h>
#include<math.h>
/*Tm gi tr ln nht ca 3 s*/
int max1(int a1,int b1,int c1)
9

{
int d[3];
int i;
int max2;
d[1]=a1;
d[2]=b1;
d[3]=c1;
max2=d[1];
for(i=1;i<=3;i++)
if(d[i]>max2)
max2=d[i];
else
max2=max2;
return max2;}
/*Tm gi tr ln nht ca 2 s*/
int max3(int a2, int b2)
{
int max4;
if(a2<b2) max4=b2;
else
max4=a2;
if(a2==b2) max4=a2;
return max4;
}
/*nhp d liu l cc phn t ca mng*/
void nhap(int n1,int *a)
{
int i;
int t;
printf("nhap cac phan tu");
for(i=1;i<=n1;i++)
{
printf("\na[%d]=",i);
scanf("%d",&t);
a[i]=t;
}
}
/*hin th d liu*/
void hienthi(int n2,int *a)
{
10

int i;
for(i=1;i<=n2;i++)
{
printf("a[%d]=%d",i,a[i]);
printf("\n");
}}
/*hm tr ra gi tr ln nht ca mng con*/
int maxsubvector(int *a,int i,int j)
{
int maxsubvector1;
int wl;
int wr;
int wm;
int m;
if (i==j) maxsubvector1=a[i];
else
{
m=(j+i)/2;
wl=maxsubvector(a,i,m);
wr=maxsubvector(a,m+1,j);
wm=maxvector(a,i,m)+maxvector(a,m+1,j);
maxsubvector1=max1(wl,wr,wm);
}
return maxsubvector1;
}
int maxvector(int *a,int i,int j)
{
int k;
int maxvector1;
int maxsum=0;
int sum=0;
for(k=j;k>=i;k--)
{
sum=sum+a[k];
maxsum=max3(sum,maxsum);
}
maxvector1=maxsum;
return maxvector1;
}
main()
11

{
int n ;
int a[1000];
printf("nhap n");
scanf("%d",&n);
nhap(n,a);
hienthi(n,a);
printf("ma tran con lon nhat la %d",maxsubvector(a,1,n));
getch();
}
5.6.5) Phn tch hiu qu ca thut ton:
Thi gian tnh ca MaxVector(a,i,j) l O(m) vi m = j-i+1. Gi T(n) l thi
gian tnh ca thut ton. n gin ta gi thuyt rng n c dng n = 2i.
Ta c: T(1) = 1.
Khi n>1, thut ton s chia mng ra lm 2 na kch thc n/2 v thc hin 2
lnh gi quy i vi 2 na, mi lnh thc hin vi thi gian T(n/2). Vic
tnh wM i hi thi gian:
n/2 + n/2 = n.
V vy:
T(n) = 2T(n/2) +n.
Theo nguyn l Master: T(n) = O(nlogn).

12

You might also like