C16 3 Quy hoạch động C16 3 Quy hoạch động Tổng quan Tại sao cần quy hoạch động? Quy hoạch động là gì? Phương pháp giải Quy hoạch động Ví dụ cụ thể về bài toán QHĐ Dãy con tăng dài nhất Mô phỏng thuật.
C16-3 Quy hoạch động Tổng quan Tại cần quy hoạch động? Quy hoạch động gì? Phương pháp giải Quy hoạch động Ví dụ cụ thể toán QHĐ Dãy tăng dài Mơ thuật tốn Code minh hoạ Đọc thêm Tại lại cần quy hoạch động? Xét dãy Fibonacci số dãy 1, Dãy Fibonacci dãy số mà số tổng hai số liền trước Các phần tử đầu dãy Fibonacci 1, 1, 2, 3, 5, 8, 13, … Tại lại cần quy hoạch động? Xét dãy Fibonacci Fib(n) = n n < Fib(n) = Fib(n-1) + Fib(n-2) n >= Bài tốn: Tìm số thứ n dãy Fibonacci Tại lại cần quy hoạch động? Fib(5) Dễ dàng giải đệ quy def fib(n): if n < 2: return n Fib(3) Fib(4) return fib(n-1) + fib(n-2) Fib(2) Fib(3) Fib(2) Fib(1) Fib(1) Fib(1) Fib(0) Fib(2) Fib(1) Fib(0) Độ phức tạp O(2n) Ví dụ cụ thể với việc tính Fib(5), ta thấy phải tính lại Fib(2) nhiều lần Độ phức tạp lớn, cần thuật toán tối ưu Fib(1) Fib(0) Quy hoạch động Quy hoạch động (Dynamic Programming) kĩ thuật mà Giải toán lớn cách giải toán nhỏ Lưu trữ toán con, cần sử dụng mà khơng cần phải giải lại toán Phương pháp giải Quy hoạch động Top-down (Memozation) Bottom-up (Tabulation) Phương pháp giải Quy hoạch động Top-down (Memoization) Cách tiếp cận top-down sử dụng đệ quy Nhưng thay phải tính tốn nhiều lần, lần tính ta lưu kết toán lại Fib(5) Bài tốn Fibonacci phương pháp đệ quy thơng thường def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) Độ phức tạp O(2n) Fib(3) Fib(4) Fib(3) Fib(2) Fib(1) Fib(1) Fib(0) Fib(2) Fib(1) Fib(0) Fib(2) Fib(1) Fib(1) Fib(0) Phương pháp giải Quy hoạch động Top-down (Memoization) Cách tiếp cận top-down sử dụng đệ quy Nhưng thay phải tính tốn nhiều lần, lần tính ta lưu kết tốn lại Tối ưu toán Fibonacci def fib(n): Fib(4) if n < 2: return n Fib(3) if save[n]: return save[n] return save[n] = fib(n-1) + fib(n-2) Fib(5) Độ phức tạp O(n) Fib(2) Fib(1) Save[1] Fib(0) Save[3] Save[2] Phương pháp giải Quy hoạch động Bottom-up (Tabulation) Cách tiếp cận bottom-up không sử dụng đệ quy Tất tốn cần đến giải trước, sau dùng để xây dựng lời giải cho toán lớn Cách tiếp cận tốt không gian nhớ số lời gọi hàm Tối ưu toán Fibonacci fib[0] = fib[1] = for(i, 2, n) fib[i] = fib[i-1] + fib[i-2] Độ phức tạp O(n) ... Tại cần quy hoạch động? Quy hoạch động gì? Phương pháp giải Quy hoạch động Ví dụ cụ thể tốn QHĐ Dãy tăng dài Mô thuật toán Code minh hoạ Đọc thêm Tại lại cần quy hoạch động? ... Fib(0) Quy hoạch động Quy hoạch động (Dynamic Programming) kĩ thuật mà Giải toán lớn cách giải toán nhỏ Lưu trữ tốn con, cần sử dụng mà khơng cần phải giải lại tốn Phương pháp giải Quy hoạch. .. Fib(0) Save[3] Save[2] Phương pháp giải Quy hoạch động Bottom-up (Tabulation) Cách tiếp cận bottom-up không sử dụng đệ quy Tất tốn cần đến giải trước, sau dùng để xây dựng lời giải cho toán lớn