Bài giảng Phân tích thiết kế giải thuật: Chương 1 - ĐH Bách khoa

41 38 0
Bài giảng Phân tích thiết kế giải thuật: Chương 1 - ĐH Bách khoa

Đ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

Dưới đây là bài giảng Phân tích thiết kế giải thuật: Chương 1 - Dynamic Programming. Bài giảng bao gồm những nội dung về nguyên tắc của Dynamic Programming; các yếu tố để áp dụng Dynamic Programming; một biến dạng của Dynamic Programming.

Dynamic Programming 10.2.2004 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” khơng có nghĩa lập trình) So sánh dynamic programming “chia-và-trị” (divide-and-conquer) — 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 tốn ban đầu — Giải thuật dynamic programming ° tố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 10.2.2004 Ch 1: Dynamic Programming Bài toán tối ưu ° ° Bài tố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) 10.2.2004 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 10.2.2004 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” (parenthesize) 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) ° ° 10.2.2004 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) 10.2.2004 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 10.2.2004 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 hồn tồ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 ° 10.2.2004 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 tốn: Xác định đóng ngoặc hồn tồn cho tích A1A2An cho số phép nhân vơ hướng tối thiểu Giải tốn cách vét cạn? ° 10.2.2004 Ch 1: Dynamic Programming Đếm số cách đóng ngoặc ° Cho chuỗi gồm n ma trậ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, tạ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 10.2.2004 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 tốn trùng nhau”, — cịn RECURSIVE-MATRIX-CHAIN chạy thời gian (2n) ln ln giải tốn mà khơng để ý xem tốn giải hay chưa 10.2.2004 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) 10.2.2004 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 hồ: 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 10.2.2004 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 tố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 — ° ° 10.2.2004 Ch 1: Dynamic Programming 30 Parse tree biễu thức ° Biễu thức — Ví dụ biễu thức: tích chuỗi ma trận đóng ngoặc hồn tồn ((A1(A2A3))(A4(A5 A6))) ° Parse tree — Ví dụ: parse tree biễu thức ((A (A A ))(A (A A ))) A1 A4 A2 10.2.2004 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) 10.2.2004 Ch 1: Dynamic Programming 32 Từ phân tam giác sinh parse tree ° Ví dụ: Parse tree cho đa giác P = v0 , v1,…, v6 sau v1 A1 v0 v6 A6 A2 v5 v2 A3 10.2.2004 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 A1 v6 A2 A6 v2 v5 A3 10.2.2004 v0 v3 A5 A4 v4 Ch 1: Dynamic Programming 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 + cạnh tương ứng với parse tree — 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 10.2.2004 Ch 1: Dynamic Programming 35 Tương ứng đóng ngoặc hồn tồn tích n ma trận phân chia tam giác ° Đóng ngoặc hồn tồn tích n ma trận tương ứng với phân chia tam giác đa giác có n + đỉnh — Mỗi ma trận A tích A A  A tương ứng với cạnh v v i n i-1 i đa giác có n + đỉnh — Cung v v , với i < j, tương ứng với ma trận A i j i +1 j 10.2.2004 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 tốn phân tam giác tối ưu — Tính tích A A  A thơng qua tốn phân tam giác tối ưu: n 10.2.2004 ° Định nghĩa đa giác lồi có n + đỉ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 chia tam giác tối ưu P cho ta parse tree đóng ngoặc tối ưu A1A2  An Ch 1: Dynamic Programming 37 Nhân chuỗi ma trận phân tam giác tối ưu (tiếp) ° Ngược lại khơng đúng: tố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 MATRIX-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 ma trận 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(Dvi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 ° — 10.2.2004 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 Dv0vkvn với k đó,  k  n  v0 v1 v2 vk ° Trọng số T tổng trọng số tam giác Dv0vkvn 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 thố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.) 10.2.2004 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 giác suy thố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 lại chưa biết trị k! 10.2.2004 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 MATRIX-CHAIN-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) 10.2.2004 Ch 1: Dynamic Programming 41 ... + 1, j] + pi? ?1 pk pj 10 if q < m[i, j] 11 then m[i, j]  q 12 s[i, j]  k 13 return m and s 10 .2.2004 Ch 1: Dynamic Programming 16 Phân tích MATRIX-CHAIN-ORDER ° ° Thời gian chạy MATRIX-CHAIN-ORDER... (dimension) ma trận 10  10 0, 10 0  5,  50 Có cách để đóng ngoặc hồn tồn tích A1A2A3 : — Cách 1: ((A1A2)A3) ° Tính A1A2 cần 10  10 0  = 5000 phép nhân vô hướng ° Kế nhân A1A2 với A3 cần 10   50 =... RECURSIVE-MATRIX-CHAIN(p, i, k) + RECURSIVE-MATRIX-CHAIN(p, k + 1, j) + pi? ?1 pk pj if q < m[i, j] then m[i, j]  q return m[i, j] 10 .2.2004 Ch 1: Dynamic Programming 21 Phân tích RECURSIVE-MATRIX-CHAIN

Ngày đăng: 09/05/2021, 14:33

Từ khóa liên quan

Mục lụ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

Tài liệu cùng người dùng

Tài liệu liên quan