Bài toán cái túi d ng phân s tta dùng gi i thu t tham lam cho bài toán cái túi d ng phân s và qui ho ch ng cho bài toán cái túi d ng 1-0... procedure DY_KNAPSACKV, W, M, X, n;/* V, W are
Trang 1Ch ng 5
Các k thu t thi t k gi i thu t
Trang 2N i dung
1 Qui ho ch ng
2 Gi i thu t tham lam
3 Gi i thu t quay lui
Trang 31 Qui ho ch ng
Quy ho ch ng (dynamic programming) gi i các bài toán
b ng cách k t h p các l i gi i c a các bài toán con c a bài toán ang xét
Ph ng pháp này kh d ng khi các bài toán con không c
l p i v i nhau, t c là khi các bài toán con có dùng chung
nh ng bài toán “cháu” (subsubproblem)
Qui ho ch ng gi i các bài toán “cháu” dùng chung này
m t l n và l u l i gi i c a chúng trong m t b ng và sau ó
kh i ph i tính l i khi g p l i bài toán cháu ó
Qui ho ch ng c áp d ng cho nh ng bài toán t i u
Trang 7Phát bi u bài toán nhân xâu ma tr n
'‘Cho m t chu i <A1, A2, …, An> g m n matr n, v i m i
i = 1, 2, …, n, ma tr n Ai có kích th c pi-1 pi, ta m - ngo c tích này sao cho t i thi u hóa t ng s phép nhân vô
ây là m t bài toán t i u hóa thu c lo i khó.
Trang 8nguyên k, 1 k < n Ngh a là, tr c tiên ta tính các chu i ma
tr n A1 k and Ak+1 n và r i nhân chúng v i nhau cho ra A1.n
Chi phí c a s m óng ngo c t i u này = chi phí tính Al k +chí phí tính Ak+1 n, + chi phí nhân chúng l i v i nhau
Trang 9Di n t l i gi i m t cách quy
â , nh ng bài toán con c a ta là bài toán xác nh chi phí
t i u ng v i s m óng ngo c cho chu i Ai.Ai+1… Aj v i
t m[i, j] là t ng s t i thi u các phép nhân vô h ng c
òi h i tính ma tr n Ai j Chi phí c a cách r nh t tính
A1 n s c ghi m[1, n]
Gi s r ng s m óng ngo c t i u t ch i tích chu i Ai
Ai+l… Aj t i gi a Ak and Ak+l, v i i k < j Thì m[i, j] b ng
v i chí phí t i thi u tính Ai k và Ak+1 j, c ng v i chi phí
nhân hai ma tr n này l i v i nhau
Trang 10M t c ng th c quy
Trang 11M t nh n xét quan tr ng
nh n xét quan tr ng là
m óng ngo c c a xâu con A1A2 Ak bên trong s m
óng ngo c t i u c a xâu A1A2…An c ng ph i là m t s m
óng ngo c t i u''
Nh v y, m t l i gi i t i u cho bài tóan tích xâu ma tr n
ch a ng trong nó nh ng l i gi i t i u c a nh ng bài toáncon
B c th hai c a ph ng pháp qui ho ch ng là nh ngh a
tr c a l i gi i t i u m t cách quy theo nh ng l i gi i t i
u c a nh ng bài toán con
Trang 12Tính nh ng chi phí t i u
vì tính l i gi i d a vào công th c cho (5.2) b ng m t
gi i thu t quy, chúng ta i th c hi n B c 3 c a qui ho chng: tính chi phí t i u b ng cách ti p c n t d i lên
Trang 17B c 4 T o m t l i gi i t i u
a dùng m ng s[1 n, 1 n] xác nh cách t t nh t tínhtích xâu ma tr n M i ph n t s[i, j] ghi tr of k sao cho t i
ó s m óng ngo c t i u tách ôi xâu AiAi+1… Aj thành
hai o n t i Ak và Ak+1
Cho tr c chu i ma tr n A = <A1, A2…, An>, b ng s và các
ch s i và j, th t c quy MATRIX-CHAIN-MULTIPLY sau
ây tính tích xâu ma tr n Ai j, Th t c tr v k t qu qua
tham s AIJ
V i l nh g i ban u là
MATRIX-CHAIN-MULTIPLY(A,s, 1, n, A1N)
Trang 19ó ành ph n then ch t mà m t bài toán t i u hóa ph i
Trang 20Nh ng bài toán con trùng l p
m t gi i thu t quy g p l i cùng m t bài toán con
nhi u l n, ta b o r ng bài toán t i u hóa có nh ng bài toáncon trùng l p
Gi i thu t quy ho ch ng l i d ng nh ng bài toán con
trùng l p b ng cách gi i m i bài toán con m t l n, c t l i
gi i vào trong m t b ng mà b ng này s c tham kh o
n khi c n
Các gi i thu t quy l m vi c t trên xu ng trong khi các
gi i thu t quy ho ch ng làm vi c t d i lên, Cách sau
h u hi u h n
Trang 21Thí d ài toán chu i con chung dài nh t
chu i con subsequence) a m t chu i (sequence) là
chu i y sau khi b i m t vài ph n t
Trang 22Ti u c u trúc t i u c a bài toán chu i con
1 N u xm = yn thì zk = xm = yn và Zk-1 là LCS c a Xm-1 và
Yn-1
2 N u xm yn, thì zk xm hàm ý Z là LCS c a Xm-1 và Y
3 N u xm yn, thì zk yn hàm ý Z là LCS c a X và Yn-1
Trang 23ì m t LCS c a X và Y, ta có th c n tìm LCS c a X và
Yn-1 và LCS c a Xm-1 và Y Nh ng m i trong hai bài toán
con này có nh ng bài toán “cháu” tìm Xm-1 và Yn-1
G i c[i, j] là chi u dài c a LCS c a hai chu i Xi và Yj N u
i = 0 hay j = 0, thì LCS có chi u dài 0 Tính ch t ti u c u
trúc t i u c a bài toán LCS cho ra công th c quy sau:
c[i, j] = c[i-1, j-1]+1 n u i, j > 0 và xi = yj
max(c[i, j-1],c[i-1,j]) n u i,j >0 và xi yj (5.3)
Trang 25begin 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;
Trang 260 0
0 0
0 0
Trang 28Thí d Bài toán cái túi napsac
'‘M t k tr m t nh p vào m t c a hi u tìm th y có n m thàng có tr ng l ng và giá tr khác nhau, nh ng y ch
mang theo m t cái túi có s c ch a v tr ng l ng t i a là
M Bài toán cái túi là tìm m t t h p các m t hàng mà k
tr m nên b vào cái túi t m t giá tr cao nh t v i
nh ng món hàng mà y mang i.”
Bài toán này có th gi i b ng qui ho ch ng b ng cách
dùng hai b ng cost và best sau ây:
cost[i] ch a giá tr t i a mà có th th c hi n c v i m tcái túi có s c ch a i
cost[i] = cost[i – size[j]] + val[j]
best[i] ch a m t hàng cu i cùng b vào túi nh m t c
Trang 29M t thí d c a bài toán cái túi
value 4 5 10 11 13
Trang 31cost[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
Trang 32Ghi Chú:
Bài toán cái túi có th d dàng gi i c n u M không l n,
nh ng khi M l n thì th i gian ch y tr nên không th ch p
Trang 33ác gi i thu t t i u hóa th ng i qua m t s b c v i m t
t p các kh n ng l a ch n t i m i b c M t gi i thu t thamlam th ng ch n m t kh n ng mà xem nh t t nh t t i lúc
ó
T c là, gi i thu t ch n m t kh n ng t i u c c b v i hy
v ng s d n n m t l i gi i t i u toàn c c
Vài thí d c a gi i thu t tham lam:
- Gi i thu t Prim tính cây bao trùm t i thi u
- Gi i thu t Dijkstra gi i bài tóan nh ng l i i ng n
nh t t m t nh ngu n (single-source shortest paths
Gi i thu t tham lam
Trang 35Gi i thu t tham lam cho bài toán x p l ch các
Trang 38Hai thành ph n chính c a gi i thu t tham lam
ó hai tính ch t mà các bài toán ph i có có th áp d ng
gi i thu t tham lam là: (1) tính ch t l a ch n tham lam và(2) ti u c u trúc t i u
L a ch n c th c hi n b i gi i thu t tham lam tùy thu cvào nh ng l a ch n ã làm cho n bây gi , nh ng nó
không tùy thu c vào b t k l a ch n trong t ng lai hay
nh ng l i gi i c a nh ng bài toán con Nh v y, m t gi i
thu t tham lam ti n hành theo ki u t trên xu ng, th c hi n
m i lúc m t l a ch n tham lam
Tính ch t ti u c u trúc t i u (Optimal Substructure)
M t bài tóan có tính ch t ti u c u trúc t i u n u m t l i
gi i t i u ch a trong nó nh ng l i gi i t i u cho nh ngbài toán con
Trang 39khác bi t gi a qui ho ch ng và gi i thu t tham lam
khi dùng gi i bài toán t i u là r t t nh
Bài toán cái túi d ng 0-1 c nh nghiã nh sau
'‘M t k tr m t nh p vào m t c a hi u tìm th y n lo i món
hàng có tr ng l ng và giá tr khác nhau (món hàng th i có giá
tr vi ô la và tr ng l ng wi), nh ng ch có m t cái túi v i s c
ch a v tr ng l ng là M mang các món hàng Bài toán cái túi
là tìm m t t h p các món hàng mà k tr m nên ch n b vào cái
túi t c m t giá tr t i a v i nh ng món hàng mà y l y
i.”.
Bài toán này c g i là bài toán cái túi d ng 0-1 vì m i
Trang 40Bài toán cái túi d ng phân s Fractional
knapsack proble
rong bài toán cái túi d ng phân s , tình ti t c ng nh v y,
nh k tr m có th l y i m t ph n c a m t món hàng
C hai bài toán u có tính ch t ti u c u trúc t i u
i v i bài toán cái túi d ng 0-1, xét m t t h p n ng M ký
mà em l i giá tr c c i N u ta l y món hàng th j ra kh itúi, nh ng món hàng còn l i c ng là t h p em l i giá tr l n
nh t ng v i tr ng l ng t i a M - wj mà k tr m có th l y
i t n-1 lo i m t hàng tr m t hàng th j
i v i bài toán cái túi d ng phân s , xét tr ng h p khi ta
l y ra kh i túi wj -w ký c a m t hàng th j, nh ng món hàngcòn l i c ng là t h p em l i giá tr l n nh t ng v i tr ng
l ng M – (w –w) mà k tr m có th l y i t n-1 lo i m t
Trang 41Bài toán cái túi d ng phân s tt
a dùng gi i thu t tham lam cho bài toán cái túi d ng phân
s và qui ho ch ng cho bài toán cái túi d ng 1-0
gi i bài toán cái túi d ng phân s , tr c tiên ta tính h sgiá tr ti n trên m t n v tr ng l ng (vi/wi ) c a t ng m thàng
K tr m b t u b ng cách l y càng nhi u càng t t m t
hàng có h s vi/wi l n nh t Khi lo i m t hàng này ã c n
mà k tr m còn có th mang thêm c n a thì y s càng
nhi u càng t t m t hàng có h s vi/wil n nhì và c nh thcho n khi y không còn có th mang thêm n a
Trang 42ình 5.6
Trang 43procedure DY_KNAPSACK(V, W, M, X, n);
/* V, W are the arrays contain the values and weights of n objects
ordered so that Vi/Wi ≥ Vi+1/Wi+1 M is the knapsack capacity and X is solution vector */
B qua th i gian
s p th t cácmón hàng, gi ithu t này có
Trang 44Mã Huffman
ph bi n và r t h u hi u cho vi c nén d li u, ti t ki m
t n s xu t hi n (frequency) c a m i ký t trong t p tin
c mã hóa.
Gi s chúng ta có m t t p tin 100000 ký t mà chúng
Trang 45a b c d e f
T n s 45 13 12 16 9 5
Mã có chi u dài c nh 000 001 010 011 100 101
Mã có chi u dài thay i 0 101 100 111 1101 1100
b ng m t tràng bit nh phân.
di n t 6 ký t :
a = 000, b = 001, , f = 101
Trang 46Mã có chi u dài thay i
mã có chi u dài thay i variable-length code có th làm
vi c t t h n m t mã có chi u dài c nh, nó cho nh ng ký thay xu t hi n nh ng mã ng n và nh ng ký t hay xu t hi n
Trang 47Mã phi t Prefix
â ch xét nh ng cách mã hóa mà không có mã c a ký tnào là ti n t (prefix) c a mã c a m t ký t khác Nh ng cách
mã hóa nh v y c g i là mã phi ti n t (prefix-free-code)
Trang 48Mã phi ti n t và cây nh phân
Bi u di n cho m t mã phi ti n t là m t cây nh phân v i m inút lá t ng ng v i các ký t c cho
Chúng ta phân gi i m t mã nh phân cho m t ký t nh là
sang con bên trái” và 1 ngh a là “r sang con bên ph i”
Mã t i u c a m t t p tin th ng c bi u di n b ng m t
c y nh phâ n y (full binary tree) M t cây nh phân y
là m t cây nh phân mà m i nút không ph i lá có haicon
N u C là t p ký t mà t ó các ký t l y ra, thì cây nh phâncho mã phi ti n t t i u có úng |C| nút lá, m i nút lá cho
m t ký t , và úng |C|-1 nút n i
Trang 4958
a:45 b:13 c:12 d:16 e:9 f:5
14 86
14 28
0
0 1
1 0
0
1
e:9 f:5
14
30 0
d:16
1 b:13
Trang 50Mã phi ti n t và cây nh phân tt
Cho m t cây T t ng ng v i m t mã phi ti n t , chúng ta có
th tính t ng s bit c n mã hóa m t t p tin
V i m i ký t c trong t p ký t C, dùng f(c) ký hi u t n s
xu t hi n c a c trong t p tin và dT(c) là chi u dài c a mã cho
ký t c Thì s bit òi h i mã hóa t p tin là
c C
Mà chúng ta coi là chi phí c a cây nh phân T
Trang 51Huffman ã xu t m t gi i thu t tham lam c u t o m t
mã phi ti n t t i u c g i là mã Huffman (Huffman
code)
Gi i thu t t o m t cây nh phân T t ng ng v i mã t i utheo ki u t d i lên Gi i thu t b t u v i m t t p g m |C|nút lá và th c hi n m t chu i g m |C| tác v tr n t o ra cây cu i cùng
dùng nh n di n hai i t ng có t n s nh nh t tr n
l i v i nhau
K t qu c a vi c tr n hai i t ng là m t i t ng m i mà
C u t o mã Huffman
Trang 52e:9 f:5
14
30 0
d:16
1 b:13
14
d:16 b:13
c:12
b:13 c:12
14
b:13 c:12
25
e:9 f:5
14
30 0
d:16 1
(f)
14
30 0
d:16
1 b:13
Trang 54m i tác v làm vi c trên heap òi h i O(lgn), vòng l p
này óng góp chi phí O(nlgn) vào th i gian tính toán.
Nh v y, th i gian tính toán c a gi i thu t HUFFMAN
Trang 55Gi i thu t quay lui
ph ng pháp t ng quát gi i quy t v n : thi t k
gi i thu t tìm l i gi i cho bài tóan không ph i là bám theo
m t t p qui lu t tính tóan c xác nh mà là b ng cách
th và s a sai (trial and error)
Khuôn m u thông th ng là phân rã quá trình th và s a
sai thành nh ng công tác b ph n Th ng thì nh ng côngtác b ph n này c di n t theo l i quy m t cách
thu n ti n và bao g m vi c th m dò m t s h u h n nh ngcông tác con
Ta có th coi toàn b quá trình này nh là m t quá trình tìm
ki m (search process) mà d n d n c u t o và duy t qua m t
Trang 56Cho m t bàn c n n v i n2 ô M t con hi p s – c di
chuy n tuân theo lu t ch i c vua – c t trên bàn c t i
Trang 57if not successful then erase previous recordingend
end
until (move was successful) ∨ (no more candidates)
Trang 59procedure ( ; x,y : index; var q: boolean);
var u, v: integer; q1 : boolean;
begin initialize selection for moves;
repeat let u, v be the coordinates of the next move ;
if (1≤u≤n) ∧ (1≤v≤n) ∧ (h[u,v]=0) then
begin h[u,v]:=i;
begintry(i + 1, u, v, q1); if ¬ q1 then h[u,v]:=0end
else q1:= trueend
until q1 ∨ (no more candidates);
q:=q1
Trang 60ho t a c a hi n hành <x, y>, có 8 kh n ng ch n ô k
ti p <u, v> i t i Chúng c ánh s t 1 n 8 nh sau:
7 6
8 5
⊕
1 4
2 3
Trang 61a,b: array [1 8] of integer;
h: array [index, index] of integer;
Trang 62procedure ( ; x, y: index; var q:boolean);
var k,u,v : integer; q1: boolean;
try(i+1, u,v,q1);
if ¬ q1 then h[u,v]:=0 end
else q1:=true end
until q1 ∨ (k =8);
q:=q1
Trang 631,2,2; b[1]:= 1;
for j:=1 to n dowrite(h[i,j]:5);
writelnend
else writeln ( NOSOLUTION’)
end
Trang 64Th t c quy c kh i ng b ng l nh g i v i t a kh i u x0,
y0 , t ó chuy n i b t u.
H[x0,y0]:= 1; try(2, x0, y0, q) Hình 5.3.1 trình bày m t l i gi i t c v i v trí <1,1> v i n = 5.
23 12
3 13
11 22
2
20
21 10
1
Trang 65thí d trên ta i n v i m t ki u “gi i quy t v n
” m i:
c i m chính là
“b c h ng v l i gi i y và ghi l i thông tin
v b c này mà sau ó nó có th b tháo g và xóa i khi phát hi n r ng b c này ã không d n n l i
gi i y , t c là m t b c i d n n “ tình th b
t c ”(dead-end) (Hành vi này c g i là quay lui
-bactracking.)
Trang 66record it;
if solution incomplete thenbegin
if not successful then cancel recordingend
enduntil successful ∨ no more candidates
end
Khu n m u t ng quát c a gi i thu t quay lui
Trang 67procedure try (i: integer);
var k : integer;
begin k:=0;
repeat k:=k+1; select k-th candidate;
if acceptable then begin
record it;
if i<n then begin
try (i+1); (5.3.4)
if not successful then
cancel recording end
end until successful ∨ (k=m) end
Trang 68à toán này ã c C.F Gauss kh o sát n m 1850,
nh ng ông ta không hoàn toàn gi i quy t c.
“ Tám con h u c t vào bàn c sao cho không có con h u nào có th t n công con h u nào ”.
Dùng khuôn m u hình 5.3.1, ta s có c m t th
t c sau cho bài toán 8 con h u:
Bài toán 8 con h u
Trang 69procedure (i: integer);
Trang 70Lu t c : M t con h u có th t n công các con h u khác n m trên
cùng m t hàng, cùng m t c t hay là cùng ng chéo trên bàn c Cách bi u di n d li u
Làm cách nào di n t 8 con h u trên bàn c ?
var array 1 8] of integer;
a: array[1 8] of Boolean;
b: array[b1 b2] of Boolean;
c: array[c1 c2] of Boolean;
v i
x[i] ch v trí c a con h u trên c t th i;
a[j] cho bi t không có con h u trên hàng th j;
b[k] cho bi t không có con h u trên ng chéo th k;
c[k] cho bi t không có con h u trên ng chéo th k.
Trang 71Vi c ch n tr cho các m c b1, b2, c1, c2 c xác nh
b i cách mà các ch s c a các m ng b và c c tính Hãy chú ý r ng trên cùng m t ng chéo chi u t t
c các ô s có cùng giá tr c a t ng hai t a i +j, và trên cùng m t ng chép chi u diagonal, t t c
các ô s có cùng giá tr c a hi u hai t a (i j ).
Nh v y, phát bi u setqueen c tinh ch nh sau:
a[j]:=false; b[i+j]:=false;c[i-j]:=false;
Phát bi u removequeen c chi ti t hóa nh sau:
a[j] = true; b[i+j] = true ; c[i-j] := true
safe c di n t nh sau:
Trang 72try (i+1, q);
if ¬ q then begin
a[j]:=true; b[i+j]:=true;
c[i-j]:=true end
end else q:=true end
until q ∨ (j=8) end {try};
Trang 74H H
H
H H
Trang 76end
Trang 77rong gi i thu t m r ng, n gi n hóa i u ki n d ng
c a quá trình ch n, phát bi u repeat c thay th b ng phát
if a[j] ∧ b[i+j] ∧ c[i-j] then begin
Trang 79hai l i gi i ó c li t kê trong b ng sau:
Trang 80Cây kh ng gian tr ng thái
! ti n di n t gi i thu t quay lui, ta xây d ng c u trúc cây ghi nh ng l a ch n ã c th c hi n C u trúc cây này
c g i là cây không gian tr ng thái (state space tree) haycây tìm ki m (search tree)
! Nút r c a cây di n t tr ng thái u tiên tr c khi quá