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 HOẠCH ĐỘNG  
(DYNAMIC PROGRAMMING)  
Phạm Thế Bảo  
Khoa Toán – Tin học  
Trường Đại học Khoa học Tự nhiên Tp.HCM  
Nội dung  
• Kỹ thuật chia để trị thường dẫn tới giải thuật  
đệ quy Æ có giải thuật có thời gian mũ và giải  
bài toán con nhiều lần.  
• Để tránh giải bài toán con nhiều lần Æ tạo một  
bảng lưu trữ kết quả các bài toán con để khi  
cần sẽ sử dụng lại kết quả.  
• Lấp đầy kết quả các bài toán con theo quy luật  
nào đó để có kết quả của bài toán ban đầu Æ  
quy hoạch động  
Phạm Thế Bảo  
1
14/04/2008  
Thuật giải  
1. Tạo bảng bằng cách:  
a. Gán giá trị một số ô nào đó.  
b. Gán giá trị cho các ô khác nhờ vào giá trị của các  
ô trước.  
2. Tra bảng và xác định kết quả của bài toán ban  
đầu  
Phạm Thế Bảo  
Đánh giá  
• Ưu điểm  
–
Ch
ươ
ng trình th
ự
c thi nhanh do không t
ố
n th
ờ
i gian  
giải lại bài toán con.  
– Vận dụng để giải các bài toán tối ưu, có công thức truy  
hồi  
• Nhược điểm  
– Không tìm được công thức truy hồi.  
–
S
ố
l
ượ
ng bài toán con c
ầ
n gi
ả
i và l
ư
u tr
ữ
k
ế
t qu
ả
r
ấ
t  
lớn.  
– Việc kết hợp lời giải của các bài toán con chưa chắc  
cho lời giải của bài toán ban đầu.  
Phạm Thế Bảo  
2
14/04/2008  
Bài toán tính số tổ hợp  
k
• Tính Cn bằng công thức truy hồi.  
0
neáu k=0 hay k=n  
neáu 0<k<n  
⎧
⎨
⎩
Ck =  
n
Ck-1 + Cnk−1  
n-1  
Thuật giải:  
long Comb(int n, int k){  
}
Phạm Thế Bảo  
Đánh giá  
• Gọi T(n) là thời gian tính Cn ,  
k
ta có T(1)=C
1
và T(n)=  
giải ta có T(n)=O( )  
Æ bài toán con được giải nhiều lần  
Comb(4,2)  
Comb(3,1)  
Comb(3,2)  
Comb(2,0)  
Comb(2,1)  
Comb(2,1)  
Comb(2,2)  
Phạm Thế Bảo  
3
14/04/2008  
Dùng quy hoạch động  
• Xây dựng một bảng có (n+1) dòng từ 0 đến n và  
(n+1) cột từ 0 đến n. Điền các giá trị ô(i,j) theo  
nguyên tắc sau:  
– ô(0,0)=1  
– ô(i,0)=1  
ô(i,i)=1 với 0<i≤n  
ô(i,j)=ô(i-1,j-1)+ô(i-1,j) với 0<j<i≤n  
• Ví dụ n=4  
0
1
1
1
1
1
1
2
3
4
0
1
2
3
4
1
1
Tam giác Pascal  
1
1
Phạm Thế Bảo  
• Thuật giải mới:  
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 lặp for j thực hiện i-1 lần. Vòng lặp i lặp  
n lần Æ  
Phạm Thế Bảo  
4
14/04/2008  
Bài toán cái ba lô  
• Giả sử X[k,V] là số lượng đồ vật k được chọn,  
F[k,V] tổng giá trị k đồ vật được chọn và V là  
trọng lượng còn lại của ba lô, k=1..n và  
V=1..W.  
• Trường hợp đơn giản nhất: chỉ có một đồ vật,  
ta tính X[1,V] và F[1,V] với V=1..W như sau:  
– X[1,V]=V div g1 và F[1,V]=X[1,V]*v1  
– Với g1 là trọng lượng đồ vật 1 và v1 là giá trị đồ  
vật 1  
Phạm Thế Bảo  
• Giả sử tính được F[k-1,V], khi có thêm đồ vật thứ  
k, ta sẽ tính được F[k,V] như sau: nếu chọn xk đồ  
vật loại k, thì trọng lượng còn lại của ba lô dành  
cho k-1 đồ vật từ 1 đến k-1 là U=V-xk*gk và tổng  
giá tr
ị
k lo
ạ
i
đồ
v
ậ
t
đ
ã
đượ
c ch
ọ
n là F[k,V]=F[k-  
1,U]+xk*vk với xk từ 0 đến yk=V div gk và ta sẽ  
chọn xk sao cho F[k,V] lớn nhất.  
• Công thức truy hồi:  
– 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} với xk chạy từ 0  
đến (V div gk )  
– Sau khi xác định được F[k,V] thì X[k,V] là xk  
Phạm Thế Bảo  
5
14/04/2008  
• Để lưu các giá trị trung gian trong quá trình tính  
F[k,V], ta dùng một bảng có n dòng (từ 1 đến n) –  
dòng thứ k ứng với loại đồ vật k, và W+1 cột (từ  
0 đến W), cột thứ V ứng với trọng lượng V, mỗi  
cột Vv gồm 02 cột nhỏ: cột bên trái lưu F[k,V],  
cột bên phải lưu X[k,V].  
• Ví dụ: có 05 lọai đồ vật như bảng, ba lô có trọng  
lượng W=9.  
Đồ vật Trọng lượng(gi) Giá trị(vi)  
1
2
3
4
5
3
4
5
2
1
3
5
6
3
1
Phạm Thế Bảo  
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:  
Đồ vật gi vi  
–
Dòng thứ nhất, dùng công thức 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
–
Từ dòng 2 đến dòng 5 dùng công thức truy hồi F[k,V]=max{F[k-1, V-  
xk*gk]+xk*vk} với xk chạy từ 0 đế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}  
=
Vậy X[2,7]=1  
Phạm Thế Bảo  
6
14/04/2008  
• Vấn đề tra bảng như thế nào để có kết quả?  
– Khởi đầu trọng lượng ba lô V=W.  
– Xét các đồ vật từ n đến 1, mỗi đồ vật k ứng với trọng  
lượng còn lại V của ba lô, nếu X[k,V]>0 thì chọn  
X[k,V] đồ vật loại k, tính lại V=V-X[k,V]*gk.  
• Ví dụ: V=W=9  
– Xét k=5, có X[5,9]=0 Æ không chọn  
– Xét k=4, có X[4,9]=3 Æ chọn 3 đồ vật loại 4, tính lại  
V=9-3*2=3.  
– Xét k=3, có X[3,3]=0 Æ không chọn  
– Xét k=2, có X[2,3]=0 Æ không chọn  
– Xét k=1, có X[1,3]=1 Æ chọn 1 đồ vật loại 1, tính lại  
V=3-1*3=0  
– Tổng trọng lượng các vật trong ba lô=  
– Tổng giá trị các vật trong ba lô =  
Bài tập: cài đặt chương trình  
Phạm Thế Bảo  
Bài toán người giao hàng  
• Chúng ta cũng có thể dùng quy hoạch động để  
giải quyết:  
– Đặt S={x1, x2, …, xk} là tập con các cạnh của đồ thị  
G=(V,E). Ta nói một đường đi từ v đến w phủ lên S  
nếu P={v, x1, x2, …, xk, w}, trong đó xi xuất hiện ở vị  
trí bất kỳ, chỉ một lần.  
– Ví dụ: đường đi từ a đến f phủ lên {c,d,e,g}  
e
c
d
a
g
f
Phạm Thế Bảo  
7
14/04/2008  
– Ta định nghĩa d(v,w,S) là tổng độ dài đường đi từ v  
đến w phủ lên S. Nếu không có đường đi như vậy thì  
đặt d(v,w,S)=∞.  
– Một chu trình Hamilton nhỏ nhất Hmin của G phải có  
tổng độ dài là d(Hmin)=d(o,o,V-{o}), với o là một đỉnh  
nào đó trong V.  
– Ta tìm Hmin như sau:  
• Nếu |V |=1 (G chỉ có 1 đỉnh) thì d(Hmin)=0  
• Ngược lại:  
o d(v,w,{})=d(v,w)  
o d(v,w,S)=min {d(v,x)+d(x,w,S-{x})}, với mọi x∈S  
o d(v,w) là độ dài cạnh nối hai đỉnh v và w, nếu không tồn tại thì  
d(v,w)= ∞  
• Bằng cách lưu trữ các đỉnh x theo công thức đệ quy trên,  
chúng ta sẽ có một chu trình Hamilton tối thiểu.  
Phạm Thế Bảo  
8
pdf 8 trang baolam 21340 Free
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