GVGD: Trng Phc Hi
Phng pháp quy hoch đng
(dynamic programming)
2 Trng Phc Hi
Ni dung
1. Nguyên lý quy hoch đng
3. Phng pháp quy hoch đng
4. Mt s bài toán ng dng
2. Công thc truy hi
3 Trng Phc Hi
Nguyên lý quy hoch đng
Chia đ tr là phng pháp ch đo trong vic thit
k các thut toán có tính cht đ quy
Chia đ tr phân nh bài toán và gii quyt đc lp
tng phn mt cách đ quy
T tng đ quy d hiu và d cài đt nhng tiêu
tn nhiu b nh (stack lu tr các li gi)
4 Trng Phc Hi
Nguyên lý quy hoch đng
Xét bài toán
Tìm phn t th N ca dãy Fibonacci
Dãy đc đnh ngha F
N
= F
N-1
+ F
N-2
vi F
0
= F
1
= 1
Gii bng phng pháp chia đ tr
Chia: F
n
đc chia thành F
N-1
và F
N-2
Tr: tính F
N-1
và F
N-2
mt cách đ quy
Gp: tính tng F
N-1
+ F
N-2
đ đc F
N
5 Trng Phc Hi
Nguyên lý quy hoch đng
Gii thut chia đ tr cho bài toán
F(N)
If (N = 0) Or (N = 1) Then
Return 1
End If
Return F(N - 1) + F(N - 2)
End F
6 Trng Phc Hi
Nguyên lý quy hoch đng
Minh ha s đ gii bài toán tính F(5)
F(5)
3
8
F(4) F(3)
5
F(3) F(2) F(1) F(2)
F(2) F(1)
F(1) F(0)
F(1) F(0) F(1) F(0)
3 2 2 1
1 1 1 1 1 2
1 1
7 Trng Phc Hi
Nguyên lý quy hoch đng
phc tp ca gii thut chia đ tr áp dng cho
bài toán Fibonacci
T(N): thi gian tính F(N)
Phng trình đ quy biu din thi gian tính T(N)
T(N) = T(N-1) + T(N-2)
Gii phng trình đ quy trên ta đc
8 Trng Phc Hi
Nguyên lý quy hoch đng
Xây dng li gii ca mt bài toán thông qua li
gii ca các bài toán con
Các bài con tip tc đc chia nh đ gii quyt
nhng không s dng k thut đ quy
S dng bng tra cu đ lu li kt qu đã tính
đc và tính dn đn nghim ca bài toán bng
mt công thc xác đnh
9 Trng Phc Hi
Ni dung
1. Nguyên lý quy hoch đng
3. Phng pháp quy hoch đng
4. Mt s bài toán ng dng
2. Công thc truy hi
10 Trng Phc Hi
Công thc truy hi
Trong quá trình quay lui, đ quy s gi li nhiu
ln các bài toán con đã đc gi các bc trc
Gây tiêu tn thi gian thc hin lp li và tài nguyên b
nh
Lu tr nghim ca tt c bài toán con và kt hp chúng
theo mt công thc xác đnh đ tìm nghim cho bài toán
ban đu
Công thc kt hp nghim ca các bài toán con đ
tìm nghim ca bài toán ln hn gi là công thc
truy hi
11 Trng Phc Hi
Công thc truy hi
Ví d 1
Xét li bài toán tìm phn t th N ca dãy Fibonacci
Gii bài toán mt cách nhìn khác
S dng bng tra lu li giá tr các s Fibonacci nhm tính
dn cho các s Fibonacci tip theo
12 Trng Phc Hi
Công thc truy hi
To mng lu kt qu đ tra cu
Gi F[i] là giá tr ca phn t Fibonacci th i, vy phn t
th N ca dãy Fibonacci là F[N]. Ta có
F[0] = F[1] = 1
Công thc truy hi
F[i] = F[i-1] + F[i-2], vi 2 ≤ i ≤ N
1 1 ? ? ?
0 1 2 3 …
?
?
?
N
13 Trng Phc Hi
Công thc truy hi
Gii thut s dng công thc truy hi vi đ phc
tp O(N)
Fibonacci(N)
F[0] = 1
F[1] = 1
For (i = 2; i <= N; i++)
F[i] = F[i-1] + F[i-2]
End For
Return F[N]
End Fibonacci
14 Trng Phc Hi
Công thc truy hi
Cài đt ngôn ng
int Fibonacci(int N)
{
int F[MAX];
F[0] = F[1] = 1;
for (int i = 2; i <= N; i++)
F[i] = F[i-1] + F[i-2];
return F[N];
}
15 Trng Phc Hi
Công thc truy hi
Ví d 2
T hp chp k ca N phn t đc đnh ngha nh sau
Cho 2 s nguyên dng k ≤ N. Tính
16 Trng Phc Hi
Công thc truy hi
To bng lu tr nghim ca các bài toán con
Gi C[i][j] là giá tr ca
, vy giá tr ca
là C[N][k].
Ta có
C[0][j] = 0,j (vì
)
C[i][0] = 1, i (vì
)
Công thc truy hi
C[i][j] = C[i-1][j] + C[i-1][j-1], i [1 N], j [1 k]
17 Trng Phc Hi
Công thc truy hi
Minh ha quá trình xây dng bng đ tính C[N][k]
0
1
2
3
4
5
0
1
0
0
0
0
0
1
1
2
1
3
1
4
1
5
1
0 0 0 0 1
0 0 0 1 2
0 0 1 3 3
0 1 4 6 4
1 5 10 10 5
18 Trng Phc Hi
Công thc truy hi
Gii thut s dng bng tra cu đ phc tp O(n
2
)
ToHop(N, k)
For (j = 0; j <= k; j++) C[0][j] = 0
For (i = 0; i <= N; i++) C[i][0] = 1
For (j = 1; j <= k; j++)
For (i = 1; i <= N; i++)
C[i][j] = C[i-1][j] + C[i-1][j-1]
End For
End For
Return C[N][k]
End ToHop
19 Trng Phc Hi
Công thc truy hi
Cài đt ngôn ng
int ToHop(int N, int k)
{
for (int i = 0; i <= N; i++)
C[i][0] = 1;
for (int j = 1; j <= k; j++)
C[0][j] = 0;
for (int j = 1; j <= k; j++)
for (int i = 1; i <= N; i++)
C[i][j] = C[i-1][j] + C[i-1][j-1];
return C[N][k];
}
20 Trng Phc Hi
Ni dung
1. Nguyên lý quy hoch đng
3. Phng pháp quy hoch đng
4. Mt s bài toán ng dng
2. Công thc truy hi
21 Trng Phc Hi
Phng pháp quy hoch đng
Quy hoch đng do Bellman đ xut nhm gii
quyt các bài toán ti u có bn cht đ quy
Quy hoch đng có c s là nguyên lý ti u
Bellman
Nu đng đi t A đn B là ti u và gi s đng đi này
qua trung gian C thì đng đi t C đn B cng ti u
Quy hoch đng bt đu t vic tìm nghim tt c
bài toán c s và kt hp chúng đ dn tìm nghim
ca bài toán ban đu
22 Trng Phc Hi
Phng pháp quy hoch đng
Quy hoch đng gii bài toán theo phng pháp
ln ngc lên (bottom-up)
Chia nh bài toán thành các bài toán con nh nht và tìm
nghim ca chúng (
c s quy hoch đng)
Lu tr nghim ca các bài toán con vào bng tra cu
(bng phng án quy hoch đng)
S dng công thc truy hi đ ln gii các bài toán ln hn
dn đt đc bài toán ban đu
23 Trng Phc Hi
Phng pháp quy hoch đng
iu kin đ áp dng phng pháp quy hoch
đng cho các bài toán
Nghim ca bài toán có th xác đnh đc t nghim ca
các bài toán con (xác đnh công thc truy hi)
Nghim ca các bài toán con có th đc lu tr đc theo
mt hình thc chp nhn đc (bng phng án)
Xác đnh công thc truy hi là công vic ch yu
và phc tp nht ca phng pháp quy hoch đng
24 Trng Phc Hi
Phng pháp quy hoch đng
Các bc gii mt bài toán bng phng pháp quy
hoch đng
Tìm công thc xây dng nghim ca bài toán thông qua
nghim ca các bài toán nh hn: công thc truy hi
Tìm nghim ca bài toán con nh nht: xác đnh c s quy
hoch đng
To bng lu tr nghim ca các toán con và tính dn
nghim ca các bài toán ln hn da vào công thc truy
hi: bng phng án quy hoch đng
25 Trng Phc Hi
Phng pháp quy hoch đng
Quy hoch đng không hiu qu trong các trng
hp sau
Không tìm đc công thc truy hi
S lng bài toán con quá nhiu, kích thc bng phng
án quá ln
S kt hp nghim ca các bài toán con cha chc tìm
đc nghim ca bài toán ban đu