Professional Documents
Culture Documents
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
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
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.
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.
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;
}
}
/*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