Dynamic Programming
13.9.2004
Ch. 1: Dynamic Programming
1
Giới thiệu
°
∆ψναµιχ προγ ραµµινγ
—
—
°
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).
Σο σανη δψναµιχ προγ ραµµινγ ϖα “ χηια−ϖα−
τρ∫ ” ( διϖιδε−ανδ−χονθυερ)
—
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
°
°
13.9.2004
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.
Ch. 1: Dynamic Programming
2
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ò
Τµ λι γ ιαι χο τρ∫ το〈ι υ ( χχ τιε∑υ
ηαψ χχ 〉 αι) .
13.9.2004
Ch. 1: Dynamic Programming
3
Nguyeân taéc cuûa dynamic programming
°
Μο τ γ ιαι τηυα τ δψναµιχ προγ ραµµινγ
〉 χ ξαψ δνγ θυα βο〈ν βχ:
1 . Ξαχ 〉 ∫ νη χα〈υ τρυχ χυα µο τ λι
γ ιαι το〈ι υ.
2 . ∇ ∫ νη νγ η⌠α 〉 ε θυψ χηο γ ια τρ∫
χυα µο τ λι γ ιαι το〈ι υ.
3 . Τνη γ ια τρ∫ χυα µο τ λι γ ιαι
το〈ι υ τ δι λεν ( “ βοττοµ−υπ ” ) .
4 . Ξαψ δνγ λι γ ιαι το〈ι υ τ χαχ
τηονγ τιν 〉 α⌡ τνη.
13.9.2004
Ch. 1: Dynamic Programming
4
Nhân một chuỗi ma trận
°
°
°
°
Χηο µο τ χηυοι µα τρα ν 〈Α 1, Α 2,..., Α ν 〉 .
Ξαχ 〉 ∫ νη τχη Α 1Α 2 ⋅ ⋅ ⋅ Α ν δα τρεν γ ιαι τηυα τ
ξαχ 〉 ∫ νη τχη χυα ηαι µα τρα ν.
Βιε∑υ διεν χαχη τνη τχη χυα µο τ χηυοι µα
τρα ν βανγ χαχη “〉 ατ γ ι⌡α νγ οαχ ”
( πα ’ ρεντηεσιζε ) χαχ χαπ µα τρα ν σε⌡ 〉 χ νηαν
ϖι νηαυ.
Μο τ τχη χυα µο τ χηυοι µα τρα ν λα φ υλλψ
παρεντηεσιζεδ νε〈υ νο λα
—
—
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.
ς δυ: µο τ ϖαι τχη χυα χηυοι µα τρα ν 〉 χ
φ υλλψ παρεντηεσιζεδ
—
—
—
A
(AB)
((AB)C).
13.9.2004
Ch. 1: Dynamic Programming
5
Chuoãi ma traän fully parenthesized
°
ς δυ: Χηο µο τ χηυοι µα τρα ν 〈Α 1 ,
Α 2 , Α 3 , Α 4 〉 . Τχη Α 1Α 2Α 3Α 4 χο τηε∑ 〉 χ
(A1(A2(A3A4)))
φ υλλψ παρεντηεσιζεδ
τηεο 〉 υνγ 5 χαχη
κηαχ νηαυ: (A1((A2A3)A4))
((A1A2)(A3A4))
((A1(A2A3))A4)
(((A1A2)A3)A4)
13.9.2004
Ch. 1: Dynamic Programming
6
Nhân hai ma trận
°
Τχη χυα ηαι µα τρα ν Α ϖα Β ϖι
—
—
A có chiều là p × q
B có chiều là q × r
λα µο τ µα τρα ν Χ χο χηιε◊υ λα π × ρ.
MATRIX-MULTIPLY(A, B)
1 if columns[A] ≠ rows[B]
2
then error “các chiều không tương thích”
3
else for i ← 1 to rows[A]
4
do for j ← 1 to columns[B]
5
do C[i, j] ← 0
6
for k ← 1 to columns[A]
7
do C[i, j] ← C[i, j] + A[i, k]⋅ B[k, j]
8
return C
°
Τηι γ ιαν 〉 ε∑ τνη Χ τψ λε ϖι σο〈 πηεπ
νηαν ϖο ηνγ τηχ τηι τρονγ δονγ 7, τχ
λα π × θ × ρ .
13.9.2004
Ch. 1: Dynamic Programming
7
Phí tổn để nhân một chuỗi ma trận
°
°
Νηα ν ξετ: Π η το∑ν νηαν µο τ χηυοι µα
τρα ν τυψ τηυο χ ϖαο χαχη 〉 ατ γ ι⌡α νγ οαχ
( παρεντηεσιζατιον) .
ς δυ: Χηο χηυοι µα τρα ν 〈Α 1 , Α 2 , Α 3 〉 τρονγ
〉 ο χαχ χηιε◊υ ( διµενσιον) χυα χαχ µα τρα ν λα
10 × 100, 100 × 5 , ϖα 5 × 50
Χο 〉 υνγ 2 χαχη 〉 ε∑ 〉 ονγ νγ οαχ ηοαν τοαν
τχη Α 1Α 2Α 3 :
—
Cách 1: ((A1A2)A3)
°
Tính A1A2 cần 10 ⋅ 100 ⋅ 5 = 5000 phép nhân vô hướng
Kế đó nhân A1A2 với A3 cần 10 ⋅ 5 ⋅ 50 = 2500 phép nhân vô
hướng
°
Tổng cộng: 7500 phép nhân vô hướng
Cách 2: (A1(A2A3))
°
—
°
°
°
13.9.2004
Tính A2A3 cần 100 ⋅ 5 ⋅ 50 = 25000 phép nhân vô hướng
Kế đó nhân A1 với A2A3 cần 10 ⋅ 100 ⋅ 50 = 50000 phép nhân
vô hướng
Tổng cộng: 75000 phép nhân vô hướng.
Ch. 1: Dynamic Programming
8
Baứi toaựn nhaõn chuoói ma traọn
à 1 , 2 ,...,
à à ,
1 ì , = 1 , 2 ,, .
: à
1 2
.
?
13.9.2004
Ch. 1: Dynamic Programming
9
Đếm số cách đóng ngoặc
°
°
°
Χηο µο τ χηυοι γ ο◊µ ν µα τρα ν 〈Α 1 , Α 2 , Α 3 ,..., Α ν 〉 .
Νηα ν ξετ: ταο ρα µο τ χαχη 〉 ονγ νγ οαχ βανγ
χαχη ταχη ( σπλιτ) γ ι⌡α Α κ ϖα Α κ+ 1 , ϖι κ = 1, 2,...,
ν − 1, ταο ρα ηαι χηυοι χον Α 1Α 2 ⋅ ⋅ ⋅ Α κ ϖα Α κ+ 1 ⋅ ⋅ ⋅
Α ν , σαυ 〉 ο 〉 ονγ νγ οαχ µοι χηυοι χον.
Γ οι Π( ν) λα σο〈 χαχ χαχη 〉 ονγ νγ οαχ χηο µο τ
χηυοι ν µα τρα ν
—
—
nếu n = 1 thì chỉ có một cách đóng ngoặc (không cần dấu
ngoặc tường minh). Vậy P(1) = 1.
nếu n ≥ 2 thì từ nhận xét trên ta có
n −1
P ( n) = ∑ P ( k ) P ( n − k )
k =1
Τ 〉 ο χηνγ
µινη 〉 χ:
°
) = Ω(4πη
/ n νγ) πηαπ ϖετ χαν δυψε τ θυα τα〈τ
ςα P
ψ (nδυνγ
χα χαχ χαχη 〉 ονγ νγ οαχ 〉 ε∑ τµ µο τ 〉 ονγ νγ οαχ
το〈ι υ χα◊ν τηι γ ιαν χηαψ λυ⌡ψ τηα.
13.9.2004
n
3/ 2
Ch. 1: Dynamic Programming
10
Bước 1: Cấu trúc của một đóng ngoặc
tối ưu
°
Βχ 1 χυα πηνγ πηαπ δψναµιχ προγ ραµµινγ λα
—
—
xác đònh tính chất cấu trúc con tối ưu
dựa vào đó xây dựng lời giải tối ưu cho bài toán từ các
lời giải tối ưu cho các bài toán con.
⇔ 〉 αψ:
° Γ οι Α ι.. ϕ λα µα τρα ν χο 〉 χ τ τχη Α ι Α ι+ 1 ⋅ ⋅ ⋅
Αϕ .
° Νηα ν ξετ : Μ ο τ 〉 ονγ νγ οαχ το〈ι υ βα〈τ κψ
χυα τχη Α ι Α ι+ 1⋅ ⋅ ⋅ Α ϕ ταχη νο γ ι⌡α Α κ ϖα Α κ+ 1,
ϖι κ ναο 〉 ο τηο⌡α ι ≤ κ < ϕ :
(Ai Ai+1 ⋅ ⋅ ⋅ Ak)(Ak+1 ⋅ ⋅ ⋅ Aj)
Νγ η⌠α λα 〉 α◊υ τιεν τα τνη χαχ µα τρα ν Α ι..κ
ϖα Α κ+ 1 ..ϕ , σαυ 〉 ο τα νηαν χηυνγ ϖι νηαυ 〉 ε∑
χο τχη χυο〈ι χυνγ Α ι..ϕ . ∆ο 〉 ο πη το∑ν 〉 ε∑ τνη
τχη τ 〉 ονγ νγ οαχ το〈ι υ λα πη το∑ν 〉 ε∑ τνη
Α ι..κ , χο νγ πη το∑ν 〉 ε∑ τνη Α κ+ 1..ϕ , χο νγ πη
το∑ν 〉 ε∑ νηαν χηυνγ ϖι νηαυ.
13.9.2004
Ch. 1: Dynamic Programming
11
Bước 1: Cấu trúc của một đóng ngoặc
tối ưu (tiếp)
°
Χα〈υ τρυχ χον το〈ι υ
—
—
°
°
Đóng ngoặc của chuỗi con “tiền tố” Ai Ai+1 ⋅ ⋅ ⋅ Ak có
được từ đóng ngoặc tối ưu của Ai Ai+1 ⋅ ⋅ ⋅ Aj phải là
một đóng ngoặc tối ưu của Ai Ai+1 ⋅ ⋅ ⋅ Ak . (Chứng minh
bằng phản chứng).
Tương tự, đóng ngoặc của chuỗi con còn lại Ak+1 Ak+2 ⋅ ⋅ ⋅
Aj có được từ đóng ngoặc tối ưu của Ai Ai+1 ⋅ ⋅ ⋅ Aj phải
là một đóng ngoặc tối ưu của Ak+1 Ak+2 ⋅ ⋅ ⋅ Aj .
∇ ε∑ χηο γ ον, σε⌡ νοι “ πη το∑ν χυα µο τ
〉 ονγ νγ οαχ ” τηαψ ϖ νοι “ πη το∑ν 〉 ε∑ τνη
τχη τ µο τ 〉 ονγ νγ οαχ ” .
Ξαψ δνγ λι γ ιαι το〈ι υ
—
—
—
Chia bài toán thành hai bài toán con
Tìm lời giải tối ưu cho mỗi bài toán con
Kết hợp các lời giải tìm được ở trên.
Χα◊ν τµ ϖ∫ τρ τηχη ηπ ( τρ∫ χυα κ) 〉 ε∑
ταχη χηυοι µα τρα ν Α ι Α ι+ 1 ⋅ ⋅ ⋅ Α ϕ !
13.9.2004
Ch. 1: Dynamic Programming
12
Bước 2: Giải đệ quy
°
Βχ 2 χυα πηνγ πηαπ δψναµιχ προγ ραµµινγ
λα
—
°
°
đònh nghóa đệ quy phí tổn (trò) của một lời giải tối ưu
tùy theo các lời giải tối ưu của các bài toán con.
Βαι τοαν χον 〉 αψ : Ξαχ 〉 ∫ νη πη το∑ν το〈ι
τηιε∑υ χηο µο τ 〉 ονγ νγ οαχ χυα χηυοι µα
τρα ν Α ι Α ι+ 1⋅ ⋅ ⋅ Α ϕ ϖι 1 ≤ ι ≤ ϕ ≤ ν.
∇ ∫ νη νγ η⌠α µ[ι, ϕ] λα σο〈 πηεπ νηαν ϖο
ηνγ το〈ι τηιε∑υ 〉 ε∑ τνη µα τρα ν Α ι..ϕ .
Π ηαν βιε τ ηαι τρνγ ηπ:
—
nếu i = j thì Ai Ai+1⋅ ⋅ ⋅ Aj = Ai . Vậy, với i = 1,..., n,
m[i, i] = 0.
—
nếu i < j thì từ bước 1 ta có
m[i, j] = m[i, k] + m[k + 1, j] + pi−1 pk pj .
Nhưng trò của k?
13.9.2004
Ch. 1: Dynamic Programming
13
Bước 2: Giải đệ quy (tiếp)
Trả lời:
Bằng cách duyệt qua tất cả các trò của k, i
≤ k ≤ j − 1, ta tìm được
m[i, j] = mini ≤
pj}.
°
k ≤ j −1
{m[i, k] + m[k + 1, j] + pi−1 pk
∇ ε∑ γ ηι λαι χαχη ξαψ δνγ λι γ ιαι
το〈ι υ τα 〉 ∫ νη νγ η⌠α σ[ι, ϕ] λα τρ∫
χυα κ ξαχ 〉 ∫ νη νι ταχη χηυοι Α ι Α ι+ 1
⋅ ⋅ ⋅ Α ϕ 〉 ε∑ χο µο τ 〉 ονγ νγ οαχ το〈ι
υ. Νγ η⌠α λα σ[ι, ϕ] λα µο τ τρ∫ κ
σαο χηο
m[i, j] = m[i, k] + m[k + 1, j] + pi−1 pk pj .
13.9.2004
Ch. 1: Dynamic Programming
14
Bước 3: Tính các chi phí tối ưu
°
°
Βχ 3 χυα πηνγ πηαπ δψναµιχ
προγ ραµµινγ λα τνη χηι πη το〈ι υ
βανγ µο τ πηνγ πηαπ τ δι λεν
( βοττοµ−υπ) ϖα δυνγ βανγ .
Νηα ν ξετ:
—
13.9.2004
Có thể viết được ngay một giải thuật đệ quy
(dựa trên hàm đệ quy đã tìm được) để tính
phí tổn tối ưu m[1, n] cho tính tích A1A2 ⋅ ⋅ ⋅ An .
Nhưng sau này chúng ta sẽ thấy là giải
thuật này chạy trong thời gian lũy thừa.
Ch. 1: Dynamic Programming
15
Böôùc 3: Tính caùc chi phí toái öu (tieáp)
°
°
°
Μα τρα ν Α ι χο χηιε◊υ λα π ι−1 × π ι ,
ϖι ι = 1 , 2 ,..., ν .
Ινπυτ λα µο τ χηυοι π = < π 0 , π 1,...,
π ν M>ATRIX-CHAIN-ORDER(p)
1
n ← length[p] − 1
Γ ιαι
τηυα
ϖε◊ ηαι βανγ µ[1..ν,
2
for i ← 1τ toτρα
n
do m[i, 1..ν].
i] ← 0
1..ν]3 ϖα σ[1..ν,
4
5
6
7
8
9
10
11
12
13
13.9.2004
for l ← 2 to n
do for i ← 1 to n − l + 1
do j ← i + l − 1
m[i, j] ← ∞
for k ← i to j − 1
do q ← m[i, k] + m[k + 1, j] + pi−1 pk pj
if q < m[i, j]
then m[i, j] ← q
s[i, j] ← k
return m and s
Ch. 1: Dynamic Programming
16
Phaân tích MATRIX-CHAIN-ORDER
°
°
Τηι γ ιαν χηαψ χυα Μ Α ΤΡΙΞ −Χ ΗΑ ΙΝ −Ο Ρ∆ΕΡ
λα Ο( ν 3 ) .
Γ ιαι τηυα τ χα◊ν βο νη Θ( ν 2 ) χηο
χαχ βανγ µ ϖα σ.
13.9.2004
Ch. 1: Dynamic Programming
17
Chạy MATRIX-CHAIN-ORDER lên một ví dụ
ma trận
chiều
A1
30 × 35
A2
35 × 15
A3
15 × 5
A4
5 × 10
A5
10 × 20
A6
20 × 25
°
m µ ϖα σ τνη 〉 χ:
Χαχ βανγ
1
6
15,125
6
11,87510,500
j
9,375 7,125 5,375
15,750 2,625
0
A1
A6
13.9.2004
0
750
0
A2
1,000 5,000
0
A3
0
A4
3
3
1
2
6
1
1
3
j
i
7,875 4,375 2,500 3,500
1
s
3
3
2
i
3
3
3
3
5
4
5
5
0
A5
Ch. 1: Dynamic Programming
18
Bước 4: Xây dựng một lời giải tối ưu
°
°
Βανγ σ[1 ..ν, 1..ν] τρ⌡ µο τ χαχη 〉 ονγ νγ οαχ
το〈ι υ δο Μ Α ΤΡΙΞ −Χ ΗΑ ΙΝ −Ο Ρ∆Ε Ρ τµ ρα.
Τηυ τυχ σαυ, Μ Α ΤΡΙΞ −Χ ΗΑ ΙΝ −Μ ΥΛΤΙΠΛΨ , τρα ϖε◊ τχη
χυα χηυοι µα τρα ν Α ι..ϕ κηι χηο Α = 〈Α 1 , Α 2 ,
Α 3 ,..., Α ν 〉 , βανγ σ, ϖα χαχ χη σο〈 ι ϖα ϕ.
MATRIX-CHAIN-MULTIPLY(A, s, i, j)
1
if j > i
2
then X ← MATRIX-CHAIN-MULTIPLY(A, s, i, s[i, j])
3
Y ← MATRIX-CHAIN-MULTIPLY(A, s, s[i, j] + 1, j)
4
return MATRIX-MULTIPLY(X, Y)
5
else return Ai
°
Γ οι Μ Α ΤΡΙΞ −Χ ΗΑ ΙΝ −Μ ΥΛΤΙΠΛΨ ( Α , σ, 1, ν) 〉 ε∑ τνη τχη
χυα χηυοι µα τρα ν Α .
13.9.2004
Ch. 1: Dynamic Programming
19
°
Các yếu tố để áp dụng dynamic
programming
Η αι ψε〈υ το〈 〉 ε∑ απ δυνγ 〉 χ πηνγ
πηαπ δψναµιχ προγ ραµµινγ ϖαο µο τ
βαι τοαν το〈ι υ
—
—
13.9.2004
“Cấu trúc con tối ưu”
“Các bài toán con trùng nhau”.
Ch. 1: Dynamic Programming
20
Moọt lụứi giaỷi khoõng toỏi ửu
.
RECURSIVE-MATRIX-CHAIN(p, i, j)
1
if i = j
2
then return 0
3
m[i, j]
4
for k i to j 1
5
do q RECURSIVE-MATRIX-CHAIN(p, i, k)
+ RECURSIVE-MATRIX-CHAIN(p, k + 1, j) + pi1 pk pj
6
if q < m[i, j]
7
then m[i, j] q
8
return m[i, j]
13.9.2004
Ch. 1: Dynamic Programming
21
Phân tích RECURSIVE-MATRIX-CHAIN
°
Γ οι Τ( ν) λα τηι γ ιαν χηαψ χυα Ρ Ε ΧΥΡΣΙςΕ −
Μ Α ΤΡΙΞ −Χ Η Α ΙΝ ( π, 1 , ν) , τη Τ( ν) πηαι τηοα ( ξεµ
χοδε)
T (1) ≥ 1
n −1
T (n) ≥ 1 + ∑ (T (k ) + T (n − k ) + 1)
for n > 1.
k =1
°
Τ 〉 ο χηνγ µινη 〉 χ: Τ( ν) = Ω( 2 ν ) .
Ται σαο Ρ Ε ΧΥΡΣΙςΕ −Μ Α ΤΡΙΞ −Χ Η Α ΙΝ χηαψ τρονγ
τηι γ ιαν Ω( 2ν ) χον Μ Α ΤΡΙΞ −Χ Η Α ΙΝ −Ο Ρ∆Ε Ρ χη χα◊ν
τηι γ ιαν 〉 α τηχ? ∇ ο λα ϖ
—
—
RECURSIVE-MATRIX-CHAIN là giải thuật đệ quy từ trên
xuống (top-down) và không tận dụng được tính chất
“các bài toán con trùng nhau” (overlapping
subproblems).
MATRIX-CHAIN-ORDER là giải thuật dynamic-programming
từ dưới lên (bottom-up), tận dụng được tính chất
“các bài toán con trùng nhau”.
13.9.2004
Ch. 1: Dynamic Programming
22
Caây ñeä quy
°
Χαψ 〉 ε θυψ χηο Ρ ΕΧΥΡΣΙςΕ −Μ Α ΤΡΙΞ −
Χ ΗΑ ΙΝ ( π, 1, 4)
1..4
1..1
2..4
1..2
2..2
3..4
2..3
4..4
3..3
4..4
2..2
3..3
13.9.2004
1..1
2..2
3..4
3..3
4..4
Ch. 1: Dynamic Programming
1..3
4..4
1..1
2..3
1..2
3..3
2..2
3..3
1..1
2..2
23
°
Một biến dạng của dynamic programming:
memoization
Μεµοιζατιον λα πηνγ πηαπ τα ν
δυνγ τνη χηα〈τ “ χαχ βαι τοαν χον
τρυνγ νηαυ ” 〉 ε∑ χαι τιε〈ν γ ιαι τηυα τ
〉 ε θυψ τ τρεν ξυο〈νγ βανγ χαχη
—
sử dụng một bảng chung mà mỗi triệu gọi
của giải thuật đệ quy có thể truy cập để
°
°
13.9.2004
ghi kết quả sau khi giải một bài toán con
mới
đọc kết quả của một bài toán con đã
được giải rồi.
Ch. 1: Dynamic Programming
24
Memoize giaûi thuaät RECURSIVE-MATRIX-CHAIN
°
°
Μεµοιζε γ ιαι τηυα τ Ρ ΕΧΥΡΣΙςΕ −Μ Α ΤΡΙΞ −
Χ ΗΑ ΙΝ βανγ χαχη σ δυνγ βανγ µ[1..ν,
1..ν].
Μ ΕΜΟΙΖ Ε∆ −Μ Α ΤΡΙΞ −Χ ΗΑ ΙΝ χο ινπυτ λα µο τ
χηυοι π
= < -M
π 0ATRIX
, π-C
πν >
1 ,...,
MEMOIZED
HAIN(p)
1
2
3
4
5
13.9.2004
n ← length[p] − 1
for i ← 1 to n
do for j ← i to n
do m[i, j] ← ∞
return LOOKUP-CHAIN(p, 1, n)
Ch. 1: Dynamic Programming
25