Bài giảng C căn bản - Chương 4: Quy hoạch động
Quy hoach động là kỹ thuật từ dưới lên (bottom – up).
Quy hoạch động là phương pháp thiết kế giải thuật cho các bài toán có tính chất: Quyết định ở bước thứ i phụ thuộc vào quyết định ở các bước trước đó.
Yêu cầu quan trọng của phương pháp này là thiết lập được hệ thức mô tả giữa dữ liệu sẽ thu được ở bước sau và dữ liệu đã thu đượsc ở bước trước đó.
Chương 4 Quy hoạch động 4.1. Khái niệm Quy hoach động là kỹ thuật từ dưới lên (bottom – up). Quy hoạch động là phương pháp thiết kế giải thuật cho các bài toán có tính chất : Quyết định ở bước thứ i phụ thuộc vào quyết định ở các bước trước đó . Yêu cầu quan trọng của phương pháp này là thiết lập được hệ thức mô tả giữa dữ liệu sẽ thu được ở bước sau và dữ liệu đã thu đượsc ở bước trước đó . 2 4.2. Các bước giải bài toán qui hoạch động Tìm nghiệm của các bài toán con ( các trường hợp riêng ) đơn giản nhất . Tìm ra công thức ( hoặc quy tắc ) xây dựng nghiệm của bài toán con thông qua nghiệm của bài toán con cỡ nhỏ hơn . Tạo ra một bảng để lưu giữ các nghiệm của bài toán con, sau đó tính nghiệm của bài toán con theo công thức đã tìm ra và lưu vào bảng . Từ bảng đã làm đầy , tìm cách xây dựng nghiệm của bài toán . 3 4.2. Các bước giải bài toán qui hoạch động Phạm vi áp dụng của phương pháp quy hoach động : Các bài toán tối ưu : tìm chuỗi con chung dài nhất , bài toán ba lô , tìm đường đi ngắn nhất , bài toán ôtômát với số phép biến đổi ít nhất , Các bài toán có công thức truy hồi . 4 4.2. Các bước giải bài toán qui hoạch động Phạm vi áp dụng của phương pháp quy hoach động : Các bài toán tối ưu : tìm chuỗi con chung dài nhất , bài toán ba lô , tìm đường đi ngắn nhất , bài toán ôtômát với số phép biến đổi ít nhất , Các bài toán có công thức truy hồi . 5 4.2. Các bước giải bài toán qui hoạch động Phương pháp quy hoạch động sẽ không đem lại hiệu quả trong các trường hợp sau : Không tìm được công thức truy hồi . Số lượng các bài toán con cần giải quyết và lưu giữ kết quả là rất lớn . Sự kết hợp lời giải của các bài toán con chưa chắc cho lời giải bài toán ban đầu . 6 4.3. Một số ví dụ Tính tổ hợp C(n,k ) Ta có thể áp dụng công thức sau : C(j , i) = 1 nếu i = 0 hoặc i = j C(j , i) = C(i , j – 1) + C(j-1, i-1) nếu 0 < i < j Với i = 3, j = 5 ta có bảng như sau: j = 0 1 2 3 4 5 i = 0 1 1 1 1 1 1 1 1 2 3 4 5 2 1 3 6 10 3 1 4 10 7 4.3. Một số ví dụ For j:=0 to n do C[0, j] :=1; For i := 1 to k do Begin C[i, j] := 1; For j = i +1 to n do C[i, j] := C[i, j-1] + C[i-1, j -1]; End; 8 4.3. Một số ví dụ Tìm dãy con chung dài nhất Cho hai dãy số nguyên (a1,a2,...,am), (b1,b2,..., bn ). Tìm dãy con chung có độ dài lớn nhất của hai dãy trên ( coi dãy không có số nguyên nào là dãy con của mọi dãy và có độ dài bằng 0). Dãy (a1,a2,, ai ) và (b1,b2,, aj ) với 0 ≤ i ≤ m và 0 ≤ j ≤ n. Gọi L(i , j) là độ dài lớn nhất của dãy con chung của hai dãy (a1,a2,, ai ) và (b1,b2,, aj ). Do đó L(n , m) là độ dài lớn nhất của dãy con chung của a và b. 9 4.3. Một số ví dụ Tìm dãy con chung dài nhất L(0, j) = 0 với mọi j L(i , 0) = 0 với mọi i (1) Nếu i 0 và j 0 và ai bj thì L(i, j) = max {L(i, j-1), L(i-1, j)} (2) Nếu i 0 và j 0 và ai = bj thì L(i, j) = 1 + L(i-1, j-1) (3) 10 4.3. Một số ví dụ Bài toán xếp balô Một chiếc ba lô có thể chứa được một khối lượng W. Có n loại đồ vật được đánh số từ 1, 2, , n. mỗi đồ vật loại i có khối lượng ai và có giá trị ci (i = 1, 2, , n). Cần xếp các đồ vật vào balô để ba lô có giá trị lớn nhất có thể được. Giả sử rằng mỗi loại đồ vật không hạn chế. Ví dụ: n = 3, W = 10 i 1 2 3 ai 4 3 5 ci 11 7 12 11 4.3. Một số ví dụ 12 4.3. Một số ví dụ For v := 1 to n do Begin A[1,v].f = (v div a1)* c 1 ; A[1, v].x = v div a 1 ; End; For k := 2 to n do For v:= 1 to n do Begin A[k , v].f = max {f(k-1, v - x k a k ) + x k c k }; A[k , v].x = X max ; End; 13 Q&A 14
File đính kèm:
- bai_giang_c_can_ban_chuong_4_quy_hoach_dong.ppt