Bài giảng Phân tích và thiết kế thuật toán - Chương 10: Bài toán quy hoạch động (Dynamic Programming) - Phạm Thế Bảo
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
14/04/2008 1 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ấ đầ kế ả á bài á h l ậ• p y t qu c c to n con t eo quy u t nào đó để có kết quả của bài toán ban đầu Æ quy hoạch động Phạm Thế Bảo 14/04/2008 2 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 14/04/2008 3 Bài toán tính số tổ hợp • Tính Cnk bằng công thức truy hồi. 0 neáu k=0 hay k=nk ⎧⎨ Thuật giải: long Comb(int n, int k){ 1 k-1 n-1C neáu 0<k<n n k n C C − = +⎩ } Phạm Thế Bảo Đánh giá • Gọi T(n) là thời gian tính Cnk , ta có T(1)=C1 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) Phạm Thế Bảo Comb(2,0) Comb(3,2)Comb(3,1) Comb(2,2)Comb(2,1)Comb(2,1) 14/04/2008 4 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 ê tắnguy n c sau: – ô(0,0)=1 ô(i,i)=1 với 0<i≤n – ô(i,0)=1 ô(i,j)=ô(i-1,j-1)+ô(i-1,j) với 0<j<i≤n • Ví dụ n=4 0 1 2 3 4 0 1 Phạm Thế Bảo 1 1 1 2 1 1 3 1 1 4 1 1 Tam giác Pascal • 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 14/04/2008 5 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 di à F[1 V] X[1 V]*– , = v g1 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 x *g ]+x *v } với x chạy từ 0– , - , - k k k k k đến (V div gk ) – Sau khi xác định được F[k,V] thì X[k,V] là xk Phạm Thế Bảo 14/04/2008 6 • Để 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 3 3 Phạm Thế Bảo 2 4 5 3 5 6 4 2 3 5 1 1 0 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 1 4 1 4 1 8 2 2 8 2 12 3 2 0 0 0 0 0 0 4 0 5 1 5 1 8 0 9 1 10 2 12 0 3 0 0 0 0 0 0 4 0 5 0 6 1 8 0 9 0 10 0 12 0 4 0 0 0 0 3 1 4 0 6 2 7 1 9 3 10 2 12 4 13 3 vk 5 0 0 1 1 3 0 4 0 6 0 7 0 9 0 10 0 12 0 13 0 Đồ vật gi vi 1 3 3 2 4 5 3 5 6 4 2 3 • Cách tính: – 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 – 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 Phạm Thế Bảo 5 1 1 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 14/04/2008 7 • 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ô = Phạm Thế BảoBài tập: cài đặt chương trình Bài toán người giao hàng • Chúng ta cũng có thể dùng quy hoạch động để iải ếtg quy : – Đặ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} Phạm Thế Bảo a c f e g d 14/04/2008 8 – 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
File đính kèm:
- bai_giang_phan_tich_va_thiet_ke_thuat_toan_chuong_10_bai_toa.pdf