Bài toán số Fibonacci Kỹ thuật quy hoạch độngCác bài toán áp dụng QHĐ trên mảng một chiều và mảng hai chiềuThảo luận, trao đổi kinh nghiệm, đánh giá và nhận xét phương phápQHĐ là một kỹ thuật thiết kế giải thuật để giải quyết bài toán tối ưu thường là nhỏ nhất hay lớn nhất.QHĐ kết hợp chia để trị với kỹ thuật tổ chức lưu trữ bộ nhớ.
Trang 1QUY HOẠCH ĐỘNG
(Dynamic programming)
Trang 2 Bài toán số Fibonacci
mảng một chiều và mảng hai chiều
đánh giá và nhận xét phương pháp
NỘI DUNG
Trang 3Bài toán về dãy số Fibonacci (1)
Rabbits
Trang 4Bài toán về dãy số Fibonacci (2)
The Fibonacci Numbers
Trang 5Bài toán về dãy số Fibonacci (3)
Trang 605/17/24 6
Bài toán về dãy số Fibonacci (4)
Fibonacci numbers
f(1) = f(2) = 1 f(n) = f(n - 1) + f(n - 2)
Giải bằng chia để trị và đệ quy:
function f(i: Integer): Integer; begin
if i <= 2 then Result := 1 else
Result := f(i - 1) + f(i - 2); end;
f(1) f(2)
f(3) f(2)
f(4)
f(1) f(2) f(3) f(5)
f(1) f(2) f(3) f(2)
f(4) f(6)
Trang 7Bài toán về dãy số Fibonacci(5)
Trang 8Bài toán về dãy số Fibonacci (6)
Trang 9Kỹ thuật QHĐ (1)
Định nghĩa:
QHĐ là một kỹ thuật thiết kế giải
thuật để giải quyết bài toán tối ưu
thường là nhỏ nhất hay lớn nhất.
QHĐ kết hợp chia để trị với kỹ
thuật tổ chức lưu trữ bộ nhớ.
Trang 10Kỹ thuật QHĐ (2)
4 bước giải quyết bằng QHĐ
Tìm nghiệm của bài toán con nhỏ nhất
Tìm ra công thức xây dựng nghiệm của bài toán
con thông qua các bài toán con nhỏ hơn
Tạo ra một bảng lưu giữ các 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ừ các bài toán con đã giải để tìm nghiệm của
bài toán
Chúng ta sẽ nghiên cứu KT này bằng các ví dụ
cụ thể sau đây
Trang 12Công thức QHĐ
A[i,j] = a[i-1,j-1] + a[i-1,j]
A[i,1]=1 (với mọi i=1 N)
A[i,i]=1 (với mọi i=1 N)
Trang 13Dãy con đơn điệu không giảm dài nhất
nguyên Hãy xóa đi một số ít nhất các phần tử để các phần tử còn lại lập
thành dãy không giảm dài nhất
Trang 14Một hướng giải quyết
độ dài của dãy kết quả khi bài toán chỉ xét dãy A1, A2,…, Ai và công thức truy hồi của nó như sau:
L[i]= max{L[i],L[j]+1 j mà j<I và Aj<=Ai}
Duyệt mảng A từ vị trí 1 i-1 với j thỏa L[j] lớn nhất và Aj<=Ai
Mảng T[i]=j chỉ phần tử đứng trước Ai trong dãy kết quả là Aj (truy vết kết quả)
Trang 15Dãy con đơn điệu không giảm dài nhất
i 1 2 3 4 5 6 7 8 9 10
A 5 2 3 4 9 10 5 6 7 8
L 1 1 2 3 4 5 4 5 6 7
T 0 0 2 3 4 5 3 7 8 9
Trang 16Bài toán ″Con kiến ″
Bài toán: Trên một sân hình chữ nhật MxN, được chia thành các ô vuông đơn vị, mỗi ô chứa một lượng thức ăn Một con kiến xuất phát từ ô (1,1) muốnđi qua sân để đến dòng thứ M Con kiến chỉ có thể đi theo một dòng chia nhỏ trên sân ứng với một dòng của bảng chữ nhật hoặc đi theo trên một cột của sân Hãy chỉ ra đường đi giúp con kiến có
Trang 17 FOOD.INP
3 5
FOOD.OUT
45(lượng thức ăn Max)
Bài toán ″Con kiến ″
Trang 18Bài toán ″Con kiến ″
Trang 19Bài toán ″Con kiến ″
B[i,j] là lượng thức ăn lớn nhất đi từ ô (1,1) đến ô (i,j)
B[1,j]= A[1,j] với j = 1 N
B[i,1]= A[i,1]+B[i-1,1] với i = 2 M
B[i,j]=Max{B[i-1,j],B[i,j-1]} + A[i,j] với i =
Trang 20Bài toán ″Sa mạc ″
Một bãi sa mạc có dạng hình chữ nhật MxN
Mỗi ô vuông đơn vị trên sa mạc có một độ cao
nào đó Một người muốn đi từ bờ đầu này sang
bờ cuối cùng bên kia Người đó chỉ có thể đi từ
ô đang đứng tới một ô mới theo hướng thẳng
đứng chéo trái hoặc chéo phải Giả thiết rằng
người đó không được vượt ra hai mép trái và
phải của sa mạc
Hãy tìm đường đi sao cho người đó phải vượt
qua quãng đường ngắn nhất.Mỗi lần đi từ một
ô sang ô mới tiếp theo người đó phải đi hết
Trang 21 SAMAC.INP
Bài toán ″Sa mạc ″
Trang 22 SAMAC.OUT
12(Quãng đường Min)
(1,3)(2,4) (3,3) (4,2) (5,2)
Quy tắc đi.
Trang 23Công thức QHĐ
B[i,j] là quãng đường nhỏ nhất đi từ bờ đầu tiên đến ô (i,j) B[1,j]= 0 với j = 1 N
B[i,1]= Min { B[i-1,1] + abs(A[i,1] - A[i-1,1]);
B[i-1,2]+ abs(A[i,1] - A[i-1,2])}
Với i = 2 M
B[i,j]= Min { B[i-1,j -1] + abs(A[i,j] - A[i-1,j -1]);
B[i-1,j] + abs(A[i,j] - A[i-1,j]);
B[i-1,j+1] + abs(A[i,j] - A[i-1,j+1])}
Với i = 2 M, j = 2 N-1
B[i,N] = Min { B[i-1,N] + abs(A[i,N] - A[i-1,N]);
B[i-1,N-1]+ abs(A[i,N] - A[i-1,N-1])}
Trang 24Bài toán cắt hình chữ nhật
Có một hình chữ nhật MxN ô, mỗi lần ta được phép cắt một hình chữ nhật thành hai hình chữ nhật con theo chiều ngang hoặc chiều dọc và lại tiếp tục cắt các
hình chữ nhật con cho đến khi được hình vuông thi
Trang 25Phân tích
Gọi F(a,b) là số hv ít nhất khi cắt hcn cạnh axb
Ta có công thức QHĐ như sau:
F(a,b) = min{f(a1,b)+f(a2,b),f(a,b1)+f(a,b2)}
Với a = a1 + a2 và b=b1 + b2
Trang 27Summary (1)
Thiết kế thuật toán
Quy hoạch động
Dynamic Programming
Trang 28Dynamic
Summary (2)
Trang 29Bài tập
Male bee’s family tree