1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Dynamic programming (GIẢI THUẬT SLIDE) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

41 18 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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 pi1  pi , với i = 1, 2,…, n ° Bài toán: Xác định đóng ngoặc hoàn toàn cho tích A1A2An 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, , vn1 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 n1  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ó n1cạ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ó ncạ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 vi1vi đ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 pi1  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(vi1 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 vi1,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(vi1vkvj) 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  j1 {t[i, k] + t[k + 1, j] + w(vi1vkvj)} 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

Ngày đăng: 29/03/2021, 08:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w