GVGD: Tr ng Ph c H i
(dynamic programming)
Trang 3Nguyên lý quy ho ch đ ng
Chia đ tr là ph ng pháp ch đ o trong vi c thi t
k các thu t toán có tính ch t đ quy
Chia đ tr phân nh bài toán và gi i quy t đ c l p
t ng ph n m t cách đ quy
T t ng đ quy d hi u và d cài đ t nh ng tiêu
t n nhi u b nh (stack l u tr các l i g i)
Trang 8Nguyên lý quy ho ch đ ng
Xây d ng l i gi i c a m t bài toán thông qua l i
gi i c a các bài toán con
Các bài con ti p t c đ c chia nh đ gi i quy t
nh ng không s d ng k thu t đ quy
S d ng b ng tra c u đ l u l i k t qu đã tính
đ c và tính d n đ n nghi m c a bài toán b ng
m t công th c xác đ nh
Trang 9N i dung
1 Nguyên lý quy ho ch đ ng
3 Ph ng pháp quy ho ch đ ng
2 Công th c truy h i
Trang 10Công th c truy h i
Trong quá trình quay lui, đ quy s g i l i nhi u
l n các bài toán con đã đ c g i các b c tr c
Gây tiêu t n th i gian th c hi n l p l i và tài nguyên b
nh
theo m t công th c xác đ nh đ tìm nghi m cho bài toán ban đ u
Công th c k t h p nghi m c a các bài toán con đ tìm nghi m c a bài toán l n h n g i là công th c truy h i
Trang 11Công th c truy h i
Ví d 1
Xét l i bài toán tìm ph n t th N c a dãy Fibonacci
Gi i bài toán m t cách nhìn khác
d n cho các s Fibonacci ti p theo
Trang 13Công th c truy h i
Gi i thu t s d ng công th c truy h i v i đ ph c
t p O(N)
Fibonacci (N) F[0] = 1
Trang 14for ( int i = 2; i <= N; i++)
F[i] = F[i-1] + F[i-2];
return F[N];
}
Trang 15Công th c truy h i
Ví d 2
Trang 16Công th c truy h i
T o b ng l u tr nghi m c a các bài toán con
G i C[i][j] là giá tr c a , v y giá tr c a là C[N][k]
Trang 18Công th c truy h i
Gi i thu t s d ng b ng tra c u đ ph c t p O(n2)
ToHop (N, k) For (j = 0; j <= k; j++) C[0][j] = 0
For (i = 0; i <= N; i++) C[i][0] = 1
Trang 19for ( int i = 1; i <= N; i++)
C[i][j] = C[i-1][j] + C[i-1][j-1];
Trang 21
Ph ng pháp quy ho ch đ ng
Quy ho ch đ ng do Bellman đ xu t nh m gi i quy t các bài toán t i u có b n ch t đ quy
Quy ho ch đ ng có c s là nguyên lý t i u Bellman
Quy ho ch đ ng b t đ u t vi c tìm nghi m t t c bài toán c s và k t h p chúng đ d n tìm nghi m
c a bài toán ban đ u
Trang 22 S d ng công th c truy h i đ l n gi i các bài toán l n h n
d n đ t đ c bài toán ban đ u
Trang 23Ph ng pháp quy ho ch đ ng
i u ki n đ áp d ng ph ng pháp quy ho ch
đ ng cho các bài toán
các bài toán con (xác đ nh công th c truy h i)
m t hình th c ch p nh n đ c (b ng ph ng án)
Xác đ nh công th c truy h i là công vi c ch y u
và ph c t p nh t c a ph ng pháp quy ho ch đ ng
Trang 25Ph ng pháp quy ho ch đ ng
Quy ho ch đ ng không hi u qu trong các tr ng
h p sau
án quá l n
S k t h p nghi m c a các bài toán con ch a ch c tìm
đ c nghi m c a bài toán ban đ u
Trang 26Ph ng pháp quy ho ch đ ng
Quy ho ch đ ng đ c ng d ng đ gi i các bài toán t i u trong kinh t (t i thi u chi phí, t i đa
l i nhu n, …)
Bài toán cái túi
Bài toán chia k o
…
Trang 27N i dung
1 Nguyên lý quy ho ch đ ng
3 Ph ng pháp quy ho ch đ ng
2 Công th c truy h i
Trang 28M t s bài toán ng d ng
Dãy con chung dài nh t
m t s ph n t trên A và B đ 2 dãy còn l i là gi ng nhau
Trang 29M t s bài toán ng d ng
Phân tích bài toán
ph n t và dãy B có j ph n t
Nh n xét
dãy chung luôn là 0
Trang 31ph ng án quy ho ch đ ng l u nghi m các bài toán con
và dãy b t k
Các dòng i, c t j ti p theo th hi n chi u dài dãy chung dài nh t c a dãy A có i ph n t và B có j ph n t
Trang 35đ l n ng c theo giá tr max đó
Trang 37M t s bài toán ng d ng
Cài đ t ngôn ng
void Trace( int L[][MAX], int A[], int M,
int B[], int N, int T[], int &P) {
Trang 38M t s bài toán ng d ng
Bài toán cái túi
l ng c a chúng là l n nh t nh ng không v t quá W
Trang 41M t s bài toán ng d ng
Phân tích bài toán
Không ch n A[i]: F[i][j] = F[i-1][j]
Ch n A[i]: F[i][j] = F[i-1][j-A[i]] + A[i]
Trang 45j (A[1] ≤ j) thì ch n, ngh a là A[1][j] = A[1]
Trang 49M t s bài toán ng d ng
Gi i thu t tra b ng truy v t
Trace (F[][], A[], N, W) While (N >= 1) Do
Trang 50M t s bài toán ng d ng
Cài đ t ngôn ng
void Trace( int L[][MAX], int A[], int N, int W,