You are on page 1of 72

1

Chng 4
Qui hoch ng v gii thut
tham lam
Qui hoch ng
Gii thut tham lam
2
1. Qui hoch ng
Quy hoch ng (dynamic programming) gii cc bi ton
bng cch kt hp cc li gii ca cc bi ton con ca bi
ton ang xt.
Phng php ny kh dng khi cc bi ton con khng c
lp i vi nhau, tc l khi cc bi ton con c dng chung
nhng bi ton chu (subsubproblem).
Qui hoch ng gii cc bi ton chu dng chung ny
mt ln v lu li gii ca chng trong mt bng v sau
khi phi tnh li khi gp li bi ton chu .
Qui hoch ng c p dng cho nhng bi ton ti u
ha (optimization problem).
3
Bn bc ca qui hoch ng
S xy dng mt gii thut qui hoch ng c th c chia
lm bn bc:
1. c trng ha cu trc ca li gii ti u.
2. nh ngha gi tr ca li gii ti u mt cch quy.
3. Tnh tr ca li gii ti u theo kiu t di ln.
4. Cu to li gii ti u t nhng thng tin c tnh
ton.
4
Th d1: Nhn xu ma trn
Cho mt chui <A
1
, A
2
, , A
n
> gm n matrn, v ta mun
tnh tch cc ma trn.
A
1
A
2
A
n
(5.1)
Tch ca xu ma trn ny c gi l m-ng-ngoc-y-
(fully parenthesized ) nu n l mt ma trn n hoc l tch
ca hai xu ma trn m-ng-ngoc-y- .
Th d: A
1
A
2
A
3
A
4
c th c m-ng-ngoc-y- theo 5
cch:
(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
)
5
Cch m ta m ng ngoc mt xu ma trn c nh hng
rt ln n chi ph tnh tch xu ma trn.
Th d: A
1
10 100
A
2
100 5
A
3
5 50
((A
1
A
2
)A
3
)) thc hin
10.100.5 + 10.5.50 = 5000 + 2500
= 7500 php nhn v hng.
(A
1
(A
2
A
3
)) thc hin
100.5.50 + 10.100.50 = 25000 + 50000 = 75000 php nhn v
hng.
Hai chi ph trn rt khc bit nhau.
6
Pht biu bi ton nhn xu ma trn
Bi ton tnh tch xu ma trn:
'Cho mt chui <A
1
, A
2
, , A
n
> gm n matrn, vi mi
i = 1, 2, , n, ma trn A
i
c kch thc p
i-1
p
i
, ta m-ng-
ngoc tch ny sao cho ti thiu ha tng s php nhn v
hng.
y l mt bi ton ti u ha thuc loi kh.
7
Cu trc ca mt cch m ng ngoc ti u
Bc 1: c trng ha cu trc ca mt li gii ti u.
Dng A
i..j
k hiu ma trn kt qu ca vic tnh
A
i
A
i+1
A
j
.
Mt s m ng ngoc ti u ca tch xu ma trn A
1
.A
2
A
n
Tch xu ngay ti v tr nm gia A
k
v A
k+1
vi mt tr
nguyn k, 1 s k < n. Ngha l, trc tin ta tnh cc chui ma
trn A
1..k
and A
k+1..n
v ri nhn chng vi nhau cho ra A
1.n
.
Chi ph ca s m ng ngoc ti u ny = chi ph tnh A
l..k
+
ch ph tnh A
k+1..n
, + chi ph nhn chng li vi nhau.
8
Din t li gii mt cch quy
y, nhng bi ton con ca ta l bi ton xc nh chi ph
ti u ng vi s m ng ngoc cho chui A
i
.A
i+1
A
j
vi
1 s i s j s n.
t m[i, j] l tng s ti thiu cc php nhn v hng c
i hi tnh ma trn A
i..j
. Chi ph ca cch r nht tnh
A
1..n
s c ghi m[1, n].
Gi s rng s m ng ngoc ti u tch i tch chui A
i
A
i+l
A
j
ti gia A
k
and A
k+l
, vi i s k < j. Th m[i, j] bng vi
ch ph ti thiu tnh A
i..k
v A
k+1..j
, cng vi chi ph
nhn hai ma trn ny li vi nhau.
m[i, j] = m[i, k] + m[k+1, j] + p
i-1
p
k
p
j
.
9
Mt cng thc quy
Nh vy, nh ngha quy cho chi ph ti thiu ca mt
s m ng ngoc cho A
i
A
i+l
A
j
l nh sau:
m[i, j] = 0 nu i = j,
= min {m[i, k] + m[k + 1, j] + p
i-1
p
k
p
j
.}
nu i < j. (5.2)
gip theo di cch to mt li gii ti u, hy nh
ngha:
s[i, j]: tr ca k ti chng ta tch tch xu ma trn
A
i
A
i+1
A
j
t n mt s m ng ngoc ti u.
10
Mt nhn xt quan trng
Mt nhn xt quan trng l
''S m ng ngoc ca xu con A
1
A
2
....A
k
bn trong s m
ng ngoc ti u ca xu A
1
A
2
A
n
cng phi l mt s m
ng ngoc ti u''.
Nh vy, mt li gii ti u cho bi tan tch xu ma trn
cha ng trong n nhng li gii ti u ca nhng bi ton
con.
Bc th hai ca phng php qui hoch ng l nh ngha
tr ca li gii ti u mt cch quy theo nhng li gii ti
u ca nhng bi ton con.
11
Tnh nhng chi ph ti u
Thay v tnh li gii da vo cng thc cho (5.2) bng mt
gii thut quy, chng ta i thc hin Bc 3 ca qui hoch
ng: tnh chi ph ti u bng cch tip cn t di ln.
Gi s ma trn A
i
c kch thc p
i-1
p
i
vi
i = 1, 2 ,.., n.
u vo l chui tr s <p
0
, p
1
, , p
m
>.
Th tc dng mt bng m[1..n, 1..n] lu cc chi ph m[i, j]
v bng s[1..n, 1..n] lu gi tr no ca v tr k m thc
hin c chi ph ti u khi tnh m[i, j].
Th tc MATRIX-CHAIN-ORDER tr v hai mng m v s.
12
Th tc tnh hai bng 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:= 2 to 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
13
Mt th d: Tnh tch xu ma trn
V ta nh ngha m[i, j] ch cho i < j, ch phn ca bng m
trn ng cho chnh mi c dng.
Cho cc ma trn vi kch thc 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
Hnh 4.1 trnh by bng m v s c tnh bi th tc
MATRIX-CHAIN-ORDER vi n = 6.
14
Mt th d v tnh tch xu ma trn (tt.)
Mng m
i
1 2 3 4 5 6
6 15125 10500 51375 3500 5000 0
5 11875 7125 2500 1000 0
j 4 9357 4375 750 0
3 7875 2625 0
2 15750 0
1 0
Mng s Hnh 5.1
i
1 2 3 4 5
6 3 3 3 5 5
5 3 3 3 4
j 4 3 3 3
3 1 2
2 1
15
Mt th d v tnh tch xu ma trn (tt.)
m[2,5] = min
= 7125
k = 3 for A
2..5
2 5
1 2 5
1 4 5
m[2, 2] m[3, 5] p.p p 0 2500 35.15.20 13000
m[2,3] m[4, 5] p p p 2625 100 35.5.30 7125
m[2, 4] m[5m5] p p p 4375 0 35.10.20 11375
+ + = + + =

