1
Ch ng 5
Các k thu tthi t k gi ithu t
2
N i dung
1. Quiho ch ng
2. Gi ithu ttham lam
3. Gi ithu tquay lui
3
1.Quiho ch ng
Quy ho ch ng(dynamic programming) gi i các bàitoán
b
ng cách k t h p các l i gi i c a các bàitoán con c a bài
toán
ang xét.
Ph
ng pháp này kh d ngkhi các bàitoán con không c
l
p i v inhau, t c là khi các bàitoán con có dùngchung
nh ng bàitoán “cháu” (subsubproblem).
Quiho
ch ng gi icác bàitoán “cháu” dùng chung này
m
t l nvàl u l igi i c a chúngtrong m t b ng và sau ó
kh
i ph itính l ikhi g p l i bàitoán cháu ó.
Quiho
ch ng c áp d ng cho nh ng bàitoán t i u
hóa(optimization problem).
4
B n b c c aquiho ch ng
â d ng m t gi ithu t quiho ch ng có th c chia
làm b
n b c:
1.
ctr nghóa c utrúc c a l igi i t i u.
2.
nh ngh agiá tr c a l igi i t i u m t cách quy.
3.Tínhtr
c a l igi i t i utheoki u t d ilên.
4. C
u t o l igi i t i u t nh ngthôngtin ã ctính
toán.
5
Thí d 1 Nhânxâu matr n
Cho m t chu i<A
1
, A
2
, …, A
n
> g m n matr n, và tamu n
tínhtích cácmatr
n.
A
1
A
2
… A
n
(5.1)
Tích c
axâumatr n này c g ilàm - óng-ngo c- y-
(fullyparenthesized ) n u nó là m tmatr n n ho c là tích
c
a hai xâumatr n m - óng-ngo c- y- .
Thí d
: A
1
A
2
A
3
A
4
có th c m - óng-ngo c- y- theo
5 cách:
(A
1
(A
2
(A
3
A
4
)))
(A
1
((A
2
A
3
)A
4
)
((A
1
A
2
)(A
3
A
4
))
(A
1
(A
2
A
3
))A
4
)
(((A
1
A
2
)A
3
)A
4
)
6
á à a m óngngo c m t xâumatr n có nh h ng
r
t l n n chi phí tínhtíchxâumatr n.
Thí d
: A
1
10 100
A
2
100
5
A
3
5
50
(A
1
(A
2
A
3
))th
chi n
10.000.5+10.5.50=5000+ 2500
= 7500 phép nhân vô h
ng.
(A
1
(A
2
A
3
))th
chi n
100.5.50+10.100.50 = 25000+ 50000= 75000phép nhân vô
h
ng.
Hai chi phí trên r
tkhác bi t nhau.
7
Phátbi ubàitoánnhânxâu matr n
à á í í â
'‘Cho m tchu i<A
1
, A
2
, …, A
n
> g m n matr n, v i m i
i= 1, 2, …, n, matr
n A
i
có kíchth c p
i-1
p
i
,ta m - óng-
ngo
ctíchnàysaocho t ithi uhóa t ng s phép nhân vô
h
ng”.
ây là m t bài toán t i u hóathu c lo ikhó.
8
C utr c c a m tcách m óngngo c t i u
c 1: ctr ng hóa c utrúc c a m t l i gi i t i u.
Dùng A
i j
ký hi umatr n k t qu c a vi ctính
A
i
A
i+1
…A
j
.
M
t s m óng ngo c t i u c atíchxâumatr n A
1
.A
2
… A
n
Táchxâungay t
i v trí n mgi a A
k
và A
k+1
v i m ttr
nguyên k,1 k < n. Ngh alà,tr ctiêntatínhcác chu ima
tr
n A
1 k
and A
k+1 n
và r i nhânchúng v inhau cho ra A
1.n
.
Chi phí c
a s m óng ngo c t i u này= chi phí tính A
l k
+
chí phí tính A
k+1 n
, + chi phí nhân chúng l
i v i nhau.
9
Di n t l igi i m tcách quy
â , nh ng bàitoán con c atalàbàitoán xác nhchi phí
t
i u ng v i s m óng ngo c cho chu i A
i
.A
i+1
… A
j
v i
1
i j n.
tm[i,j]làt ng s t ithi ucác phép nhân vô h ng c
òi h i tínhmatr n A
i j
. Chi phí c acách r nh t tính
A
1 n
s
c ghi m[1, n].
Gi
s r ng s m óng ngo c t i u t ch i tíchchu i A
i
A
i+l
… A
j
t
i gi a A
k
and A
k+l
, v i i k < j.Thì m[i,j] b ng
v
i chí phí t ithi u tính A
i k
và A
k+1 j
, c ng v ichiphí
nhân haimatr n này l i v i nhau.
m[i,j]=m[i,k] + m[k+1,j] + p
i-1
p
k
p
j
.
10
M tc ngth c quy
v y, nhngh a quychochi phí t i thi u c a m t
s
m óngngo ccho A
i
A
i+l
… A
j
là nh sau:
m[i, j]= 0 n ui=j,
=min{m[i,k]+m[k+1, j]+ p
i-1
p
k
p
j
.}
n
ui<j. (5.2)
giúptheo dõicách t o m t l igi i t i u,hãy nh
ngh
a:
s[i, j]: tr
c a k t i ó chúngta tách tíchxâuma tr n
A
i
A
i+1
…A
j
t n m t s m óng ngo c t i u.
11
M tnh nxétquantr ng
nh n xét quan tr ng là
m óng ngo c c a xâu con A
1
A
2
A
k
bên trong s m
óng ngo c t i u c axâu A
1
A
2
…A
n
c ng ph ilàm t s m
óng ngo c t i u''.
Nh
v y, m t l i gi i t i u chobàitóantíchxâumatr n
ch
a ngtrong nó nh ng l igi i t i u c a nh ng bàitoán
con.
B
cth hai c a ph ng phápqui ho ch ng là nh ngh a
tr
c a l igi i t i u m tcách quytheonh ng l igi i t i
u c a nh ng bàitoán con.
12
Tínhnh ngchiphí t i u
vì tính l igi i d a vào côngth ccho (5.2) b ng m t
gi
ithu t quy, chúngta ith c hi n B c 3 c aqui ho ch
ng: tínhchi phí t i u b ng cáchti p c n t d ilên.
Gi
s matr n A
i
có kíchth c p
i-1
p
i
v i
i = 1, 2 , ,n.
u vào là chu itr s <p
0
, p
1
, …, p
m
>.
Th t c dùng m t b ngm[1 n,1 n] l u các chi phí m[i,j]
và b
ngs[1 n, 1 n] l ugiá tr nào c a v trí k mà th c
hi
n cchi phí t i ukhitínhm[i,j].
Th
t cMATRIX-CHAIN-ORDERtr v hai m ng m và s.
13
Th t c tínhhai b ng m và s
procedure MATRIX-CHAIN-ORDER(p,m,s);
begin
n:= length[p]-1;
for i:= 1 to n do m[i, i]:= 0;
for l:=2to n do /* l: length of the chain */
for i:= 1 to n – l + 1 do
begin
j:= i + l – 1;
m[i, j]:= ∞; /* initialization */
for k:= i to j-1 do
begin
q:=m[i, k]+m[k+ 1, j]+ p
i-1
p
k
p
j
;
if q<m[i, j] then
begin m[i, j]:= q;s[i, j]:= k end
end
end
end
14
M tthí d ínhtíchxâu matr n
ì ch cho i<j, ch ph n c a b ng m
trên ng chéo chính m i cdùng.
Cho cácmatr
n v ikíchth c nh sau:
A
1
30
35
A
2
35
15
A
3
15
5
A
4
5
10
A
5
10
20
A
6
20
25
Hình5.1trình bày b
ng m và s ctính b ith t c
MATRIX-CHAIN-ORDER v
i n = 6.
15
M tthí d v tínhtíchxâu matrân
M ng m
i
1 2 3 4 5 6
6 151 5 10500 51 0 5000 0
5 11875 71
500 1000 0
j 4
7 75 750 0
3 7875
0
2 15750 0
1 0
M
ng s H nh 5.1
i
1 2 3 4 5
6
5 5
5
4
j 4
3 1
2 1
16
M tthí d v tínhtíchxâu matrân
2,5]=min
= 7125
k = 3for A
2 5
25
125
145
m
[
2
,
2
]
m
[
3
,
5
]
p
.
p
p
0
250
0
3
5
.
15
.
2
0
13000
m[2,3] m[4, 5] p p p 2625 100 35.5.30 7125
m[2, 4] m[5m5] p p p 4375035.10.20 11375
+ + = + +=
++=++=
++=++=
B
c 4 c a ph ngpháp qui ho ch ng là t o m t l igi i
t
i u t nh ngthôngtin ã tínhtoán.
17
B c4 T o m t l igi i t i u
a dùng m ngs[1 n, 1 n] xác nhcách t t nh t tính
tíchxâumatr
n. M i ph n t s[i,j] ghitr of k saocho t i
ó s m óng ngo c t i u tách ôi xâu A
i
A
i+1
… A
j
thành
hai
o n t i A
k
và A
k+1
.
Chotr
cchu imatr n A = <A
1
, A
2
…, A
n
>, b ng s và các
ch
s i và j,th t c quy MATRIX-CHAIN-MULTIPLY sau
âytínhtíchxâumatr n A
i j,
.Th t ctr v k t qu qua
tham s
AIJ.
V
i l nh g i ban ulà
MATRIX-CHAIN-MULTIPLY(A,s, 1, n, A1N)
Th
t c s tr v k tqu matr ntíchsaucùng v i m ng
A1N.
18
Tính l igi i
procedure - - ( , , i,j, AIJ);
begin
if j>ithen
begin
MATRIX-CHAIN-MULTIPLY(A,s, i,s[i,j], X);
MATRIX-CHAIN-MULTIPLY(A,s,s[i, j]+1,j, Y);
MATRIX-MULTIPLY(X,Y, AIJ);
end
else
assignAi to AIJ;
end;
19
ó ành ph nthen ch tmàm tbàitoán t i uhóa ph i
có
có th áp d ngqui ho ch ng:
(1) ti u c utrúc t i u (optimalsubstructure) và
(2) các bàitoáncon trùng l p (overlappingsubproblems).
Ti u c utrúc t i u
M tbàitoáncótínhch tti u c utrúc t i u n u l igi i t i
uch atrongnónh ng l igi i t i u c anh ngbàitoán
con
.
Cácthànhph n c aquyho ch ng
20
Nh ngbàitoáncontrùng l p
m tgi ithu t quy g p l i cùng m tbàitoán con
nhi
u l n,ta b o r ngbàitoán t i u hóa có nh ng bàitoán
contrùng l
p.
Gi ithu t quy ho ch ng l i d ng nh ng bài toáncon
trùng l
p b ng cáchgi i m i bàitoán con m t l n, c t l i
gi
i vàotrong m t b ng mà b ng này s cthamkh o
nkhi c n.
Cácgi
ithu t quy l mvi c t trênxu ng trongkhicác
gi
ithu tquyho ch ng làmvi c t d ilên, Cáchsau
h
u hi u h n .
21
Thí d àitoánchu iconchungdàinh t
chu i con subsequence) a m t chu i(sequence) là
chu
i ysaukhi b i m t vài ph n t .
Thí d :Z = <B, C, D, B>làm tchu icon c a
X =<A,B,C,B, D, A, B> v
i chu i ch s <2, 3, 5, 7>.
Cho hai chu
i X và Y,ta b oZ là chu icon chung (common
subsequence) c
a X và Y n uZ là m t chu i con c a c hai
chu
i X và Y.
Trongbàitoánchu iconchungdàinh t,ta cchohai
chu
iX=<x
1
, x
2
, …, x
m
>vàY=<y
1
, y
2
,…, y
n
>vàmu ntìm
chu iconchung dài nh t (LCS) c a X và Y.
22
Ti u c utrúc t i u c abàitoánchu icon
chungdàinh
t
í : X=<A,B, C,B, D, A, B> và Y= <B, D, C, A, B, A>
<B,D, A, B> là LCS c
a X and Y.
Chochu iX=<x
1
, x
2
, …, x
m
>,ta nhngh a ti n t th i c a
X, v
i i =0, 1, …,m,làX
i
=<x
1
, x
2
, …, x
i
>.
nh lý 6.1
ChoX=<x
1
, x
2
, …, x
m
>vàY=<y
1
, y
2
, …, y
n
>lành ng
chu
i,và Z = <z
1
, z
2
, …, z
k
> là LCS c a X và Y.
1.N
u x
m
= y
n
thì z
k
= x
m
= y
n
và Z
k-1
là LCS c a X
m-1
và
Y
n-1
.
2.N
u x
m
y
n
,thì z
k
x
m
hàm ý Z là LCS c a X
m-1
và Y.
3.N
u x
m
y
n
,thì z
k
y
n
hàm ý Z là LCS c a X và Y
n-1
.
23
ì m tLCS c a X và Y,tacóth c ntìmLCS c a X và
Y
n-1
và LCS c
a X
m-1
và Y. Nh ng m itrong hai bàitoán
con này có nh
ng bàitoán “cháu” tìm X
m-1
và Y
n-1
.
G i c[i,j] là chi u dài c aLCS c a hai chu i X
i
và Y
j
. N u
i = 0 hay j = 0,thì LCS có chi
u dài 0. Tính ch tti u c u
trúc t
i u c a bàitoánLCS cho ra côngth c quysau:
0 n u i=0 hayj= 0
c[i,j]=c[i-1,j-1]+1 n u i, j>0 và x
i
= y
j
max(c[i,j-1],c[i-1,j]) n
u i,j>0vàx
i
y
j
(5.3)
L igi i quy
24
à trình (5.3),tacóth vi t m tgi i thu t
quy tìmchi udài c a m tLCS c a haichu i.Tuy
nhiên,chúng ta dùngquiho ch ng tính l igi i
theocách t
d ilên.
Th
t cLCS-LENGTHcóhaichu i X=<x
1
,x
2
, …, x
m
>
và Y=<y
1
, y
2
, …, y
n
>là uvào.
Th
t c l ucác tr c[i, j] trong b ngc[0 m,0 n].Nó
c
ng duytrì b ng b[1 m,1 n] ngi nhóavi c t o
l
igi i t i u.
Tínhchi udài c a m tLCS
25
procedure - (X, Y)
begin
m:=length[X];n:=length[Y];
for i:=1to m do c[i, 0]:=0; for j:= 1 to n do c[0,j]:=0;
for i:=1to m do
for j:= 1 to n do
if x
i
= y
j
then
begin c[i,j]:= c[i-1,j-1]+1; b[i,j]:= “” end
else if c[i – 1,j]>= c[i,j-1] then
begin c[i,j]:=c[i – 1,j]; b[i, j]:= “↑” end
else
begin c[i,j]:=c[i, j-1];b[i,j]:= “←” end
end;
Hình5.2sau
âytrình bày matr n c c athí d .