Nội dung chương 3 của Bài giảng Cấu trúc dữ liệu và giải thuật cung cấp cho sinh viên các kiến thức về quy hoạch động. Tham khảo nội dung bài giảng để nắm bắt nội dung chi tiết.
BÀI GIẢNG CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Trần Đăng Hưng Khoa CNTT - ĐHSPHN Nội dung Chương 1: Giới thiệu Chương 2: Đệ quy Giải thuật đệ quy Chương 3: Quy hoạch động Chương 4: Danh sách móc nối Chương 5: Stack Queue Chương 6: Cây Ứng dụng Chương 7: Đồ thị Ứng dụng Chương 8: Các thuật toán xếp Chương 9: Các thuật tốn tìm kiếm CTDL> - Trần Đăng Hưng September 2015 Nội dung Chương 1: Giới thiệu Chương 2: Đệ quy Giải thuật đệ quy Chương 3: Quy hoạch động Chương 4: Danh sách móc nối Chương 5: Stack Queue Chương 6: Cây Ứng dụng Chương 7: Đồ thị Ứng dụng Chương 8: Các thuật toán xếp Chương 9: Các thuật tốn tìm kiếm CTDL> - Trần Đăng Hưng September 2015 Các chiến lược thiết kế giải thuật Đứng trước vấn đề đặt ra, cần suy nghĩ cách (chiến lược) giải vấn đề Có nhiều chiến lược để thiết kế giải thuật Chia để trị (divide and conquer) Đệ quy quay lui (backtracking) Quy hoạch động (dynamic programming) Tham lam (greedy strategy) … Mỗi chiến lược phù hợp cho số dạng tốn Mỗi chiến lược có ưu nhược điểm riêng Nhiệm vụ: cần định chọn chiến lược phù hợp CTDL> - Trần Đăng Hưng September 2015 Chiến lược: Chia để trị Ý tưởng Chia vấn đề cần giải thành số vấn đề dạng với vấn đề cho, khác cỡ chúng nhỏ Mỗi vấn đề giải độc lập, vấn đề chưa tìm nghiệm lại tiếp tục chia nhỏ theo tư tưởng Sau đó, ta kết hợp nghiệm vấn đề để nhận nghiệm vấn đề cho CTDL> - Trần Đăng Hưng September 2015 Ví dụ: Tìm số fibonaxi F5 F3 F1 F4 F2 F2 F0 F1 F0 F3 F1 F2 F1 F0 CTDL> - Trần Đăng Hưng F1 September 2015 Chiến lược: Quy hoạch động QHĐ dùng để giải tốn tối ưu có chất đệ quy Lời giải tối ưu đưa việc tìm lời giải tối ưu số hữu hạn toán QHĐ gần giống với CĐT chia toán lớn thành hữu hạn toán Nhưng khác chỗ CĐT: phân rã toán lớn thành nhiều toán giải chúng, việc giải toán lại tiếp tục phân rã thành nhiều toán nhỏ hơn, tốn giải hay chưa (top-down) QĐH: bắt đầu việc giải tất toán nhỏ nhất, để từ giải tốn lớn hơn, cho giải toán lớn đặt (bottom-up) CTDL> - Trần Đăng Hưng September 2015 Các giai đoạn giải toán theo QHĐ Phân rã: Chia toán cần giải thành tốn nhỏ có dạng với tốn ban đầu cho tốn kích thước nhỏ giải cách trực tiếp Giải toán con: Lưu trữ lời giải toán vào bảng để sử dụng lại nhiều lần khơng phải giải lặp lại toán Tổng hợp lời giải: Lần lượt từ lời giải tốn kích thước nhỏ xây dựng lời giải tốn kích thước lớn hơn, thu lời giải toán xuất phát CTDL> - Trần Đăng Hưng September 2015 Các bước giải toán theo QHĐ Giải toán sở (bài toán biên) Xây dựng công thức truy hồi để giải toán lớn Dựa vào lời giải tốn sở cơng thức truy hồi để xây dựng bảng phương án Bảng phương án dùng để lưu trữ lời giải toán để tránh phải giải lại toán có lời giải Tùy thuộc tốn: bảng phương án dùng mảng chiều chiều Dựa vào bảng phương án để lần vết tìm lời giải tốn ban đầu CTDL> - Trần Đăng Hưng September 2015 Hiệu QĐH Khi có tốn lồng nhau, phương pháp CĐT tỏ không hiệu quả, phải lặp lặp lại việc giải tốn chung QHĐ giải toán lần lời giải toán ghi nhận, để thoát khỏi việc giải lại tốn ta địi hỏi lời giải Quy hoạch động thường áp dụng để giải toán tối ưu Trong tốn tối ưu, ta có tập lời giải, hàm mục tiêu nhận giá trị số Ta cần tìm lời giải để hàm mục tiêu đạt giá trị nhỏ lớn Hạn chế QHĐ kích thước bảng phương án lưu trữ lời giải toán trung gian 10 CTDL> - Trần Đăng Hưng September 2015 Một số ví dụ Tìm dãy đơn điệu tăng dài Tìm xâu chung dài hai xâu Bài toán túi Bài toán nhân ma trận … 11 CTDL> - Trần Đăng Hưng September 2015 Tìm dãy đơn điệu tăng dài Bài toán: Cho dãy số nguyên A gồm n phần tử, dãy A cách chọn số phần tử giữ nguyên thứ tự Hãy tìm dãy đơn điệu tăng có độ dài lớn nhất? Ví dụ: A = [1, 3, 6, 2, 7, 8, 5, 4, 9] Dãy đơn điệu tăng dài là: [1, 3, 6, 7, 8, 9] Lời giải: Để đơn giản cài đặt, bổ sung thêm vào dãy A phần tử A[0] = -maxInt A[n+1] = + maxInt, dãy đơn điệu tăng dài A[0] kết thúc A[n+1] 12 CTDL> - Trần Đăng Hưng September 2015 Tìm dãy đơn điệu tăng dài Đặt 𝐿[𝑖] = độ dài dãy ĐĐTDN bắt đầu A[i] Cơ sở QHD: 𝐿 𝑛 + = Công thức truy hồi: 𝐿𝑖 = max 𝑖+1≤𝑗≤𝑛+1 𝑎 𝑖