Giải toán bằng phương pháp quy hoạch động
Niên Luận Trang Niên Luận NHẬN XÉT CỦA GIÁO VIÊN - Trong trình học tập, gặp nhiều tập ToánTin Các tập dạng phong phú đa dạng Thực tế chưa có thuật Trang Niên Luận tốn hồn chỉnh áp dụng cho toán Tuy nhiên người ta tìm số thuật tốn chung chia để trị, tham ăn, quay lui, Các thuật toán áp dụng để giải lớp rộng toán hay gặp thực tế Trong viết này, muốn đề cập với bạn thuật tốn khác, thuật tốn quy hoạch động Tư tưởng thuật toán là: Để giải tốn ta chia tốn thành tốn nhỏ giải cách dễ dàng Sau kết hợp lời giải tốn con, ta có lời giải tốn ban đầu Trong q trình giải tốn đơi ta gặp nhiều kết trùng lặp tốn Để tăng tính hiệu quả, thay phải tính lại kết đó, ta lưu chúng vào bảng Khi cần lời giải tốn ta cần tim bảng, khơng cần tính lại Tư tưởng thuật tốn quy hoạch động đơn giản Tuy nhiên áp dụng thuật tốn vào trường hợp cụ thể lại khơng dễ dàng (điều tương tự nguyên tắc Dirichlet toán vậy) Khi giải toán phương pháp này, phải thực hai yêu cầu quan trọng sau: - Tìm cơng thức truy hồi xác định nghiệm toán qua nghiệm toán nhỏ - Với toán cụ thể, ta đề phương án lưu trữ nghiệm cách hợp lý để từ truy cập cách thuận tiện Giải toán phương pháp qui hoạch động Phương pháp quy hoạch động Phương pháp quy hoạch động nguyên lý tối ưu nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ 20 Phương pháp áp dụng để giải hàng loạt toán thực tế trình kỹ thuật cộng Trang Niên Luận nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế… Tuy nhiên cần lưu ý có số toán mà cách giải quy hoạch động tỏ khơng thích hợp Trong thực tế, ta thường gặp số tốn tối ưu loại sau: Có đại lượng f hình thành trình gồm nhiều giai đoạn ta quan tâm đến kết cuối giá trị f phải lớn nhỏ nhất, ta gọi chung giá trị tối ưu f Giá trị f phụ thuộc vào đại lượng xuất toán mà giá trị chúng gọi trạng thái hệ thống phụ thuộc vào cách thức đạt giá trị f giai đoạn mà cách tổ chức gọi điều khiển Đại lượng f thường gọi hàm mục tiêu trình đạt giá trị tối ưu f gọi trình điều khiển tối ưu Bellman phát biểu nguyên lý tối ưu (cũng gọi nguyên lý Bellman) mà ý tưởng sau: “Với trình điều khiển tối ưu, trạng thái bắt đầu A0, với trạng thái A q trình đó, phần q trình kể từ trạng thái A xem trạng thái bắt đầu tối ưu” Chú ý nguyên lý thừa nhận mà khơng chứng minh Phương pháp tìm điều khiển tối ưu theo nguyên lý Bellman thường gọi quy hoạch động Thuật ngữ nói lên thực chất q trình điều khiển động: số bước lựa chọn điều khiển tối ưu dường không tốt tựu chung trình lại tốt Ta giải thích ý qua toán sau: Cho dãy N số ngun A1, A2,…,AN Hãy tìm cách xố số số hạng để dãy cịn lại đơn điệu hay nói cách khác chọn số nhiều số hạng cho dãy B gồm số hạng theo trình tự xuất dãy A đơn điệu Quá trình chọn B điều khiển qua N giai đoạn để đạt mục tiêu số lượng số hạng dãy B nhiều nhất, điều khiển giai đoạn i thể việc chọn hay không chọn Ai vào dãy B Giả sử dãy cho 10 Nếu ta chọn 1, 8, 10 chọn số hạng bỏ qua 10 ta chọn số hạng 1, 2, 4, 6, Khi giải toán cách “chia để trị” chuyển việc giải tốn kích thước lớn việc giải nhiều tốn kiểu có kích thước nhỏ Trang Niên Luận thuật toán thường thể chương trình đệ quy Khi đó, thực tế, nhiều kết trung gian phải tính nhiều lần Vậy ý tưởng quy hoạch động thật đơn giản: tránh tính tốn lại thứ hai lần, mà lưu giữ kết tìm kiếm vào bảng làm giả thiết cho việc tìm kiếm kết trường hợp sau Chúng ta làm đầy dần giá trị bảng kết trường hợp trước giải Kết cuối kết tốn cần giải Nói cách khác phương pháp quy hoạch động thể sức mạnh nguyên lý chia để trị đến cao độ Quy hoạch động kỹ thuật thiết kế bottom-up (từ lên) Nó bắt đầu với trường hợp nhỏ (thường đơn giải giải ngay) Bằng cách tổ hợp kết có (khơng phải tính lại) trường hợp con, đạt đạt tới kết trường hợp có kích thước lớn dần lên tổng quát hơn, cuối đạt tới lời giải trường hợp tổng quát Trong số trường hợp, giải toán A, trước hết ta tìm họ tốn A(p) phụ thuộc tham số p (có thể p véc tơ) mà A(p0)=A với p0 trạng thái ban đầu tốn A Sau tìm cách giải họ toán A(p) với tham số p cách áp dụng nguyên lý tối ưu Bellman Cuối cho p=p nhận kết toán A ban đầu Các bước thực quy hoạch động Bước 1: Lập hệ thức Dựa vào nguyên lý tối ưu tìm cách chia q trình giải tốn thành giai đoạn, sau tìm hệ thức biểu diễn tương quan định bước xử lý với bước xử lý trước Hoặc tìm cách phân rã toán thành “bài toán con” tương tự có kích thước nhỏ hơn, tìm hệ thức nêu quan hệ kết tốn kích thước cho với kết “bài toán con” kiểu có kích thước nhỏ nhằm xây dựng phương trình truy tốn (dạng hàm thủ tục đệ quy) Về cách xây dựng phương trình truy toán: Ta chia việc giải toán thành n giai đoạn Mỗi giai đoạn i có trạng thái ban đầu t(i) chịu tác động điều khiển d(i) biến thành trạng thái t(i+1) giai đoạn i+1 (i=1,2,…,n-1) Theo nguyên lý tối ưu Bellman việc tối ưu giai đoạn cuối không làm ảnh hưởng đến kết tồn tốn Trang Niên Luận Với trạng thái ban đầu t(n) sau làm giai đoạn n tốt ta có trạng thái ban đầu giai đoạn n-1 t(n-1) tác động điều khiển giai đoạn n-1 d(n-1), tiếp tục xét đến giai đoạn n-1 Sau tối ưu giai đoạn n-1 ta lại có t(n-2) d(n-2) lại tối ưu giai đoạn n-2 … giai đoạn từ n giảm đến tối ưu coi hồn thành toán Gọi giá trị tối ưu tốn tính đến giai đoạn k Fk giá trị tối ưu tốn tính riêng giai đoạn k Gk Fk = Fk-1 + Gk Hay là: Bước 2: Tổ chức liệu chương trình Tổ chức liệu cho đạt yêu cầu sau: Dữ liệu tính tốn dần theo bước Dữ liệu lưu trữ để giảm lượng tính tốn lặp lại Kích thước miền nhớ dành cho lưu trữ liệu nhỏ tốt, kiểu liệu chọn phù hợp, nên chọn đơn giản dễ truy cập Cụ thể Các giá trị Fk thường lưu trữ bảng (mảng chiều hai, ba, v.v… chiều) Cần lưu ý khởi trị giá trị ban đầu bảng cho thích hợp, kết tốn có kích cỡ nhỏ tốn giải: Dựa vào cơng thức, phương trình truy tốn (*) giá trị có bảng để tìm dần giá trị cịn lại bảng Ngồi cịn cần mảng lưu trữ nghiệm tương ứng với giá trị tối ưu gian đoạn Dựa vào bảng lưu trữ nghiệm bảng giá trị tối ưu giai đoạn xây dựng, tìm kết tốn Bước 3: Làm tốt Làm tốt thuật toán cách thu gọn hệ thức (*) giảm kích thước miền nhớ Thường tìm cách dùng mảng chiều thay cho mảng hai chiều giá trị dòng (hoặc cột) mảng hai chiều phụ thuộc dòng (hoặc cột) kề trước Trang Niên Luận Trong số trường hợp thay mảng hai chiều với giá trị phần tử nhận giá trị 0, mảng hai chiều cách dùng kỹ thuật quản lý bit Hạn chế quy hoạch động Việc tìm cơng thức, phương trình truy tốn tìm cách phân rã tốn nhiều địi hỏi phân tích tổng hợp cơng phu,dễ sai sót, khó nhận thích hợp, địi hỏi nhiều thời gian suy nghĩ Đồng thời lúc kết hợp lời giải toán cho kết toán lớn Khi bảng lưu trữ đòi hỏi mảng hai, ba chiều … khó xử lý liệu với kích cỡ chiều lớn hàng trăm Có tốn khơng thể giải quy hoạch động Trang Niên Luận Các toán quy hoach động Một số toán đơn giản: Bài toán 1: Cho hai dãy số nguyên (a1,a2, ,am), (b1,b2, ,bn) Tìm dãy chung có độ dài lớn hai dãy (coi dãy khơng có số ngun dãy dãy có độ dài 0) Lời giải Chúng ta thấy độ phức tạp toán phụ thuộc vào hai số m, n Xét hai trường hợp: +Trường hợp1:; m=0 n=0 Đây trường hợp đặc biệt, có dãy chung hai dãy có độ dài Vì dãy chung có độ dài lớn chúng có độ dài +Trường hợp 2: m# n # Trong trường hợp này, ta xét toán nhỏ tìm dãy chung có độ dài lớn hai dãy (a 1,a2, ,ai), (b1,b2, ,bj) với