Bài giảng Bài toán quy hoạch động (Dynamic programming) - Phạm Thế Bảo

14/04/2008  
BÀI TOÁN QUY HOCH ĐỘNG  
(DYNAMIC PROGRAMMING)  
Phm Thế Bo  
Khoa Toán – Tin hc  
Trường Đại hc Khoa hc Tnhiên Tp.HCM  
Ni dung  
Kthut chia để trthường dn ti gii thut  
đệ quy Æ có gii thut có thi gian mũ và gii  
bài toán con nhiu ln.  
Để tránh gii bài toán con nhiu ln Æ to mt  
bng lưu trkết qucác bài toán con để khi  
cn ssdng li kết qu.  
Lp đầy kết qucác bài toán con theo quy lut  
nào đó để có kết quca bài toán ban đầu Æ  
quy hoch động  
Phm Thế Bo  
1
14/04/2008  
Thut gii  
1. To bng bng cách:  
a. Gán giá trmt sô nào đó.  
b. Gán giá trcho các ô khác nhvào giá trca các  
ô trước.  
2. Tra bng và xác định kết quca bài toán ban  
đầu  
Phm Thế Bo  
Đánh giá  
Ưu đim  
Ch
ươ
ng trình th
c thi nhanh do không t
n th
i gian  
gii li bài toán con.  
Vn dng để gii các bài toán ti ưu, có công thc truy  
hi  
Nhược đim  
Không tìm được công thc truy hi.  
S
l
ượ
ng bài toán con c
n gi
i và l
ư
u tr
k
ế
t qu
r
t  
ln.  
Vic kết hp li gii ca các bài toán con chưa chc  
cho li gii ca bài toán ban đầu.  
Phm Thế Bo  
2
14/04/2008  
Bài toán tính sthp  
k
Tính Cn bng công thc truy hi.  
0
neáu k=0 hay k=n  
neáu 0<k<n  
Ck =  
n
Ck-1 + Cnk1  
n-1  
Thut gii:  
long Comb(int n, int k){  
}
Phm Thế Bo  
Đánh giá  
Gi T(n) là thi gian tính Cn ,  
k
ta có T(1)=C
1
và T(n)=  
gii ta có T(n)=O( )  
Æ bài toán con được gii nhiu ln  
Comb(4,2)  
Comb(3,1)  
Comb(3,2)  
Comb(2,0)  
Comb(2,1)  
Comb(2,1)  
Comb(2,2)  
Phm Thế Bo  
3
14/04/2008  
Dùng quy hoch động  
Xây dng mt bng có (n+1) dòng t0 đến n và  
(n+1) ct t0 đến n. Đin các giá trô(i,j) theo  
nguyên tc sau:  
ô(0,0)=1  
ô(i,0)=1  
ô(i,i)=1 vi 0<in  
ô(i,j)=ô(i-1,j-1)+ô(i-1,j) vi 0<j<in  
Ví dn=4  
0
1
1
1
1
1
1
2
3
4
0
1
2
3
4
1
1
Tam giác Pascal  
1
1
Phm Thế Bo  
Thut gii mi:  
int ** Comb(int n, int k){  
C[0,0]=1;  
for i=1 to n do  
C[i,0]=1;  
C[i,i]=1;  
for j=1 to i-1 do  
C[i,j]=C[i-1,j-1]+C[i-1,j];  
endfor  
return C;  
}
Vòng lp for j thc hin i-1 ln. Vòng lp i lp  
n ln Æ  
Phm Thế Bo  
4
14/04/2008  
Bài toán cái ba lô  
GisX[k,V] là slượng đồ vt k được chn,  
F[k,V] tng giá trk đồ vt được chn và V là  
trng lượng còn li ca ba lô, k=1..n và  
V=1..W.  
Trường hp đơn gin nht: chcó mt đồ vt,  
ta tính X[1,V] và F[1,V] vi V=1..W như sau:  
X[1,V]=V div g1 và F[1,V]=X[1,V]*v1  
Vi g1 là trng lượng đồ vt 1 và v1 là giá trị đồ  
vt 1  
Phm Thế Bo  
Gistính được F[k-1,V], khi có thêm đồ vt thứ  
k, ta stính được F[k,V] như sau: nếu chn xk đồ  
vt loi k, thì trng lượng còn li ca ba lô dành  
cho k-1 đồ vt t1 đến k-1 là U=V-xk*gk và tng  
giá tr
k lo
i
đồ
v
t
đ
ã
đượ
c ch
n là F[k,V]=F[k-  
1,U]+xk*vk vi xk t0 đến yk=V div gk và ta sẽ  
chn xk sao cho F[k,V] ln nht.  
Công thc truy hi:  
X[1,V]=V div g1 và F[1,V]=X[1,V]*v1  
F[k,V]=max{F[k-1, V-xk*gk]+xk*vk} vi xk chy t0  
đến (V div gk )  
Sau khi xác định được F[k,V] thì X[k,V] là xk  
Phm Thế Bo  
5
14/04/2008  
Để lưu các giá trtrung gian trong quá trình tính  
F[k,V], ta dùng mt bng có n dòng (t1 đến n) –  
dòng thk ng vi loi đồ vt k, và W+1 ct (từ  
0 đến W), ct thV ng vi trng lượng V, mi  
ct Vv gm 02 ct nh: ct bên trái lưu F[k,V],  
ct bên phi lưu X[k,V].  
Ví d: có 05 lai đồ vt như bng, ba lô có trng  
lượng W=9.  
Đồ vt Trng lượng(gi) Giá tr(vi)  
1
2
3
4
5
3
4
5
2
1
3
5
6
3
1
Phm Thế Bo  
v
0
1
2
3
4
5
6
7
8
9
k
1
2
3
4
5
0 0 0 0 0 0  
1 4 1 4 1 8 2  
2
1
0
2
0
8
2
2
0
4
0
12  
3
0
0
3
0
0 0 0 0 0 0 4 0 5 1 5 1 8 0  
0 0 0 0 0 0 4 0 5 0 6 1 8 0  
9
9
10  
10  
12  
12  
12  
12  
13  
13  
0 0 0 0 3 1 4 0 6 2 7 1 9 3 10  
0 0 1 1 3 0 4 0 6 0 7 0 9 0 10  
Cách tính:  
Đồ vt gi vi  
Dòng thnht, dùng công thc X[1,V]=V div g1 và F[1,V]=X[1,V]*v1  
1
2
3
4
5
3
4
5
2
1
3
5
6
3
1
Tdòng 2 đến dòng 5 dùng công thc truy hi F[k,V]=max{F[k-1, V-  
xk*gk]+xk*vk} vi xk chy t0 đến (V div gk ).  
Ví d: tính F[2,7] ,  
có xk={0 div 4, 1 div 4, 2 div 4, 3 div 4, 4 div 4, 5 div 4, 6 div 4, 7 div  
4}= {0,1}.  
F[2,7]  
=Max{F[2-1,7-0*4]+0*5, F[2-1,7-1*4]+1*5}  
=Max{F[1,7], F[1,3]+5} = Max{8,4+5}  
=
Vy X[2,7]=1  
Phm Thế Bo  
6
14/04/2008  
Vn đề tra bng như thế nào để có kết qu?  
Khi đầu trng lượng ba lô V=W.  
Xét các đồ vt tn đến 1, mi đồ vt k ng vi trng  
lượng còn li V ca ba lô, nếu X[k,V]>0 thì chn  
X[k,V] đồ vt loi k, tính li V=V-X[k,V]*gk.  
Ví d: V=W=9  
Xét k=5, có X[5,9]=0 Æ không chn  
Xét k=4, có X[4,9]=3 Æ chn 3 đồ vt loi 4, tính li  
V=9-3*2=3.  
Xét k=3, có X[3,3]=0 Æ không chn  
Xét k=2, có X[2,3]=0 Æ không chn  
Xét k=1, có X[1,3]=1 Æ chn 1 đồ vt loi 1, tính li  
V=3-1*3=0  
Tng trng lượng các vt trong ba lô=  
Tng giá trcác vt trong ba lô =  
Bài tp: cài đặt chương trình  
Phm Thế Bo  
Bài toán người giao hàng  
Chúng ta cũng có thdùng quy hoch động để  
gii quyết:  
Đặt S={x1, x2, …, xk} là tp con các cnh ca đồ thị  
G=(V,E). Ta nói mt đường đi tv đến w phlên S  
nếu P={v, x1, x2, …, xk, w}, trong đó xi xut hin vị  
trí bt k, chmt ln.  
Ví d: đường đi ta đến f phlên {c,d,e,g}  
e
c
d
a
g
f
Phm Thế Bo  
7
14/04/2008  
Ta định nghĩa d(v,w,S) là tng độ dài đường đi tv  
đến w phlên S. Nếu không có đường đi như vy thì  
đặt d(v,w,S)=.  
Mt chu trình Hamilton nhnht Hmin ca G phi có  
tng độ dài là d(Hmin)=d(o,o,V-{o}), vi o là mt đỉnh  
nào đó trong V.  
Ta tìm Hmin như sau:  
Nếu |V |=1 (G chcó 1 đỉnh) thì d(Hmin)=0  
Ngược li:  
o d(v,w,{})=d(v,w)  
o d(v,w,S)=min {d(v,x)+d(x,w,S-{x})}, vi mi xS  
o d(v,w) là độ dài cnh ni hai đỉnh v và w, nếu không tn ti thì  
d(v,w)= ∞  
Bng cách lưu trcác đỉnh x theo công thc đệ quy trên,  
chúng ta scó mt chu trình Hamilton ti thiu.  
Phm Thế Bo  
8
pdf 8 trang baolam 28/04/2022 6120
Bạn đang xem tài liệu "Bài giảng Bài toán quy hoạch động (Dynamic programming) - Phạm Thế Bảo", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_bai_toan_quy_hoach_dong_dynamic_programming_pham_t.pdf