Bài giảng Phân tích và thiết kế thuật giải - Bài 4 cung cấp các kiến thức về quy hoạch động. Các nội dung được trình bày trong chương này gồm: Giới thiệu về quy hoạch động, so sánh giữa chia để trị và DP, các bước giải quyết, minh hoạ DP với bài toán Knapsack, bài toán ba lô 0-1,... Mời các bạn cùng tham khảo.
PHÂN TÍCH THIẾT KẾ THUẬT GIẢI QUY HOẠCH ĐỘNG TS NGÔ QUỐC VIỆT 2015 Nội dung Giới thiệu Giải số toán quy hoạch động Ba lô 0-1 Nhân ma trận Bài tập Hỏi đáp Giới thiệu Quy hoạch động (dynamic programming) nhằm giải tốn tìm: Trong đó, u biến (một hay nhiều chiều), g(u) hàm lượng giá, U tập điều kiện ràng buộc Là thuật giải dạng bottom-up Nghĩa tốn “con” (khơng phải chia từ tốn lớn theo dạng chia để trị) giải trước, tổng hợp để kết toán lớn Giới thiệu Giống chia để trị chỗ: chia thành toán để giải Khác chia để trị chỗ Các lời giải không độc lập Các lời giải lưu trữ bảng kết So sánh chia để trị DP DP: lời giải phụ thuộc thuật giải luỹ thừa Chia để trị: lời giải độc lập Các bước giải Xây dựng lời giải cho toán nhỏ Xây dựng công thức hồi quy nhằm xác định lời giải bước sau Để tránh độ phức tạp luỹ thừa lưu trữ lời giải vào bảng tra (để giải lại đệ quy) Minh hoạ DP với toán Knapsack DỮ LIỆU: n item wi = cân nặng item i vi = giá trị item i W = sức chứa knapsack GIẢI PHÁP: tìm tập S item cho trọng lượng không vươt W MỤC TIÊU: tìm cực đại giá trị S Bài tốn Knapsack Nghĩa tìm: tập S cho với Được gọi toán 0-1 Knapsack Chú ý: tìm cực đại theo giá trị thay theo trọng lượng hay kích thước balơ Thuật giải đơn giản Sắp xếp items theo “price per pound” vi/wi Lấy item theo thứ tự bỏ vào balơ, cịn bỏ (chú ý đến điều kiện ràng buộc) Sinh viên đánh giá thuật giải (có tìm KQ tối ưu khơng?) Sử dụng DP cho Knapsack 0-1 Minh hoạ kết khác biệt thuật giải đơn giản (tham lam) DP 10 Nhân dãy ma trận-Ví dụ • (A1(A2(A3A4))) A34=A3A4, có 250 phép nhân, kq ma trận 5x1 A24=A2A34, có 500 phép nhân, kq ma trận 100x1 A14=A1A24, có 1000 phép nhân, kq ma trận 10x1 Cần 1750 phép nhân cho thứ tự nhân • (A1A2)(A3A4)) A12=A1A2, có 5000 phép nhân, kq ma trận 10x5 A34=A3A4, có 250 phép nhân, kq ma trận 5x1 A14=A12A34, có 50 phép nhân, kq ma trận 10x1 Cần 5300 phép nhân cho thứ tự nhân 31 Nhân dãy ma trận-Ví dụ • (((A1A2)A3) A4) • A12=A1A2, có 5000 phép nhân, kq ma trận 10x5 A13=A12A3, có 2500 phép nhân, kq ma trận 10x50 A14=A13A4, có 500 phép nhân, kq ma trận 10x1 Cần 800 phép nhân cho thứ tự nhân ((A1(A2A3)) A4) A23=A2A3, có 25000 phép nhân, kq ma trận 100x50 A13=A1A23, có 50000 phép nhân, kq ma trận 10x50 A14=A13A4, có 500 phép nhân, kq ma trận 10x1 Cần 75500 phép nhân cho thứ tự nhân 32 Nhân dãy ma trận-Ví dụ • (A1 ((A2A3)A4)) A23=A2A3, có 25000 phép nhân, kq ma trận 100x50 A24=A23A4, có 5000 phép nhân, kq ma trận 100x1 A14=A1A24, có 1000 phép nhân, kq ma trận 10x1 Cần 31000 phép nhân cho thứ tự nhân • • • Nhận xét 1: thứ tự nhân quan trọng Nhận xét 2: tốn trở thành xác định vị trí thích hợp cho dấu ngoặc Số cách đặt dấu ngoặc là: n 1 T (n) T (i).T (n i) i 1 T (n) O4 n / n / 33 Nhân dãy ma trận với DP Nhận xét: cơng thức DP ln có tính đệ quy Chúng ta cài đặt theo phương pháp Đệ quy bình thường (dạng chia để trị: top-down) Vịng lặp (bottom-up) Đặt: M[i, j] số phép nhân dãy ma trận Mi Mj Mỗi ma trận Mk có chiều pk-1 x pk Chiều ma trận lưu trữ mảng chiều: P = < p0 p1 … pn> i=1, … n, j = 1, … n 34 Nhân dãy ma trận với DP Công thức xác định số phép nhân tối ưu là: i j m[i, j ] min(m[i, k ] m[k 1, j ] p p p ) i j i 1 k j ik j Yêu cầu cuối xác định m[1,n] Ngồi cần giữ lại vị trí tối ưu dấu ngoặc 35 Nhân dãy ma trận với DP-Ví dụ A1(30x35), A2(35x15), A3(15x5), A4(5x10), A5(10x20), A6(20x25) 36 Nhân dãy ma trận với DP-Ví dụ Vị trí dấu ngoặc 37 Mã nguồn DP nhân dãy ma trận Matrix_Chain_Order (P) { //P mảng chiều chứa số chiều Ai n = length(P) – for i = 1, n m[i,i] = for L = 2, n for i = 1, n – L + j=i+L–1 m [i, j] = ∞ for k = i, j-1 q = m[i, k] + m[k+1, j] + pi-1pkpj if q < m[i,j] m[i,j] = q s[i,j] = k return m and s } 38 Mã nguồn đệ quy nhân dãy ma trận RMC(P, i, j) { if i = j return m [i, j] = ∞ for k = i, j-1 q = RMC(P, i, k) + RMC(P, k+1, j) + pi-1pkpj if q < m[i,j] m[i,j] = q s[i,j] = k return m[i,j] and s } 39 Tóm tắt DP Định dạng vấn đề (hiển nhiên cho toán) Định nghĩa đệ quy giá trị lời giải tối ưu Cách tính toán giá trị lời giải tối ưu (top-down, bottom-up) Theo vết để xác định lời giải tối ưu 40 Một số vấn đề giải với DP Cho hai chuỗi: xây dựng thuật giải xác định chuỗi giống dài hai chuỗi cho (xem tài liệu) Xác định mức độ tương tự hai chuỗi (ứng dụng trong: kiểm tra từ, từ điển web, computational biology 41 Một số vấn đề giải với DP Bài toán Sequence Alignment Giải vấn đề sequence alignment computational biology 42 Một số vấn đề giải với DP Bài toán Sequence Alignment Input: chuỗi X=x1x2 xM, Y=y1y2 yN Ký hiệu: {1, 2, ,M}, {1, 2, ,N} vị trí chuỗi Matching: tập cặp vị trí (i, j) cho item xuất tối đa cặp Alignment: matching cho khơng có crossing, nghĩa Mục tiêu: tìm alignment cho cost nhỏ 43 Một số vấn đề giải với DP Bài tốn tìm cực tiểu lỗi nhỏ Cho N điểm mặt phẳng hai chiều , tìm đường thẳng y = ax+b cho cực tiểu lỗi Lỗi đạt cực tiểu thoả 44 Một số vấn đề giải với DP Bài tốn tìm cực tiểu lỗi nhỏ Cho n điểm mặt phẳng hai chiều , tìm đoạn thẳng (khơng phải đường thẳng) cho cực tiểu lỗi (miễn thi sinh viên) Cực tiểu tổng tổng lỗi bình phương E đoạn thẳng Cực tiểu L số đoạn thẳng Hàm định dạng vấn đề E cL, c Đặt OPT(j)= minimum cost điểm p1, p2, , pj e(i, j)= lỗi cực tiểu điểm pi, pi+1, , pj 45 ... Bảng kết ba lô 0-1 17 Bảng kết ba lô 0-1 Cần giữ lại lời giải chọn (để biết item ba lô) 18 Bảng kết ba lô 0-1 Theo hình trên, ghi kết vào ma trận từ bottom-up, trái-phải 19 Bảng kết ba lô 0-1 ... j to S L[ j,i ] = L[ j,i-1] if j vi and L[ j-vi,i-1 ] + wi < L[ j,i ] then L[ j,i ] L [ j-vi, i-1 ] + wi 27 Bài tập ba lô 0-1 Hãy xây dựng bảng kết ba lô 0-1 với đầu vào sau 28 W = 17 Item... •20 Kết quả: item 8, 5, 4, Thuật giải cho tốn ba lơ 0-1 for j to m K[ j,0 ] for i to n for j to n K[ j,i ] K[ j,i-1 ] if j wi and vi+K[ j-wi,i-1 ] > K[ j,i-1] then K[ j,i ] vi+K[ j-wi,i-1