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 đó.

 

ppt14 trang | Chuyên mục: C/C++ | Chia sẻ: tuando | Lượt xem: 377 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng C căn bản - Chương 4: Quy hoạch động, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pptbai_giang_c_can_ban_chuong_4_quy_hoach_dong.ppt