Quy hoạch động Trần Vĩnh Đức HUST Ngày 7 tháng 9 năm 2019 1 / 61CuuDuongThanCong com https //fb com/tailieudientucntt http //cuuduongthancong com?src=pdf https //fb com/tailieudientucntt Tài liệu tham[.]
CuuDuongThanCong.com Quy hoạch động Trần Vĩnh Đức HUST Ngày tháng năm 2019 https://fb.com/tailieudientucntt / 61 Tài liệu tham khảo ▶ S Dasgupta, C H Papadimitriou, and U V Vazirani, Algorithms, July 18, 2006 CuuDuongThanCong.com https://fb.com/tailieudientucntt / 61 Nội dung Đường ngắn DAG Dãy tăng dài Khoảng cách soạn thảo Bài toán túi Nhân nhiều ma trận Đường ngắn Tập độc lập CuuDuongThanCong.com https://fb.com/tailieudientucntt At the conclusion of our study of shortest paths (Chapter 4), we observed that the problem is easy chu in directed acyclic graphs (dags) Let’s recapitulate this case, because it lies at Đồespecially thị phi trình (DAG): Nhắc lại the heart of dynamic programming The special distinguishing feature of a dag is that its nodes can be linearized; that is, they can be arranged on a line so that all edges go from left to right (Figure 6.1) To see why this helps with shortest paths,trình, suppose figure outthứ distances from nodesao S to the Trong đồ thị phi chu tawecówant thểtosắp xếp tự đỉnh other nodes For concreteness, let’s focus on node D The only way to get to it is through its cho có cung đi từ trái sang phải Figure 6.1 A dag and its linearization (topological ordering) S A C E B D S C A B D E Hình: Đồ thị phi chu trình G 169 biểu diễn dạng tuyến tính CuuDuongThanCong.com https://fb.com/tailieudientucntt / 61 this helps with shortest paths, suppose we want to figure out distances from node S to the other nodes For concreteness, let’s focus on node D The only way to get to it is through its Đường ngắn DAG Figure 6.1 A dag and its linearization (topological ordering) S A C E B D S C A B 1 D E Hình: Đồ thị phi chu trình G 169 biểu diễn dạng tuyến tính ▶ Xét nút D đồ thị, cách để từ S đến D phải qua B C ▶ Vậy, để tìm đường ngắn từ S tới D ta phải so sánh hai đường: CuuDuongThanCong.com dist(D) = min{dist(B) + 1, dist(C) + 3} https://fb.com/tailieudientucntt / 61 ness, let’s focus on node D The only way to get to it is through its Thuật tốn tìm đường ngắn cho DAG linearization (topological ordering) B E D S C A B D E Thuật toán 169 Khởi tạo giá trị dist(.) ∞ dist(s) = for each v ∈ V \ {s}, theo thứ tự tuyến tính: dist(v) = min(u,v)∈E {dist(u) + ℓ(u, v)} CuuDuongThanCong.com https://fb.com/tailieudientucntt / 61 paths, suppose we want to figure out distances from node S to the ness, let’s focus on node D The only way to get to it is through its linearization (topological ordering) B E D S C A B D E Bài tập 169 Làm để tìm đường dài DAG? CuuDuongThanCong.com https://fb.com/tailieudientucntt / 61 Ý tưởng quy hoạch động linearization (topological ordering) B D S E 1 C A B D E Hình: Để giải tốn D ta cần giải toán C B 169 ▶ ▶ ▶ Quy hoạch động kỹ thuật giải toán cách xác định tập toán giải toán một, nhỏ trước, dùng câu trả lời toán nhỏ để hình dung đáp án tốn lớn hơn, tồn tốn giải CuuDuongThanCong.com https://fb.com/tailieudientucntt / 61 Nội dung Đường ngắn DAG Dãy tăng dài Khoảng cách soạn thảo Bài toán túi Nhân nhiều ma trận Đường ngắn Tập độc lập CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài toán dãy tăng dài Cho dãy số a1 , a2 , , an Một dãy tập số lấy theo thứ tự, có dạng ai1 , ai2 , , aik ≤ i1 < i2 < · · · < ik ≤ n, dãy tăng dãy mà phần tử tăng dần Nhiệm vụ bạn tìm dãy tăng có số phần tử nhiều Ví dụ Dãy dài dãy 5, 2, 8, 6, 3, 6, 9, là: CuuDuongThanCong.com https://fb.com/tailieudientucntt 10 / 61 Bài tập Hãy tìm dãy tăng dài dãy CuuDuongThanCong.com 5, 3, 8, 6, 2, 6, 9, https://fb.com/tailieudientucntt 11 / 61 S Dasgupta, C.H Papadimitriou, and U.V Vazirani 171 DAG dãy tăng Figure 6.2 The dag of increasing subsequences 6 Hình: DAG G = (V, E) dãy 5, 2, 8, 6, 3, 6, 9, In this example, the arrows denote transitions between consecutive elements of the optimal solution More generally, to better understand the solution space, let’s create a graph of all permissible transitions: establish a node i for each element a i , and add directed edges (i, j) whenever it is possible for and aj to be consecutive elements in an increasing subsequence, that is, whenever i < j and < aj (Figure 6.2) Noticedựng that (1) this graph = (V,E) E) cho is a dag, (i, j) have i < j, and (2) Ta xây DAG G =G (V, dãysince a1 ,allaedges , , an sau: there is a one-to-one correspondence between increasing subsequences and paths in this dag Therefore, ▶ V =our {agoal , , toanfind }, the vàlongest path in the dag! , ais2simply Here is the algorithm: ▶ có cung (ai , aj ) ∈ E for j = 1, 2, , n: = dãy + max{L(i) j) ∈nhất E} tốnL(j)tìm tăng: (i, dài return maxj L(j) Bài dài DAG i < j < aj đưa toán tìm đường L(j) is the length of the longest path—the longest increasing subsequence—ending at j (plus 1, since strictly speaking we need to count nodes on the path, not edges) By reasoning in the CuuDuongThanCong.com https://fb.com/tailieudientucntt 12 / 61 Tìm đường dài DAG for j = 1, 2, , n: L(j) = + max{L(i) : (i, j) ∈ E} return maxj L(j) ▶ L(j) độ dài đường dài kết thúc j CuuDuongThanCong.com https://fb.com/tailieudientucntt 13 / 61 gupta, C.H Papadimitriou, and U.V Vazirani Bài tập Hãydag tìmofđường dàisubsequences DAG sau: e 6.2 The increasing 6 this example, the arrows denote transitions between consecutive elements of th lution More generally, to better understand the solution space, let’s create a gr missible transitions: establish a node i for each element a i , and add directed edge ver it is possible for and ahttps://fb.com/tailieudientucntt j to be consecutive elements in an increasing subseq CuuDuongThanCong.com 14 / 61 Tìm đường dài S Dasgupta, C.H Papadimitriou, and U.V Vazirani 171 Figure 6.2 The dag of increasing subsequences 6 In this example, the arrows denote transitions between consecutive elements of the opti▶ Làm tìm đường dài từ L-giá trị? mal solution More generally, to better understand the solution space, let’s create a graph of all▶permissible transitions: establish a node i for each element a i , and add directed edges (i, j) Ta quản lý cạnh đường trỏ ngược prev(j) whenever it is possible for and aj to be consecutive elements in an increasing subsequence, that is, whenever j and aitìm < aj (Figure giống nhưi