Ba tính chất của bài toán tối ưu có thể giải bằng quy hoạch động:
Bài toán lớn có thể phân rã thành những bài toán con đồng dạng, những bài
toán con đó có thể phân rã thành những bài toán nhỏ hơn nữa ( recursive
form).
Lời giải tối ưu của các bài toán con có thể sử dụng để tìm ra lời giải tối ưu
của bài toán lớn (optimal substructure)
Hai bài toán con trong quá trình phân rã có thể có chung một số bài toán
con khác (overlapping subproblems).
16 trang |
Chia sẻ: lylyngoc | Lượt xem: 2173 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Chuyên đề: Quy hoạch động - Nguyễn duy dũng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1
QUY HOẠCH ĐỘNG
Chuyên đề:
2
Giảng viên: NGUYỄN DUY DŨNG
Đơn vị: Trường THPT Chuyên Hà Tĩnh
Số ĐT: 0913141823
Email: Dungduyit83@gmail.com
FaceBook: Dungduyit83
QUY HOẠCH ĐỘNG LÀ GÌ?
Bài toán
Quy hoạch động
(dynamic programming)
Chia để trị
(divide & conquer)
3
Thiết kế thuật toánMô hình hóa
Xây dựng cấu trúc dữ liệu
Lập trình Kiểm thử
Vét cạn
(exhaustive search) Tham lam
(greedy)
Cách khác
Ba tính chất của bài toán tối ưu có thể giải bằng quy hoạch động:
Bài toán lớn có thể phân rã thành những bài toán con đồng dạng, những bài
toán con đó có thể phân rã thành những bài toán nhỏ hơn nữa …(recursive
form).
Lời giải tối ưu của các bài toán con có thể sử dụng để tìm ra lời giải tối ưu
của bài toán lớn (optimal substructure)
Hai bài toán con trong quá trình phân rã có thể có chung một số bài toán
con khác (overlapping subproblems).
Có thể hiểu
Hai tính chất đầu tiên Có thể giải bằng chia để trị và đệ quy
Tính chất thứ ba Đặc trưng cho tính hiệu quả của quy hoạch động
BÀI TOÁN QUY HOẠCH ĐỘNG
4
Bài toán giải theo phương pháp quy hoạch động gọi là
bài toán quy hoạch động.
Công thức phối hợp nghiệm của các bài toán con để có
nghiệm của bài toán lớn gọi là công thức truy hồi của
quy hoạch động.
Tập các bài toán nhỏ nhất có ngay lời giải để từ đó giải
quyết các bài toán lớn hơn gọi là cơ sở quy hoạch động.
Không gian luu trữ lời giải các bài toán con để tìm cách
phối hợp chúng gọi là bảng phương án của quy hoạch
động.
CÁC KHÁI NIỆM
5
Giải tất cả các bài toán cơ sở (thông thường rất dễ),
luu các lời giải vào bảng phương án.
Dùng công thức truy hồi phối hợp những lời giải của
những bài toán nhỏ đã lưu trong bảngphương án để
tìm lời giải của những bài toán lớn hơn và lưu chúng
vào bảng phuong án, chotới khi bài toán ban đầu tìm
được lời giải.
Dựa vào bảng phương án, truy vết tìm ra nghiệm tối
ưu.
CÁC BƯỚC GIẢI BÀI TOÁN QUY HOẠCH ĐỘNG
6
Nhập vào dãy số nguyênA=(a1,a2 …an). n≤106, |ai |≤ 109Tìm một đoạn con gồm các phần tử liên tiếp
trong dãy A có tổng lớn nhất.
Dữ liệu vào file: DAYSO.INP- Dòng 1: chứa số nguyên dương N- Dòng 2: chứa N số nguyên của dãy A
Dữ liệu ra file: DAYSO.OUT- Ghi 1 giá trị duy nhất là tổng lớn nhất tìm được
Ghi chú: Tên chương trình: DAYSO.PAS
BÀI TOÁN 1
7
Thuật toán đầu tiên: O(n3)
Thuật toán O(n2):
- Gọi S[i] là tổng các phần tử từ a1 tới ai
Bài toán cơ sở: dãy không có phần tử nào
S[0]=0
Công thức tính S: S[i] = S[i-1]+a[i]
Kết quả bài toán:
Res = Max{S[j]-S[i-1]; i: 1..n, j: i..n }
BÀI TOÁN 1
8
Thuật toán O(n):
- Gọi S[i] là tổng các phần tử từ a1 tới ai
Bài toán cơ sở: dãy rỗng S[0] = 0
Công thức tính S: S[i] = S[i-1]+a[i]
Gọi min là giá trị S nhỏ nhất từ 1 tới i-1
Kết quả bài toán
Xét i: 1 . .n Res = max{S[i] - min}
BÀI TOÁN 1
9
Nhập vào dãy số nguyênA=(a1,a2 …an). n≤106, |ai |≤ 109Nối a1 vào sau an ta được 1 vòng tròn số
Tìm một đoạn con gồm các phần tử liên tiếp trong
vòng tròn số có tổng lớn nhất.
Dữ liệu vào file: DAYSO.INP- Dòng 1: chứa số nguyên dương N- Dòng 2: chứa N số nguyên của dãy A
Dữ liệu ra file: DAYSO.OUT- Ghi 1 giá trị duy nhất là tổng lớn nhất tìm được
Ghi chú: Tên chương trình: DAYSO.PAS
BÀI TOÁN 2
10
Nhập vào dãy số nguyênA=(a1,a2 …an). n≤103, |ai |≤ 109Tìm dãy chỉ số I = (i1, i2, ... , ik) dài nhất
1 i1 < i2 < ... < ik n
a[i1] < a[i2] < ... < a[ik]Ví dụ A = (1, 2, 3, 8, 9, 4, 5, 6, 2, 3, 9, 10)
BÀI TOÁN 3: DÃY CON TĂNG DÀI NHẤT
11
Thêm 2 phần tử a0 = -; an+1 = +
Dãy con đơn điệu tăng dài nhất chắc chắn bắt đầu ở a0 và kết thúc ở an+1
Tổng quát hóa: Làm thế nào xác định dãy con đơn điệu tăng dài nhất kết thúc tại ai?
Kiểm tra 3 tính chất của bài toán QHĐ
Dãy con tăng kết thúc tại ai được thành lập bằng cách lấy ai ghép vào sau một
dãy con tăng kết thúc tại aj nào đó đứng trước ai
Nếu xác định được tất cả các dãy con tăng dài nhất đứng trước ai thì có thể xác
định được dãy con tăng dài nhất kết thúc tại ai
BÀI TOÁN 3: DÃY CON TĂNG DÀI NHẤT
12aiaj ai’
Bài toán cơ sở: L[0]=1
Công thức truy hồi:
L[i] = max{L[j]: (j<i)&(aj<ai)}+1
Truy vết : Trace[i] lưu phần tử đứng liền trước i trong
dãy con tăng dài nhất
BÀI TOÁN 3: DÃY CON TĂNG DÀI NHẤT
13
1 2 3 4 4 5 6 6 7 8
0 1 2 2 4 5 5 7 8
- 11 22 66 33 44 99 55 77 +
0 1 2 3 4 5 6 7 8 9
A
L
Trace
(n2)
Giải pháp
cải tiến?
Để vui Tết Trung thu cho các cháu ban tổ chức thành phố X quyết định phát quà cho
mỗi cháu bằng cách tổ chức một trò chơi trên lưới ô vuông như sau:
Vẽmột hình chữ nhật kích thước M x N ô vuông, Các dòng được đánh số từ 1 đến
M, các cột được đánh số từ 1 đến N (các số được đánh từ trên xuống dưới và từ trái
sang phải). Mỗi ô nằm trên giao của dòng i và cột j được gọi là ô (i,j) ghi một số nguyên
dương A[i,j], (1 ≤ i ≤ M, 1 ≤ j ≤ N) chính là số món quà trên ô đó. Có thể di chuyển từ
một ô sang ô thuộc cột bên phải cùng dòng hoặc chênh lệch một dòng.
Yêu cầu: Tìm cách giúp các cháu di chuyển từmột ô nào đó của cột bên trái (cột xuất
phát) đến một ô nào đó thuộc cột N (cột đích) sao cho tổng các số của ô đi qua là
lớn nhất vì đó chính là tổng số món quà mà các cháu được nhận.
Dữ liệu: Vào từ file văn bản TIMQUA.INP dòng đầu tiên là 2 số nguyên dương M, N (M,
N ≤ 100). M dòng tiếp theo mỗi dòng N số nguyên A[i,j] (0 ≤ A[i,j] ≤ 50) của hình chữ
nhật.
Kết quả: Ghi ra file văn bản TIMQUA.OUT gồm 2 dòng:
Dòng thứ nhất ghi tổng các số của các ô đi qua.
Dòng thứ hai ghi N số là chỉ số dòng các ô đi qua từ cột 1 đến cột N.
Ví dụ:
BÀI TOÁN 4: QUÀ TẾT TRUNG THU
14
TIMQUA.INP TIMQUA.OUT
3 5
7 3 8 1 5
8 8 3 12 1
6 15 10 5 2
50
2 3 3 2 1
Kỹ thuật rào
Xây dựng bảng 2 chiều KQ
KQ[i,j]=Max{KQ[i-1,j-1], KQ[i,j-1], KQ[i+1,j-1]}+a[i,j]
Với 1 ≤ i ≤ M, 1 ≤ j ≤ N
Truy vết: lần ngược theo kết quả
BÀI TOÁN 4: QUÀ TẾT TRUNG THU
15
0 0 0 00
7 3 8 10
0
5
8 8 3 120 1
6 15 10 50 2
0 0 0 00 0
Mảng A
Bảng phương án KQ
16
0 0 0 00
0
0
0
0
0
7 11 24 27 50
8 16 26 45 46
6 23 33 38 47
0 0 0 0 0