+ + = + + =

+ + = + + =

Bc 4 ca phng php qui hoch ng l to mt li gii


ti u t nhng thng tin tnh ton.
16
Bc 4: To mt li gii ti u
Ta dng mng s[1..n, 1..n] xc nh cch tt nht tnh
tch xu ma trn. Mi phn t s[i, j] ghi tr of k sao cho ti
s m ng ngoc ti u tch i xu A
i
A
i+1
A
j
thnh
hai on ti A
k
v A
k+1
.
Cho trc chui ma trn A = <A
1
, A
2
, A
n
>, bng s v cc
ch s i v j, th tc quy MATRIX-CHAIN-MULTIPLY sau
y tnh tch xu ma trn A
i..j,
. Th tc tr v kt qu qua
tham s AIJ.
Vi lnh gi ban u l
MATRIX-CHAIN-MULTIPLY(A,s, 1, n, A1N)
Th tc s tr v kt qu ma trn tch sau cng vi mng
A1N.
17
Tnh li gii
procedure MATRIX-CHAIN-MULTIPLY(A, s, i, j, AIJ);
begin
if j > i then
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
assign Ai to AIJ;
end;
18
C hai thnh phn then cht m mt bi ton ti u ha phi
c c th p dng qui hoch ng:
(1) tiu cu trc ti u (optimal substructure) v
(2) cc bi ton con trng lp (overlapping subproblems).
Tiu cu trc ti u
Mt bi ton c tnh cht tiu cu trc ti u nu li gii ti
u cha trong n nhng li gii ti u ca nhng bi ton
con.
Cc thnh phn ca quy hoch ng
19
Nhng bi ton con trng lp
Khi mt gii thut quy gp li cng mt bi ton con
nhiu ln, ta bo rng bi ton ti u ha c nhng bi ton
con trng lp.
Gii thut quy hoch ng li dng nhng bi ton con
trng lp bng cch gii mi bi ton con mt ln, ct li
gii vo trong mt bng m bng ny s c tham kho
n khi cn.
Cc gii thut quy lm vic t trn xung trong khi cc
gii thut quy hoch ng lm vic t di ln, Cch sau
hu hiu hn .
20
Th d 2: Bi ton chui con chung di nht
Mt chui con (subsequence) ca mt chui (sequence) l
chui y sau khi b i mt vi phn t.
Th d: Z = <B, C, D, B> l mt chui con ca
X = <A, B, C, B, D, A, B> vi chui ch s <2, 3, 5, 7>.
Cho hai chui X v Y, ta bo Z l chui con chung (common
subsequence) ca X v Y nu Z l mt chui con ca c hai
chui X v Y.
Trong bi ton chui con chung di nht, ta c cho hai
chui X = <x
1
, x
2
, , x
m
> v Y = <y
1
, y
2
,, y
n
> v mun tm
chui con chung di nht (LCS) ca X v Y.
21
Tiu cu trc ti u ca bi ton chui con
chung di nht
Th d: X = <A, B, C, B, D, A, B> v Y = <B, D, C, A, B, A>
<B, D, A, B> l LCS ca X and Y.
Cho chui X = <x
1
, x
2
, , x
m
>, ta nh ngha tin t th i ca
X, vi i = 0, 1, , m, l X
i
= <x
1
, x
2
, , x
i
>.
nh l 4.1
Cho X = <x
1
, x
2
, , x
m
> v Y = <y
1
, y
2
, , y
n
> l nhng
chui, v Z = <z
1
, z
2
, , z
k
> l LCS ca X v Y.
1. Nu x
m
= y
n
th z
k
= x
m
= y
n
v Z
k-1
l LCS ca X
m-1
v
Y
n-1
.
2. Nu x
m
= y
n
, th z
k
= x
m
hm Z l LCS ca X
m-1
v Y.
3. Nu x
m
= y
n
, th z
k
= y
n
hm Z l LCS ca X v Y
n-1
.
22
tm mt LCS ca X v Y, ta c th cn tm LCS ca X v
Y
n-1
v LCS ca X
m-1
v Y. Nhng mi trong hai bi ton
con ny c nhng bi ton chu tm X
m-1
v Y
n-1
.
Gi c[i, j] l chiu di ca LCS ca hai chui X
i
v Y
j
. Nu
i = 0 hay j = 0, th LCS c chiu di 0. Tnh cht tiu cu
trc ti u ca bi ton LCS cho ra cng thc quy sau:
0 nu i =0 hay j = 0
c[i, j] = c[i-1, j-1]+1 nu i, j > 0 v x
i
= y
j
max(c[i, j-1],c[i-1,j]) nu i,j >0 v x
i
= y
j
(5.3)
Li gii quy
23
Da vo phng trnh (5.3), ta c th vit mt gii thut
quy tm chiu di ca mt LCS ca hai chui. Tuy
nhin, chng ta dng qui hoch ng tnh li gii
theo cch t di ln.
Th tc LCS-LENGTH c hai chui X = <x
1
,x
2
, , x
m
>
v Y = <y
1
, y
2
, , y
n
> l u vo.
Th tc lu cc tr c[i, j] trong bng c[0..m, 0..n]. N
cng duy tr bng b[1..m, 1..n] n gin ha vic to
li gii ti u.
Tnh chiu di ca mt LCS
24
procedure LCS-LENGTH(X, Y)
begin
m: = length[X]; n: = length[Y];
for i: = 1 to m do c[i, 0]: = 0; for j: = 1 to n do c[0, j]: = 0;
for i: = 1 to 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;
Hnh 4.2 sau y trnh by ma trn c ca th d.
25
y
j
B D C A B A
0 0 0 0 0 0 0
0 0 | 0 | 0 | 1 1 1
0 1 1 1 1 | 2 2
0 1 | 1 | 2 2 2 | 2 |
0 1 1 | 2 | 2 | 3 3
0 1 | 2 2 | 2 | 3 | 3 |
0 1 | 2 | 2 | 3 3 | 4
0 1 2 | 2 | 3 | 4 4 |
x
i
A
B
C
B
D
A
B
Hnh 5.2
26
Bng b c th c dng to mt LCS ca
X = <x
1
,x
2
, x
m
> and Y = <y
1
, y
2
, , y
n
>
Th tuc quy sau y in ra mt LCS ca X v Y. Lnh gi u tin l
PRINT-LCS(b, X, n, m).
procedure PRINT-LCS(b, X, i, j)
begin
if i <> 0 and j <> 0 then
if b[i, j] = '' '' then
begin PRINT-LCS(b, X, i- 1 , j - l ) ;
print x
i
end
else if b[i,j] = ''|'' then
PRINT-LCS (b, X, i-1, j)
else PRINT-LCS(b, X, i, j-1)
end;
Thi gian tnh ton
ca th tc PRINT-
LCS l O(m+n), v t
nht i hay j gim mt
n v trong mi
chng ca quy.
To chui con chung di nht
27
Th d 3. Bi ton ci ti (Knapsack)
'Mt k trm t nhp vo mt ca hiu tm thy c n mt
hng c trng lng v gi tr khc nhau, nhng y ch
mang theo mt ci ti c sc cha v trng lng ti a l
M. Bi ton ci ti l tm mt t hp cc mt hng m k
trm nn b vo ci ti t mt gi tr cao nht vi
nhng mn hng m y mang i.
Bi ton ny c th gii bng qui hoch ng bng cch
dng hai bng cost v best sau y:
cost[i] cha gi tr ti a m c th thc hin c vi mt
ci ti c sc cha i
cost[i] = cost[i size[j]] + val[j]
best[i] cha mt hng cui cng b vo ti nhm t c
gi tr ti a.
28
Mt th d ca bi ton ci ti
value 4 5 10 11 13
name A B C D E
M = 17
Hnh 5.3 Mt th d ca bi ton ci ti
29
for i: = 0 to Mdo cost[i]: = 0;
for j: = 1 to N do /* each of item type */
begin
for i:= 1 to Mdo /* i means capacity */
if i size[j] > = 0 then
if cost[i] < (cost[i size[j]] + val[j]) then
begin
cost[i]: = cost[i size[j]] + val[j]; best[i]: = j
end;
end;
Gii thut quy hoch ng cho bi ton ci ti
M: sc cha ti a ca ci ti
30
Mt th hin ca ci ti
K 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
j=1
cost[k] 0 0 4 4 4 8 8 8 12 12 12 16 16 16 20 20 20
best[k] A A A A A A A A A A A A A A A
j=2
cost[k] 0 0 4 5 5 8 9 10 12 13 14 16 17 18 20 21 22
best[k] A B B A B B A B B A B B A B B
j=3
cost[k] 0 0 4 5 5 8 10 10 12 14 15 16 18 18 20 22 24
best[k] A B B A C B A C C A C C A C C
j=4
cost[k] 0 0 4 5 5 8 10 11 12 14 15 16 18 20 21 22 24
best[k] A B B A C D A C C A C C D C C
j=5
cost[k] 0 0 4 5 5 8 10 11 13 14 15 17 18 20 21 23 24
best[k] A B B A C D E C C E C C D E C
Hnh 5.4 Cc mng cost v best ca mt th d bi ton ci ti
31
Ghi Ch:
Bi ton ci ti c th d dng gii c nu M khng ln,
nhng khi M ln th thi gian chy tr nn khng th chp
nhn c.
Phng php ny khng th lm vic c khi M v trng
lng/kch thc l nhng s thc thay v s nguyn.
Tnh cht 4.1.1 Gii thut qui hoch ng gii bi ton ci
ti c thi gian chy t l vi NM.
32
Th d 4: Gii thut Warshall v gii thut Floyd
Tnh bao ng truyn
Trong th c hng, chng ta quan tm n tp nh
m n c t mt nh no bng cch duyt cc
cnh trong th theo mt hng c n nh.
Mt tc v m ta mun thc hin l thm mt cnh t x
n y nu tn ti mt cch no i t x n y
th to ra bng cch thm tt c cc cnh c tnh
cht trn c gi l bao ng truyn ca th.
V th bao ng truyn th thng l th dy, do
ta nn dng cch biu din ma trn k cn.
33
Gii thut Warshall
C mt gii thut n gin tnh bao ng truyn ca
mt th c biu din bng ma trn k cn.
for y : = 1 to V do
for x : = 1 to V do
if a[x, y] then
for j: = 1 to V do
if a[y, j] then a[x, j]: = true;
S. Warshall ra gii thut ny nm 1962, da trn mt
quan st n gin: Nu tn ti mt cch i t nt x n
nt y v cch i t nt y n nt j, th s c cch i t nt
x n nt j.
34
Mt th d tnh bao ng truyn
A B C D E F G H I J K L M
A 1 1 0 0 0 1 1 0 0 0 0 0 0
B 0 1 0 0 0 0 0 0 0 0 0 0 0
C 1 0 1 0 0 0 0 0 0 0 0 0 0
D 0 0 0 1 0 1 0 0 0 0 0 0 0
E 0 0 0 1 1 0 0 0 0 0 0 0 0
F 0 0 0 0 1 1 0 0 0 0 0 0 0
G 0 0 1 0 1 0 1 0 0 1 0 0 0
H 0 0 0 0 0 0 1 1 1 0 0 0 0
I 0 0 0 0 0 0 0 1 1 0 0 0 0
J 0 0 0 0 0 0 0 0 0 1 1 1 1
K 0 0 0 0 0 0 0 0 0 0 1 0 0
L 0 0 0 0 0 0 0 0 0 0 0 1 1
M 0 0 0 0 0 0 0 0 0 0 0 1 1
Ma trn k cn ng vi
bc khi u ca gii
thut Warshall
A
B G C
F
D E
L M
K J
I H
35
A B C D E F G H I J K L M
A 1 1 1 1 1 1 1 0 0 1 1 1 1
B 0 1 0 0 0 0 0 0 0 0 0 0 0
C 1 1 1 1 1 1 1 0 0 1 1 1 1
D 0 0 0 1 1 1 0 0 0 0 0 0 0
E 0 0 0 1 1 1 0 0 0 0 0 0 0
F 0 0 0 1 1 1 0 0 0 0 0 0 0
G 1 1 1 1 1 1 1 0 0 1 1 1 1
H 1 1 1 1 1 1 1 1 1 1 1 1 1
I 1 1 1 1 1 1 1 1 1 1 1 1 1
J 1 1 1 1 1 1 1 0 0 1 1 1 1
K 0 0 0 0 0 0 0 0 0 0 1 0 0
L 1 1 1 1 1 1 1 0 0 1 1 1 1
M 1 1 1 1 1 1 1 0 0 1 1 1 1
Ma trn k cn ng vi
bc cui cng ca gii
thut Warshall
Tnh cht 5.3.1 Gii thut
Warshall tnh bao ng
truyn vi chi ph O(V
3
).
Gii thut Warshall th hin s p dng chin lc quy hoch ng
v s tnh ton cn c vo mt h thc truy hi (5.4) nhng li
khng xy dng thnh gii thut quy. Thay vo l mt gii
thut lp vi s h tr ca mt ma trn lu tr cc kt qu trung
gian.
36
Gii thch gii thut Warshall
Gii thut Warshall lp V bc trn ma trn k cn a, to ra mt
loi nhng ma trn:
a
(0)
, a
(y-1)
,a
(y)
,,a
(V)
(5.4)
tng chnh ca gii thut l ta c th tnh tt c cc phn t
trong mi ma trn a
(y)
t ma trn i trc n a
(y-1)
trong lot ma
trn (4.1)
Sau bc lp th y, a[x, j] s bng 1 nu v ch nu c bt k
li i no t nh x n nh j vi nhng nh trung gian mang
ch s khng ln hn y. Ngha l, x v j c th l bt k nh
no nhng nhng nh trung gian trn li i phi nh hn hay
bng y.
Ti bc lp th y, ta tnh cc phn t ca ma trn a bng
cng thc sau:
a
y
[x,j] = a
y-1
[x,j] or (a
y-1
[x, y] and a
y-1
[y, j]) (5.5)
Ch s y ch tr ca mt phn t trong ma trn a sau bc lp
th y.
37
Gii thut Floyd cho bi ton cc li i ngn nht
i vi th c trng s (c hng hoc khng) ta c th
mui xy dng mt ma trn cho php ngi ta tm c li i
ngn nht t x n y i vi mi cp nh. y l bi ton
nhng li i ngn nht cho mi cp nh (all-pairs shortest
path problem).
A
B G C
F
D E
L M
K J
I H
2
3
1
1
1
4
2
5
3
2
1
2
2
1
1
1
1
Hnh 5.7
38
Gii thut Floyd
C th dng mt phng php tng t nh phng php
Warshall, m c a ra bi R. W. Floyd:
for y : = 1 to V do
for x : = 1 to V do
if a [x, y] > 0 then
for j: = 1 to V do
if a [y, j] > 0 then
if (a[x, j] = 0) or (a[x, y] + a[y, j] < a [x, j])
then
a[x, j] = a[x, y] + a[y, j];
39
Mt th d dng gii thut Floyd (cho thi hnh 5.7)
A B C D E F G H I J K L M
A 0 1 0 0 0 2 4 0 0 0 0 0 0
B 0 0 0 0 0 0 0 0 0 0 0 0 0
C 1 0 0 0 0 0 0 0 0 0 0 0 0
D 0 0 0 0 0 1 0 0 0 0 0 0 0
E 0 0 0 2 0 0 0 0 0 0 0 0 0
F 0 0 0 0 2 0 0 0 0 0 0 0 0
G 0 0 1 0 1 0 0 0 0 1 0 0 0
H 0 0 0 0 0 0 3 0 1 0 0 0 0
I 0 0 0 0 0 0 0 1 0 0 0 0 0
J 0 0 0 0 0 0 0 0 0 0 1 3 2
K 0 0 0 0 0 0 0 0 0 0 0 0 0
L 0 0 0 0 0 5 5 0 0 0 0 0 1
M 0 0 0 0 0 0 0 0 0 0 0 1 0
Ma trn k cn
ng vi bc
khi u ca
gii thut Floyd
Ch : Cc phn t trn
ng cho u bng 0.
40
A B C D E F G H I J K L M
A 6 1 5 6 4 2 4 0 0 5 6 8 7
B 0 0 0 0 0 0 0 0 0 0 0 0 0
C 1 2 6 7 5 3 5 0 0 6 7 9 8
D 0 0 0 5 3 1 0 0 0 0 0 0 0
E 0 0 0 2 5 3 0 0 0 0 0 0 0
F 0 0 0 4 2 5 0 0 0 0 0 0 0
G 2 3 1 3 1 4 6 0 0 1 2 4 3
H 5 6 4 6 4 7 3 2 1 4 5 7 6
I 6 7 5 7 5 8 4 1 2 5 6 8 7
J 10 11 9 11 9 12 8 0 0 9 1 3 2
K 0 0 0 0 0 0 0 0 0 0 0 0 0
L 7 8 6 8 6 9 5 0 0 6 7 2 1
M 8 9 7 9 7 10 6 0 0 7 8 1 2
Ma trn k cn ng
vi bc cui ca
gii thut Floyd
Tnh cht 5.3.2 Gii
thut Floyd gii bi
ton nhng li i
ngn nht gia
nhng cp c
phc tp tnh ton
O(V
3
).
41
Gii thch gii thut Floyd
Gii thut Floyd lp V bc trn ma trn k cn a, to ra mt loi
nhng ma trn:
a
(0)
, a
(y-1)
,a
(y)
,,a
(V)
(5.6)
tng chnh ca gii thut l ta c th tnh tt c cc phn t trong
mi ma trn a
(y)
t ma trn i trc n, a
(y-1)
trong lot ma trn.
Sau bc lp th y, a[x, j] s cha chiu di nh nht ca bt k li i
no t nh x n nh j m i qua nhng nh trung gian khng mang
ch s ln hn y. Ngha l, x v j c th c l bt k nh no nhng
nhng nh trung gian trn li i phi nh hn hay bng y.
Ti bc lp th y, ta tnh cc phn t ca ma trn a bng cng thc
sau:
a
y
[x,j] = min( a
y-1
[x,j], a
y-1
[x, y] + a
y-1
[y, j]) (5.7)
Ch s y ch tr ca mt phn t trong ma trn a sau bc lp th y.
42
y
x
j
a
y-1
[x,y] a
y-1
[y,j ]
a
y-1
[x,j ]
Cng thc ny c minh ha bng hnh v sau y.
Gii thut Floyd th hin s p dng chin lc quy hoch
ng cho mt bi ton ti u ha v s tnh ton cn c vo
mt h thc truy hi (5.6) nhng li khng xy dng thnh
gii thut quy. Thay vo l mt gii thut lp vi s
h tr ca mt ma trn lu tr cc kt qu trung gian.
43
Ci tin gii thut Floyd
Ta thng mun bit li i ngn nht t mt nh n
mt nh khc bao gm nhng nh trung gianno.
Mt cch thc hin iu ny l dng thm mt ma trn
P, vi P[i,j] cha nh k m khin gii thut Floyd tm
c gi tr nh nht cho a[i,j].
Gii thut Floyd ci tin s nh sau:
for i := 1 to V do
for j:= 1 to V do
P[i,j] := 0;
for i := 1 to V do
a[i,i]:= 0;
44
for y : = 1 to V do
for x : = 1 to V do
if a [x, y] > 0 then
for j: = 1 to V do
if a [y, j] > 0 then
if (a[x, j] = 0) or (a[x, y] + a[y, j] < a [x, j]) then
begin
a[x, j] = a[x, y] + a[y, j];
P[x,j] := k;
end
procedure path(x, j: int)
var k : int;
begin
k := P[x,j];
if k = 0 then return;
path(x,k); writeln(k); path(k,j);
end
in ra nhng nh trung gian
trn li i ngn nht t nh x
n nh j, ta gi th tc
path(x,j) vi path l mt th
tc quy c cho hnh
bn.
45
Cc gii thut ti u ha thng i qua mt s bc vi mt tp
cc kh nng la chn ti mi bc. Mt gii thut tham lam
thng chn mt kh nng m xem nh tt nht ti lc .
Tc l, gii thut chn mt kh nng ti u cc b vi hy vng s
dn n mt li gii ti u ton cc.
Vi th d ca gii thut tham lam:
- Bi ton xp lch cho cc hot ng
- Bi ton ci ti dng phn s
- Bi ton m Huffman
- Gii thut Prim tnh cy bao trm ti thiu
2. Gii thut tham lam
46
Gi s ta c mt tp S = {1, 2, , n} gm n hot ng m
cng mun s dng cng mt ti nguyn, th d nh mt
ging ng, m ch c th c dng bi mt hot ng
ti mt lc.
Mi hot ng i c thi im bt u s
i
v mt thi im kt
thc f
i
, m s
i
s f
i
. Nu c la chn, hot ng i din ra
trong thi khong [s
i
, f
i
). Hot ng i v j l tng thch nu
thi khong [s
i
, f
i
) v [s
j
, f
j
) khng ph lp ln nhau (tc l, i
v j l tng thch nu s
i
>= f
j
hay s
j
>= f
i
).
Bi ton xp lch cc hot ng l chn ra mt chui cc
hot ng tng thch vi nhau v c s hot ng nhiu
nht.
Bi ton xp lch cho cc hot ng (Activity-
Selection Problem)
47
Gii thut tham lam cho bi ton xp lch cc
hot ng
Trong th tc p dng gii thut tham lam gii bi ton
xp lch cc hot ng, ta gi s rng cc hot ng nhp vo
c sp theo th t tng ca thi im kt thc:
f
1
s f
2
s s f
n
.
procedure GREED-ACTIVITY-SELECTOR(S, f) ; /* s is the
array keeping the set of activities and f is the array keeping the
finishing times */
begin
n := length[s]; A:= {1}; j: = 1;
for i: = 2 to n do
if s
i
>= f
j
then /* i is compatible with all activities in A */
begin A: = A {i}; j: = i end
end
48
Th tc Greedy-activity-selector
Hot ng c chn bi th tc GREEDY-ACTIVITY-
SELECTER thng l hot ng vi thi im kt thc sm
nht m c th c xp lch mt cch hp l. Hot ng c
chn theo cch tham lam theo ngha n s li c hi
xp lch cho c nhiu hot ngkhc.
Gii thut tham lam khng nht thit em li li gii ti u.
Tuy nhin th tc GREEDY-ACTIVITY-SELECTOR thng
tm c mt li gii ti u cho mt th hin ca bi ton xp
lch cc hot ng.
49
i s
i
f
i
1 1 4
2 3 5
3 0 6
4 5 7
5 3 8
6 5 9
7 6 10
8 8 11
9 8 12
10 2 13
11 12 14
Hnh 5.5 Mt th d
ca bi ton xp lch
50
Hai thnh phn chnh ca gii thut tham lam
C hai tnh cht m cc bi ton phi c c th p dng
gii thut tham lam l: (1) tnh cht la chn tham lam v
(2) tiu cu trc ti u.
La chn c thc hin bi gii thut tham lam ty thuc
vo nhng la chn lm cho n by gi, nhng n
khng ty thuc vo bt k la chn trong tng lai hay
nhng li gii ca nhng bi ton con. Nh vy, mt gii
thut tham lam tin hnh theo kiu t trn xung, thc hin
mi lc mt la chn tham lam.
Tnh cht tiu cu trc ti u (Optimal Substructure)
Mt bi tan c tnh cht tiu cu trc ti u nu mt li
gii ti u cha trong n nhng li gii ti u cho nhng
bi ton con.
51
S khc bit gia qui hoch ng v gii thut tham lam
khi dng gii bi ton ti u l rt t nh.
Bi ton ci ti dng 0-1 c nh nghi nh sau:
'Mt k trm t nhp vo mt ca hiu tm thy n loi mn
hng c trng lng v gi tr khc nhau (mn hng th i c gi
tr v
i
la v trng lng w
i
), nhng ch c mt ci ti vi sc
cha v trng lng l M mang cc mn hng. Bi ton ci ti
l tm mt t hp cc mn hng m k trm nn chn b vo ci
ti t c mt gi tr ti a vi nhng mn hng m y ly
i..
Bi ton ny c gi l bi ton ci ti dng 0-1 v mi
mn hng th hoc l ly i hoc l b li, k trm khng
th ly i ch mt phn ca mn hng.
Gii thut tham lam so snh vi quy hoch ng
52
Bi ton ci ti dng phn s (Fractional
knapsack problem)
Trong bi ton ci ti dng phn s, tnh tit cng nh vy,
nhng k trm c th ly i mt phn ca mt mn hng.
C hai bi ton u c tnh cht tiu cu trc ti u.
- i vi bi ton ci ti dng 0-1, xt mt t hp nng M k
m em li gi tr cc i. Nu ta ly mn hng th j ra khi
ti, nhng mn hng cn li cng l t hp em li gi tr ln
nht ng vi trng lng ti a M - w
j
m k trm c th ly
i t n-1 loi mt hng tr mt hng th j.
- i vi bi ton ci ti dng phn s, xt trng hp khi ta
ly ra khi ti w
j
-w k ca mt hng th j, nhng mn hng
cn li cng l t hp em li gi tr ln nht ng vi trng
lng M (w
j
w) m k trm c th ly i t n-1 loi mt
hng tr mt hng th j.
53
Bi ton ci ti dng phn s (tt.)
Ta dng gii thut tham lam cho bi ton ci ti dng phn
s v qui hoch ng cho bi ton ci ti dng 1-0.
gii bi ton ci ti dng phn s, trc tin ta tnh h s
gi tr tin trn mt n v trng lng (v
i
/w
i
) ca tng mt
hng.
K trm bt u bng cch ly cng nhiu cng tt mt
hng c h s v
i
/w
i
ln nht. Khi loi mt hng ny cn
m k trm cn c th mang thm c na th y s ly cng
nhiu cng tt mt hng c h s v
i
/w
i
ln nh v c nh th
cho n khi y khng cn c th mang thm na.
54
Hnh 5.6
55
procedure GREEDY_KNAPSACK(V, W, M, X, n);
/* V, W are the arrays contain the values and weights of n objects
ordered so that V
i
/W
i
> V
i+1
/W
i+1
. M is the knapsack capacity and X is
solution vector */
B qua thi gian
sp th t cc
mn hng, gii
thut ny c
phc tp O(n).
var rc: real; i: integer;
begin
for i:= 1 to n do X[i]:= 0;
rc := M ; // rc = remaining knapsack
capacity //
for i := 1 to n do
begin
if W[i] > rc then exit;
X[i] := 1; rc := rc W[i]
end;
if i s n then X[i] := rc/W[i]
end
56
M Huffman
Ch ny lin quan n vn nn file (file
compression). Cc m Huffman l k thut c dng
ph bin v rt hu hiu cho vic nn d liu, tit kim
t 20% n 90% l in hnh.
Bc u tin ca vic xy dng m Huffman l m
tn s xut hin (frequency) ca mi k t trong tp tin
c m ha.
Gi s ta c mt tp tin 100000 k t m ta mun lu
tr dng nn.
57
a b c d e f
Tn s 45 13 12 16 9 5
M c chiu di c nh 000 001 010 011 100 101
M c chiu di thay i 0 101 100 111 1101 1100
Xt bi ton thit k mt m nh phn cho k t (binary
character code) theo mi k t c din t bng mt
trng bit nh phn.
Nu ta dng mt m c chiu di c nh (3 bit) din t
6 k t:
a = 000, b = 001, . . . , f = 101
Th cn tt c 300000 bit m ha ton tp tin.
58
M c chiu di thay i
Mt m c chiu di thay i (variable-length code) c th lm
vic tt hn mt m c chiu di c nh, n cho nhng k t
hay xut hin nhng m ngn v nhng k t t hay xut
hin nhng m di hn.
a = 0, b = 101, . . . f = 1100
M ny i hi:
(45. 1 + 13 .3 + 12.3 + 16.3 + 9.4 + 5.4).1000 = 224000 bits
biu din tp tin, tit kimc ~ 25 %.
V y cng chnh l m ti u cho tp tin ny.
59
M phi-tin t (Prefix-code)
y ta ch xt nhng cch m ha m khng c m ca k t
no l tin t (prefix) ca m ca mt k t khc. Nhng cch
m ha nh vy c gi l m phi tin t (prefix-free-code)
hay m tin t (prefix-code).
C th chng minh c rng s nn tin ti u c thc hin
bi mt cch m ha k t v l m phi tin t.
M phi tin t c a chung v n lm n gin s m ha
v gii m.
- S m ha l n gin; ta ch cn ghp k cc m ca cc k
t li vi nhau th s biu din c mi k t trong tp tin.
- S gii m cn mt s biu din thun tin cho m phi tin t
sao cho phn u ca m c nht ra mt cch d dng.
60
M phi tin t v cy nh phn
Biu din cho mt m phi tin t l mt cy nh phn vi mi
nt l tng ng vi cc k t c cho.
Chng ta phn gii mt m nh phn cho mt k t nh l
mt li i t nt r n nt l ca k t y, m 0 ng vi r
sang con bn tri v 1 ngha l r sang con bn phi.
M ti u ca mt tp tin thng c biu din bng mt
cy nh phn y (full binary tree). Mt cy nh phn y
l mt cy nh phn m mi nt khng phi l c hai
con.
Nu C l tp k t m t cc k t ly ra, th cy nh phn
cho m phi tin t ti u c ng |C| nt l, mi nt l cho
mt k t, v ng |C|-1 nt ni.
61
100
58
a:45 b:13 f:5 e:9 d:16 c:12
14 86
14 28
0 1
0
0 1
1 0
0
1
0
1
e:9 f:5
14
0 1
30
0
d:16
1
b:13 c:12
25
0 1
55
0 1
a:45
100
0 1
(a) (b)
Hnh 5.7 So snh hai cch m ha
62
M phi tin t v cy nh phn (tt.)
Cho mt cy T tng ng vi mt m phi tin t, chng ta c
th tnh tng s bit cn m ha mt tp tin.
Vi mi k t c trong tp k t C, dng f(c) k hiu tn s
xut hin ca c trong tp tin v d
T
(c) l chiu di ca m cho
k t c. Th s bit i hi m ha tp tin l
B(T) = E f(c)d
T
(c)
ceC
M chng ta coi l chi ph ca cy nh phn T.
63
Huffman xut mt gii thut tham lam cu to mt
m phi tin t ti u c gi l m Huffman (Huffman
code).
Gii thut to mt cy nh phn T tng ng vi m ti u
theo kiu t di ln. Gii thut bt u vi mt tp gm |C|
nt l v thc hin mt chui gm |C| tc v trn to ra
cy cui cng.
Mt hng i c u tin Q, ly tr kha theo tn s f, c
dng nhn din hai i tng c tn s nh nht trn
li vi nhau.
Kt qu ca vic trn hai i tng l mt i tng mi m
tn s l tng tn s ca hai i tng m c trn.
Cu to m Huffman
64
Hnh 5.8 Cc bc ca gii thut to m Huffman
e:9 f:5
14
0 1
30
0
d:16
1
b:13 c:12
25
0 1
55
0 1
a:45
(a)
(e)
f:5 e:9 a:45 d:16 b:13 c:12
e:9 f:5
14
0 1
d:16 b:13 c:12 (b) a:45
b:13 c:12
25
0 1
d:16 (c) a:45
e:9 f:5
14
0 1
b:13 c:12
25
0 1
(d) a:45
e:9 f:5
14
0 1
30
0
d:16
1
(f)
e:9 f:5
14
0 1
30
0
d:16
1
b:13 c:12
25
0 1
55
0 1
a:45
100
0 1
65
Gii thut Huffman
procedure HUFFMAN(C) ;
begin
n := |C| ; Q := C ;
for i := 1 to n -1 do
begin
z: = ALLOCATE-NODE( );
left[z]: = EXTRACT-MIN(Q);
right[z]: = EXTRACT-MIN(Q);
f[z] := f[left[z]] + f[right[z]];
INSERT(Q, z);
end
end
Gi s Q c hin thc bi mt
heap.
Cho mt tp C gm n k t, vic
khi to Q c thc thi vi thi
gian O(n).
Vng lp for c thc thi chnh
xc gm n-1 ln, v v mi tc v
lm vic trn heap i hi O(lgn),
vng lp ny ng gp chi ph
O(nlgn) vo thi gian tnh ton.
Nh vy, phc tp ca gii
thut HUFFMAN trn tp n k t
s l O(nlgn).
66
Th d 4: Bi ton t mu th
Cho mt th v hng, tm s mu ti thiu t
cc nh ca th sao cho khng c hai nh no
c cnh ni li c t cng mu.
y l mt bi ton ti u ha.
Mt chin lc gii quyt bi ton ny l dng
gii thut tham lam.
tng: u tin ta c t cho c nhiu nh vi
mu u tin, v ri dng mt mu mi t cc nh
cha t sao cho t c cng nhiu nh cng tt.
V qu trnh ny c lp li vi nhng mu khc
cho n khi mi nh u c t mu.
Ch : Gii thut tham lam khng em li li gii ti
u cho bi ton.
67
t mu cc nh trong th vi mt mu mi, ta
thc hin cc bc sau:
Chn mt nh cha t no v t n vi mu mi.
Duyt qua danh sch cc nh cn cha t. Vi mi nh
cha t, xt xem n c cnh ni n bt c nh no
c t vi mu mi khng. Nu khng c mt cnh nh
th, ta t nh vi mu mi.
Th d: Trong hnh v, ta t nh 1 vi mu , ri th
ta c th t cc nh 3 v 4 vi cng mu .
1 5
3
2
4
68
Th tc SAME_COLOR
Th tc SAME_COLOR xc inh mt tp cc nh
(bin newclr), m tt c nhng nh c th t vi
cng mu mi. Th tc ny c gi nhiu ln cho
n khi mi nh u c t mu.
procedure SAME_COLOR(G, newclr);
/* SAME_COLOR assigns to newclr a set
of vertices of G that may be given the
same color */
begin
newclr := C;
for each uncolored vertex of G do
if v is not adjacent to any vertex in newclr
then
mark v colored and add v to newclr.
end;
69
procedure G_COLORING(G);
procedure SAME_COLOR(G, newclr);
/* SAME_COLOR assigns to newclr a set of
vertices of G that may be given the same color ;
a: adjacency matrix for graph G */
begin
newclr := C;
for each uncolored vertex v of G do
begin
found := false;
for each vertex w X newclr do
if a[v,w] = 1 /*there is an edge between v and w in G */
then
found := true;
if not found then
mark v colored and add v to newclr
end
end;
70
for each vertex in G do mark uncolored;
while there is any vertex marked uncolored do
begin
SAME_COLOR(G, newclr);
print newclr
end.
Bc ca mt nh: s cnh ni n nh .
nh l: Nu _(G) l s mu ti thiu t th G v
AG l bc ln nht trong th G th _(G) AG +1
phc tp ca gii thut t mu th
Tc v cn bn: kim tra hai nh c cnh ni hay khng.
phc tp ca th tc SAME_COLOR: O(n).
Nu m l s mu c dng t th th th tc SAME_COLOR
c gi tt c m ln. Do , phc tp ca ton gii thut:
m* O(n). V m thng l mt s nh, ta c th ni
Gii thut c phc tp tuyn tnh.
71
ng dng: Xp lch thi hc k
Mi mn thi c biu din bng mt nh trong
th.
Xp lch thi l gn ca thi vo cc mn thi. Cc ca thi
chnh l cc mu dng t cho cc nh.
Mt cnh ni gia hai nh nu c tn ti t nht mt
sinh vin ly c hai mn v phi thi c hai mn, do
khng th xp hai mn thi biu th bng hai nh
vo cng mt ca thi.
ng dng: Gn tn s trong lnh vc v tuyn, in
thoi di ng (Frequency assignment problem)
72
Mt Heuristic cho bi ton T Mu th
Mu c bc ln nht c t trc. (Welsh and Powell)
Bc ca mt nh: s cnh ni n nh .
L do: Nhng nh c cng nhiu cnh ni ti th
cng kh t nu ta i cho n khi nhng nh lng
ging ca n c t.
Gii thut
Arrange the vertices by decreasing order of degrees.
Color a vertex with maximal degree with color 1.
Choose an uncolored vertex with a maximum degree. If
there is another vertex with the same maximum vertex,
choose either of them.
Color the chosen vertex with the least possible (lowest
numbered) color.
If all vertices are colored, stop. Otherwise, return to 3.

You might also like