You are on page 1of 27

Chng 1 .

Chia tr
Divide and conquer algorithm
1.1. S chung
1.2. V d n gin
1.3. Cc gii thut bit
1.4. Mt s bi ton khc

1
1.2. S chung
Chia tr l mt k thut thit k thut ton
bao gm:
Chia mt bi ton cn gii ra thnh nhng bi
ton con nh hn c cng mt loi vn
Gii tng bi ton con mt cch ln lt v
c lp
Tng hp cc li gii con thu c thnh li gii
ca bi ton ban u.

Chia tr thng dn n gii thut quy

2
S TNG QUT
CHIA
TR
TNG HP

3
Ch
Khi thc hin CHIA TR thng dn n gii
thut quy.
Mt gii thut quy thng gm hai phn:
1. C s ca quy: Cc trng hp c bn
(thng vi kch thc nh) c th gii trc
tip;
2. Phn quy: Tng hp li gii: tm li gii ca
bi ton ln t cc li gii ca cc bi ton nh
4
1.2. V d n gin
Bi Ton: Tm phn t ln nht trong mt dy s
INPUT: Dy khng rng L[1..n] cc s .
OUTPUT: S ln nht trong dy L.
Procedure LargestNumber {Chia tri}
if n = 1 then return L[1]
else begin
m:= int(n/2);
largest1:= LargestNumber(L[1..m])
largest2:=LargestNumber(L[m+1..n])
if largest1 > largest2 then largest:= largest1
else largest:= largest2
return largest
end;

5
Dng khc: Gim tr
INPUT: Dy khng rng L[1..n] cc s .
OUTPUT: S ln nht trong dy L.

Algorithm LargestNumber(L[1..n]) {gim tr}
if n = 1 then return L[1]
else
m:= n-1;
largest:= LargestNumber(L[1..n-1])
if largest < L[n] then
largest := L[n]
return largest

6
1.3. Cc gii thut chia tr hc
Thp H Ni
QuickSort, MergeSort
Tm kim nh phn


7
1.4. Mt s bi ton khc
Nhn s ln
Tnh ly tha
Cp im gn nht



8
Bi ton nhn 2 s nguyn ln
Gi s phi nhn 2 s nguyn c 2 n ch
s thp phn a v b ta c th vit a, b
di dng
a = a
1
10
n
+ a
2
,
b = b
1
10
n
+b
2

trong
a
1
, a
2
, b
1
, b
2
l cc s c n ch s.

9
Bi ton nhn 2 s nguyn ln
V d: a= 5678 v b= 6789.
Thut ton ca chng ta tch cc s hng
thnh a
1
= 56, a
2
= 78, b
1
= 67 v b
2
= 89.

10
Bi ton nhn 2 s nguyn ln
V d : a=5678, b=6789.
a
1
= 56, a
2
= 78, b
1
= 67 v b
2
= 89.
Ba php nhn hai na cn thc hin l:
p = a
1
b
1
= 56 67 = 3752
q = a
2
b
2
= 78 89 = 6942
v
r = (a
1
+ a
2
) (b
1
+ b
2
) = 134 156= 20904
Do
ab = 3752*10000 + (2090437526942)* 100+ 6942 =
3752 0000 + 10210 00+ 6942 =38547942
11
Bi ton nhn 2 s nguyn ln
Ta c:
a b = (a
1
10
n
+ a
2
)( b
1
10
n
+b
2
) =
a
1
b
1
10
2n
+ (a
1
b
2
+ a
2
b
1
) 10
n
+ a
2
b
2
Nh vy ta thay c mt php nhn
vi 2n ch s v 4 php nhn vi n ch s
v hai php cng.
4 php nhn l:
a
1
b
1
, a
1
b
2
,a
2
b
1
, a
2
b
2

12
Bi ton nhn 2 s nguyn ln
Ci tin:
t p= a
1
b
1
, q = a
2
b
2
,
r = (a
1
+a
2
) (b
1
+b
2
)
Khi
(a
1
b
2
+ a
2
b
1
) =
(a
1
+a
2
) (b
1
+b
2
) a
1
b
1
a
2
b
2
= r p q
Nh vy ta thay vic tnh 4 php nhn
bng ba php nhn v mt php tr.
13
Ly tha
Xt ly tha t nhin: x
n

Function Luy_thua(x,n)
Luy_thua=1;
For i:=1 to n do Luy_thua:=Luy_thua*x;
V d vi n=35,
1 x x
2
x
3
x
4
.. x
34
x
35


14
Cch khc: Phn tch
1 x x
2
x
4
x
8
x
16
x
32


Tng qut


