Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Cấu trúc
Dynamic Programming
Giới thiệu
Bài toán tối ưu
Nguyên tắc của dynamic programming
Nhân một chuỗi ma trận
Chuỗi ma trận fully parenthesized
Nhân hai ma trận
Phí tổn để nhân một chuỗi ma trận
Bài toán nhân chuỗi ma trận
Đếm số cách đóng ngoặc
Bước 1: Cấu trúc của một đóng ngoặc tối ưu
Bước 1: Cấu trúc của một đóng ngoặc tối ưu (tiếp)
Bước 2: Giải đệ quy
Bước 2: Giải đệ quy (tiếp)
Bước 3: Tính các chi phí tối ưu
Bước 3: Tính các chi phí tối ưu (tiếp)
Phân tích MATRIX-CHAIN-ORDER
Chạy MATRIX-CHAIN-ORDER lên một ví dụ
Bước 4: Xây dựng một lời giải tối ưu
Các yếu tố để áp dụng dynamic programming
Một lời giải không tối ưu
Phân tích RECURSIVE-MATRIX-CHAIN
Cây đệ quy
Một biến dạng của dynamic programming: memoization
Memoize giải thuật RECURSIVE-MATRIX-CHAIN
Memoization
Phân tích MEMOIZED-MATRIX-CHAIN
Phân tam giác
Các khái niệm cơ bản
Bài toán phân tam giác tối ưu
Parse tree của một biễu thức
Slide 32
Từ phân tam giác sinh ra parse tree
Từ parse tree sinh ra phân tam giác
Tương ứng giữa parse tree và phân chia tam giác
Tương ứng giữa đóng ngoặc hoàn toàn của tích của n ma trận và phân chia tam giác
Nhân chuỗi ma trận và phân tam giác tối ưu
Nhân chuỗi ma trận và phân tam giác tối ưu (tiếp)
Bước 1: Cấu trúc con của một phân tam giác tối ưu
Bước 2: Lời giải đệ quy
Bước 2: Lời giải đệ quy (tiếp)
Nội dung
Dynamic Programming Ch 1: Dynamic Programming Giới thiệu ° ° Dynamic programming — giải toán cách kết hợp lời giải toán — (ở “programming” nghóa lập trình) So sánh dynamic programming “chia-và-trị” (divide-andconquer) — Giải thuật chia-và-trị ° chia toán thành toán độc lập , ° giải chúng đệ quy, ° kết hợp chúng để có lời giải cho toán ban đầu — Giải thuật dynamic programming ° toán không độc lập với nhau: chúng có chung toán nhỏ ° giải toán lần, ghi nhớ lời giải bảng để truy cập cần đến Ch 1: Dynamic Programming Bài toán tối ưu ° ° Bài toán tối ưu — có nhiều lời giải — lời giải có trị Tìm lời giải có trị tối ưu (cực tiểu hay cực đại) Ch 1: Dynamic Programming Nguyên tắc dynamic programming ° Một giải thuật dynamic programming xây dựng qua bốn bước: Xác định cấu trúc lời giải tối ưu Định nghóa đệ quy cho giá trị lời giải tối ưu Tính giá trị lời giải tối ưu từ lên (“bottom-up”) Xây dựng lời giải tối ưu từ thông tin tính Ch 1: Dynamic Programming Nhân chuỗi ma trận ° Cho chuỗi ma trận A1, A2, , An ° Xác định tích A1A2 An dựa giải thuật xác định tích hai ma trận Biểu diễn cách tính tích chuỗi ma trận cách “đặt ngoặc” (pa’renthesize) cặp ma trận nhân với Một tích chuỗi ma trận fully parenthesized — ma trận — tích hai tích chuỗi ma trận fully parenthesized khác, đặt ngoặc Ví dụ: vài tích chuỗi ma trận fully parenthesized — A — (AB) — ((AB)C) ° ° Ch 1: Dynamic Programming Chuỗi ma trận fully parenthesized ° Ví dụ: Cho chuỗi ma trận A1 , A2 , A3 , A4 Tích A1A2A3A4 fully parenthesized theo cách khác nhau: (A1(A2(A3A4))) (A1((A2A3)A4)) ((A1A2)(A3A4)) ((A1(A2A3))A4) (((A1A2)A3)A4) Ch 1: Dynamic Programming Nhân hai ma trận ° Tích hai ma trận A B với — A có chiều p q — B có chiều q r ma trận C có chiều p r MATRIX-MULTIPLY(A, B) if columns[A] rows[B] then error “các chiều không tương thích” else for i to rows[A] for j to columns[B] C[i, j] for k to columns[A] C[i, j] C[i, j] + A[i, k]B[k, j] return C ° Thời gian để tính C tỷ lệ với số phép nhân vô hướng thực thi dòng 7, tức p q r Ch 1: Dynamic Programming Phí tổn để nhân chuỗi ma trận ° ° Nhận xét: Phí tổn nhân chuỗi ma trận tùy thuộc vào cách đặt ngoặc (parenthesization) Ví dụ: Cho chuỗi ma trận A1 , A2 , A3 chiều (dimension) ma trận 10 100, 100 5, 50 Có cách để đóng ngoặc hoàn toàn tích A1A2A3 : — Cách 1: ((A1A2)A3) ° Tính A1A2 cần 10 100 = 5000 phép nhân vô hướng Kế nhân A1A2 với A3 cần 10 50 = 2500 phép nhân vô hướng ° Tổng cộng: 7500 phép nhân vô hướng Cách 2: (A1(A2A3)) ° — ° ° ° Tính A2A3 cần 100 50 = 25000 phép nhân vô hướng Kế nhân A1 với A2A3 cần 10 100 50 = 50000 phép nhân vô hướng Tổng cộng: 75000 phép nhân vô hướng Ch 1: Dynamic Programming Bài toán nhân chuỗi ma trận ° Cho chuỗi ma trận A1, A2, , An gồm n ma trận, chiều Ai pi1 pi , với i = 1, 2,…, n ° Bài toán: Xác định đóng ngoặc hoàn toàn cho tích A1A2An cho số phép nhân vô hướng tối thiểu Giải toán cách vét cạn? ° Ch 1: Dynamic Programming Đếm số cách đóng ngoặc ° Cho chuỗi gồm n ma traän A1 , A2 , A3 , , An ° Nhận xét: tạo cách đóng ngoặc cách tách (split) Ak Ak+1 , với k = 1, 2, , n 1, taïo hai chuỗi A1A2 Ak Ak+1 An , sau đóng ngoặc chuỗi Gọi P(n) số cách đóng ngoặc cho chuỗi n ma trận — n = có cách đóng ngoặc (không cần dấu ngoặc tường minh) Vậy P(1) = — n từ nhận xét ta có n ° P(n) P(k ) P(n k ) k 1 Từ chứng minh được: P (n) (4 n / n / ) ° Vậy dùng phương pháp vét cạn duyệt qua tất cách đóng ngoặc để tìm đóng ngoặc tối ưu cần thời gian chạy lũy thừa Ch 1: Dynamic Programming 10 Phân tích MEMOIZED-MATRIX-CHAIN ° ° MEMOIZED-MATRIX-CHAIN chạy thời gian O(n3) Nhận xét: — MEMOIZED-MATRIX-CHAIN tận dụng tính chất “các toán trùng nhau”, — RECURSIVE-MATRIX-CHAIN chạy thời gian (2n) luôn giải toán mà không để ý xem toán giải hay chưa Ch 1: Dynamic Programming 27 Phân tam giác ° Đa giác ° Đa giác đơn (“simple”) ° Đa giác lồi ° Phân tam giác (triangulation) Ch 1: Dynamic Programming 28 Các khái niệm ° ° ° ° Cạnh, đỉnh, biên đa giác Ta biểu diễn đa giác lồi P danh sách đỉnh theo thứ tự ngược chiều kim đồng hoà: P = v0 , v1, , vn1 Cung (“chord”) đa giác Một phân tam giác đa giác tập hợp cung đa giác chia đa giác thành tam giác rời Ch 1: Dynamic Programming 29 Bài toán phân tam giác tối ưu ° Cho: — Một đa giác lồi P = v , v , , v n1 Một hàm trọng số w (“weight function”) định nghóa tam giác tạo cạnh cung P Bài toán: Tìm phân tam giác cho P cho tổng trọng số tam giác phân tam giác nhỏ Ví dụ hàm trọng số: w(một tam giác) = tổng chiều dài cạnh tam giác — ° ° Ch 1: Dynamic Programming 30 Parse tree cuûa biễu thức ° Biễu thức (expression) — Ví dụ biễu thức: tích chuỗi ma trận đóng ngoặc hoàn toàn ((A1(A2A3))(A4(A5 A6))) ° Parse tree — Ví dụ: parse tree biễu thức ((A (A A ))(A (A A6))) laø A1 A4 A2 A3 A5 Ch 1: Dynamic Programming A6 31 Parse tree biễu thức ° Định nghóa: parse tree biễu thức mà — Lá: có nhản nguyên tử (“atomic element”, ví dụ: A1) tạo nên biễu thức — Nếu gốc parse tree có bên trái tượng trưng biễu thức El có bên phải tượng trưng biễu thức Er , tượng trưng biễu thức (ElEr) Ch 1: Dynamic Programming 32 Từ phân tam giác sinh parse tree ° Ví dụ: Parse tree cho đa giaùc P = v0 , v1,…, v6 sau v1 A1 v0 v6 A6 A2 v5 v2 A3 v3 A5 A4 Ch 1: Dynamic Programming v4 33 Từ parse tree sinh phân tam giác ° Cho parse tree biểu diễn (((A1(A2A3))A4)(A5 A6)) Phân tam giác tương ứng: v1 A2 A3 v6 A2 A6 v2 v5 A3 A4 A1 A1 A5 v0 A6 Ch 1: Dynamic Programming v3 A5 A4 v4 34 Tương ứng parse tree phân chia tam giác ° Tương ứng parse trees phân chia tam giác tương ứng một-đối-một: — Mỗi phân tam giác đa giác lồi có n1cạnh tương ứng với parse tree cho biễu thức gồm n nguyên tử — Mỗi parse tree có n tương ứng với phân tam giác đa giác lồi có ncạnh Ch 1: Dynamic Programming 35 Tương ứng đóng ngoặc hoàn toàn tích n ma trận phân chia tam giác ° Đóng ngoặc hoàn toàn tích n ma trận tương ứng với phân tam giác đa giác lồi có n đỉnh — Mỗi ma trận A tích A A A tương ứng i n với cạnh vi1vi đa giác lồi — Cung vivj , với i j, tương ứng với ma trận Ai 1 j Ch 1: Dynamic Programming 36 Nhân chuỗi ma trận phân tam giác tối ưu ° Bài toán nhân chuỗi ma trận trường hợp đặc biệt toán phân tam giác tối ưu — Tính tích A A A thông qua toán n phân tam giác tối ưu: ° Định nghóa đa giác lồi có n 1 đỉnh P = v0 , v1,…, vn ° ° Nếu ma trận Ai có dimension pi1 pi , với i = 1, 2, , n, định nghóa hàm trọng số w cho phân tam giác w(vivjvk ) = pi pj pk Một phân tam giác tối ưu P cho ta parse tree đóng ngoặc tối ưu A1A2 An Ch 1: Dynamic Programming 37 Nhaân chuỗi ma trận phân tam giác tối ưu (tiếp) ° Ngược lại không đúng: toán phân tam giác tối ưu không trường hợp đặc biệt toán nhân chuỗi ma trận — Mặc dù vậy, chỉnh lại M ATRIX-CHAIN-ORDER để giải toán phân tam giác tối ưu cho đa giác có n + đỉnh sau ° Thay chuỗi p = p , p , , p chiều n ma trận chuỗi v0 , v1 , , đỉnh ° Thay truy cập đến p truy cập đến v thay dòng q m[i, k] + m[k + 1, j] + w(vi1 vk vj ) Khi giải thuật thực thi xong, m[1, n] chứa trọng số phân tam giác tối ưu Phần sau cho thấy làm ° — Ch 1: Dynamic Programming 38 Bước 1: Cấu trúc phân tam giác tối ưu ° Cho T phân tam giác tối ưu đa giác P = v0 , v1,…, vn , T chứa tam giác v0vkvn với k đó, k n v0 v1 v2 ° ° vk Trọng số T tổng trọng số tam giác v0vkvn tam giác chứa phân tam giác hai đa giác v0, v1,…, vk vk , vk+1,…, vn Một đa giác suy thoái có trọng số Do phân tam giác (xác định T) đa giác phải tối ưu (Chứng minh phản chứng.) Ch 1: Dynamic Programming 39 Bước 2: Lời giải đệ quy ° ° Định nghóa t[i, j] trọng số phân tam giác tối ưu đa giác vi1,vi ,…, vj Như trọng số phân tam giác tối ưu đa giác P t[1, n] Xác định t[,] — đa giác có đỉnh (đa giaùc suy thoaùi) t[i, i] = cho i = 1, , n — đa giác có đỉnh, i < j t[i, j] = t[i, k] + t[k + 1, j] + w(vi1vkvj) Nhưng trị k? Ch 1: Dynamic Programming 40 Bước 2: Lời giải đệ quy (tiếp) ° ° Bằng cách duyệt qua tất trị k, i k j 1, ta nhận t[i, i] = 0, i = 1, , n t[i, j] = i k j1 {t[i, k] + t[k + 1, j] + w(vi1vkvj)} i < j Hàm đệ quy tương tự hàm đệ quy m[,] cho số phép nhân vô hướng tối thiểu để tính Ai Ai+1 Aj Do chỉnh lại thủ tục MATRIXCHAIN-ORDER (như nói) để tính trọng số phân tam giác tối ưu Vậy thủ tục phân tam giác tối ưu chạy thời gian O(n3) cần nhớ (n2) Ch 1: Dynamic Programming 41 ... nhau” Ch 1: Dynamic Programming 22 Cây đệ quy ° Cây đệ quy cho RECURSIVE-MATRIX-CHAIN(p, 1, 4) 1 2 4 3 4 2 3 1 2 3 4 Ch 1: Dynamic Programming 4 1 3 2 3 1 2 23 Moät biến dạng dynamic programming: ... 1: Dynamic Programming 19 Các yếu tố để áp dụng dynamic programming ° Hai yếu tố để áp dụng phương pháp dynamic programming vào toán tối ưu — “Cấu trúc tối ưu” — “Các toán trùng nhau” Ch 1: Dynamic. .. trị Tìm lời giải có trị tối ưu (cực tiểu hay cực đại) Ch 1: Dynamic Programming Nguyên tắc dynamic programming ° Một giải thuật dynamic programming xây dựng qua bốn bước: Xác định cấu trúc lời giải