10.2.2004 Ch. 1: Dynamic Programming 1
Dynamic Programming
10.2.2004 Ch. 1: Dynamic Programming 2
Gi i thi u
°Dynamic programming
gi i bài toán b ng cách k t h p các l i gi i c a các bài toán con. ế
( đây “programming” không có nghĩa là l p trình).
°So sánh dynamic programming và “chia-và-tr ” (divide-and-conquer)
Gi i thu t chia-và-tr
°chia bài toán thành các bài toán con đc l p ,
°gi i chúng b ng đ quy,
°k t h p chúng đ có l i gi i cho bài toán ban đu.ế
Gi i thu t dynamic programming
°các bài toán con không đc l p v i nhau: chúng có chung các
bài toán con nh h n. ơ
°gi i m i bài toán con ch m t l n, và ghi nh l i gi i đó
trong m t b ng đ truy c p khi c n đn. ế
10.2.2004 Ch. 1: Dynamic Programming 3
Bài toán t i u ư
°Bài toán t i u ư
có th có nhi u l i gi i
m i l i gi i có m t tr
°Tìm l i gi i có tr t i u (c c ti u hay c c đi). ư
10.2.2004 Ch. 1: Dynamic Programming 4
Nguyên t c c a dynamic programming
°M t gi i thu t dynamic programming đc xây d ng qua b n b c: ượ ướ
1. Xác đnh c u trúc c a m t l i gi i t i u. ư
2. Đnh nghĩa đ quy cho giá tr c a m t l i gi i t i u. ư
3. Tính giá tr c a m t l i gi i t i u t d i lên (“bottom-up”). ư ướ
4. Xây d ng l i gi i t i u t các thông tin đã tính. ư
10.2.2004 Ch. 1: Dynamic Programming 5
Nhân m t chu i ma tr n
°Cho m t chu i ma tr n A1, A2,..., An.
°Xác đnh tích A1A2 An d a trên gi i thu t xác đnh tích c a hai ma
tr n.
°Bi u di n cách tính tích c a m t chu i ma tr n b ng cách “ đt gi a
ngo c” (parenthesize) các c p ma tr n s đc nhân v i nhau. ượ
°M t tích c a m t chu i ma tr n là fully parenthesized n u nó làế
m t ma tr n ho c là
tích c a hai tích c a chu i ma tr n fully parenthesized khác, và
đc đt gi a ngo c.ượ
Ví d : m t vài tích c a chu i ma tr n đc fully parenthesized ượ
A
(AB)
((AB)C).