le n khi
chan n khi x
0 n khi 1
1
2
2
n

|
|
.
|

\
|
=
=

x x
x
n
n

15
Thut ton bnh phng v nhn
Function EXPOSE(x,n)
IF n=0 then return 1
else
if n div 2=0 then
return EXPOSE(x,n/2)* EXPOSE(x,n/2)
else return EXPOSE(x,n-1)*x

16

Thut ton bnh phng v
nhn khng quy
Tnh chn l ca mt s nguyn th hin
bi bt sau cng ca n
Phn nguyn [n/2] ca mt s nguyn c
th tnh bng php tinh n div 2.
S dng mt ngn xp lu tnh chn l
ca s n
17
Thut ton bnh phng v nhn
khng quy
Create Stack(S)
While n>0 do
k= n and 1; push(S,Top,k); n=n div 2
Z:=1;
While T >0 do
Z:=Z+2 ; Pop(S,T,k);
If k <>0 do Z:= Z*x;
Return x
n
:= Z;

18
Cp im gn nht
Bi ton
Cho dy n im trn mt phng vi cc toa cho bi
mng 2 chiu
C : array [1...n, 2] of Integer
trong Ai =(x,y) vi ( x=C[i,1], y=C[i,2])
Tm cp im gn nht trong chng.


19
Phn tch cc giai on
Bi ton con c bn:
Vi n nh c th
so snh trc tip

CHIA
Chia tp n im thnh
hai phn bng ng
thng song song vi
Oy


20
TR : Gii cc bi ton con
Bi ton con 1
Tm cp im gn nht trong na tri
Bi ton con 2
Tm cp im gn nht trong na phi
Bi ton con 3
Tm cp im gn nht trong di nm gn
ng phn cch

21
TNG HP LI GII
Qu trnh gii bi ton con 2, 3 kt hp
vi qu trnh tng hp li gii:
1. Khi gii Bi ton 1, lu kt qu gm:
Hai im P,Q gn nhau nht
Gi tr d
min
ca khong cch ngn nht
2. Khi gii bi ton con 2 v 3: Ch xt cc
cp im c hiu honh v hiu tung
nh hn d
min
.


22
K thut CHIA
Sp xp cc im theo chiu tng ca honh
(x
1
,

y
1
), (x
2
,

y
2
), ..., (x
n
,

y
n
)
vi x
1
s x
2
s .... s x
n
Ly m = Int (n/2)
Na tri gm cc im
(x
1
,

y
1
), (x
2
,

y
2
), ..., (x
m
,

y
m
)
Na phi gm cc im
(x
m+1
,

y
m+1
), , ..., (x
n
,

y
n
)


23
K thut TR
K thut chung:
Lu cp im gn nht vo hai bin cp1, cp2 v khong
cch gia chng vo bin d
min
, sau ch cn kim tra
cp im c hiu honh nh hn d
min
bng th tc
Check sau y
Procedure Check(p1,p2:Point);
Begin
dx=Abs(p1.x-p2.x); If dx> dmin then exit;
dy=Abs(p1.y-p2.y); If dy> dmin then exit;
d:=sqrt(dx*dx+dy*dy) ;
if d < dmin then
begin cp1:=p1; cp2:=p2; dmin:=d ;
End;



24
K thut gii bi ton 3
Ch xt cc im
nm cch ng
phn cch nh
hn d
min

Sp xp cc cp
im ny theo
th t tng ca
tung , trong
cc im ny ch
xt cc cp im
chnh lch tung
< d
min

d
min
d
min

d
m
i
n

25
Th tc tr bi ton con 3
Procedure Mid_near(m:integer);
Begin
{chn dy im cn x l}
k:=0; x0:= day_diem[m].x;
For i:=r to s do if Abs(day_diem[i].x x0) < dmin then
begin k:=k+1; day_chon[k]:=day_diem[i] ;
left[k] := (day_diem[i].x <= x0) ; end;
Sort_y; { sp xp day_chon theo trc y}
For i:=1 to k-1 do begin y0:= day_chon[i].y; j:=i+1 ;
while j <= k do begin
Check(day_chon[i],day_chon[j]);j:=j+1;end;
end;
End;

26
Th tc chnh
Procedure Find_near(r ,s:integer);
Begin
If s-r<1 then exit ;
if s-r =1 then {Bi ton con c bn , ch gm 2 im}
begin Check(Day_diem[r];Day_diem[s]); exit;end;
{ Chia}
m:= (r+s) div 2;
Find_near(r,m) ; { tr na tri }
Find_near(m+1,s) ; {tr na phi }
Mid_near(m);
End;

27

You might also like