ng - Presentation Transcript

ng (Dynamic Programming)

độ ng III: Qui ho ch

ạ độ

i b ng ph ng pháp quy ho ch ng ng pháp th c hi n ệ i u gi ươ ạ độ ả ằ

i u v m t th i gian/không gian nh . quy có th không t ể ố ư ề ặ ờ ớ th n c a dãy s Fibonaci i thu t ậ đệ ủ ố ụ

ớ Độ c l p! S l n g i c n tính F(n) là s l n g i ph c t p: O(a n ) v i a c tính m t cách ộ ứ ạ đượ độ ậ ọ ầ để ố ầ ố ầ ọ để ộ tính F(n-1) c ng

vi c phân tích quy: th c hi n bài toán t ệ ự ừ ệ ở ứ m c cao xu ng m c th p. ố ứ ấ

Quy ho ch Ch ươ i thi u Gi ệ ớ Ph ự ươ M t s bài toán t ộ ố ố ư i thi u 1. Gi ệ ớ Vi c th c hi n m t gi ả ộ ệ ự ệ Ví d : Tính ph n t ầ ử ứ Function F(n: integer): integer; 2 then F:=1 Begin If n else F:= F(n-1)+F(n-2); End; 1.61803 ... Do F(n-1) và F(n-2) v i s l n g i ớ ố ầ i m c a l c Đặ đ ể

tính F(n-2). i i gi ả đệ ọ để ủ ờ

m c th p lên m c cao ta có gi i quy t bài toán này t ứ ả i thu t sau: ậ ả ấ ế ừ ứ

i bài toán theo ph ả ế c l u l ươ i và quy t m c cao h n. N u gi ế Function F(n: integer): integer; var i: integer; a: array[1..100] of integer; Begin a[1]:=1; a[2]:=1; For i:=3 to n do a[i]:=a[i-1]+a[i-2]; F:= a[i]; End; ph c t p: O(n) Độ ứ ạ i m c a l c i gi Đặ đ ể ủ ờ i c a chúng i gi c, l tr ả ủ ờ ướ đượ ư ạ ng pháp quy ho ch c s d ng đượ ử ụ ạ để ng: gi độ i gi tìm l ờ i quy t bài toán ả i c a các bài toán ả ủ đệ ở ứ m c th p ấ ừ ứ ơ

ng pháp ươ tr ” để ị ư ưở ử ụ ướ ạ ụ ệ ệ ổ ợ h p các nghi m c a các bài toán con ủ ằ đượ i u hoá r i r c c b ng vi c t ờ ạ ng pháp: i u. i u c a các l a ch n thì m t dãy con c a nó c ng là t ộ ủ ủ ũ ọ ố ư ộ ự ố ư ệ i d ng m t bài toán nhi u m c) ề ứ ng pháp th c hi n ễ i pháp ộ quy (l p công th c truy h i) ể đệ ướ ạ ứ ồ tính toán các giá tr theo ki u d ể ướ i gi ị i cho bài toán t ả ừ ậ ổ ả ế ạ i-lên) các thông tin ã tính toán) đ

đệ tính: a[i] = F(i). v i i = 1..n . quy: F(n) = F(n-1)+F(n-2) ử ụ để ề ả ớ

ớ ế ả

h p ch p k c a n ổ ợ ự t k<=n} thi ế đệ tính: i pháp ả ả ộ để

T t ng c a ph ủ S d ng nguyên lý: “chia Cách ti p c n: “d i-lên” ậ ế Ph m vi áp d ng Các bài toán có Các bài toán t ố ư Nguyên lý c a ph ươ ủ Nguyên lý t i u c a Bellman: Trong m t dãy t ủ ố ư 2. Ph ự ươ Phân tích bài toán (bi u di n bài toán d Xây d ng gi ả ậ ự L p b ng (s d ng các m ng để ử ụ ả T ng h p k t qu (ki n t o m t l ợ ộ ờ ả ế Xét ví d trên ụ Phân tích bài toán: Xây d ng hàm: Function F(n: integer): integer; i pháp Gi ả L p b ng: S d ng m ng 1 chi u a (array[1..max] of integer) ậ ả C th : ụ ể a[1] = a[2] = 1, và: a[i] = a[i-1] + a[i-2]; v i i = 3..n, T ng h p k t qu : F(n) = a[n]; ợ ổ ph c t p tính toán: O(n) Độ ứ ạ Ví d tính C(k,n): t ủ ậ ụ Phân tích bài toán: Xây d ng hàm: Function C(k, n: byte): longint; {gi ả quy: C(k,n) = C(k-1,n-1) + C(k,n-1) Gi ả L p b ng: S d ng m t m ng 2 chi u a (array[0..max,0..max] of longint) ử ụ ề ậ a[i,j] = C(i,j), v i i = 0..k , j = i..n ớ i j và a[i,i] = 1, C th : a[0,j] = 1, ụ ể c l ng i: a[i,j] = a[i-1,j-1] + a[i,j-1] ượ ạ T ng h p k t qu : C(k,n) = a[k,n] ả ợ ổ ế

ph c t p tính toán: O(k.n) ng i u gi i b ng ph ng pháp quy ho ch ạ độ ươ ố ư ả ằ

ậ ổ ợ h p nhi u ma tr n ề

v t có kích th c và giá tr khác nhau. C th : ị ộ ụ ể ạ đồ ậ ướ v t i (i=1..n) có: - kích c m[i] ỡ

ạ đồ ậ ẽ v t s ộ ộ ỡ cho t ng giá tr l y c p ổ ế ớ ắ đượ ộ ị ấ t giá tr c c ị ự đạ ạ p và i ứ đạ ấ ớ ứ ầ ầ T c: Tìm x[1], x[2],..., x[n] (v i x[i] x[i].c[i]

ớ ọ ế ế r v t khác nhau ậ s u là P (p, n) )

i ị ự đạ i u c n l y (t c: x[s]) c a bài toán P (r, s) ủ ố ư ầ ấ ạ đồ ậ ủ l[r,s]: giá tr c c ứ

ế ậ ả

ph c t p tính toán: O(np 2 ) ế ả ứ ạ ợ ế

ph c t p tính toán: O(n) ứ ạ h p nhi u ma tr n ề ổ ợ ậ

ấ ứ ự ự i thi u. ể ệ ố ố

ố M 2 ) ( M 1 ố

ứ ạ Độ 3. M t s bài toán t ộ ố Chi c túi xách ế Phép nhân t Các bài t p ậ Bài toán chi c túi xách ế M t cái kho ch a n lo i ứ N* Lo i ạ đồ ậ R - gía tr c[i] ị ng: không h n ch - s l ố ượ ế ọ ự ự M t tên tr m mang theo chi c túi có kích c là p m t danh sách các N*. V y h n ph i ch n l a ả ắ ậ c là l n nh t. i nh th nào mang để đ ư ế ng lo i N : s l v t th i c n ạ đồ ậ ố ượ x[i].m[i] x l y) sao cho: ấ Bài toán chi c túi xách ế Phân tích bài toán: G i P (r, s) là bài toán chi c túi xách, v i: N*: kích c chi c túi ế ỡ N*: s các lo i ạ đồ ậ ố (bài toán ban đầ Các giá tr c n tìm: ị ầ x[i].c[i] c a bài toán P (r, s) ủ ng lo i u[r,s]: s l v t s t ố ượ Bài toán chi c túi xách P (r, s) ế Gi quy: i pháp đệ Khi s = 1: u[r, 1] = r div m[1] c[1] l[r, 1] = u[r, 1] Khi s > 1: m[s], s-1] } c[s] + l[r – k l[r, s] = max { k r div m[s] k 0 m[s], s-1] c[s] + l[r – k’ = k’ u[r, s] = k’ L p b ng (Bài toán chi c túi xách) Procedure LapBang; Begin For r:=0 to p do For s:=1 to n do If s=1 then Tính u[r, 1] và l[r, 1] else Tính u[r, s] và l[r, s]; End; Độ T ng h p k t qu (Bài toán chi c túi xách) ổ Procedure TongHop; Begin r:=p; For s:=n downto 1 do begin x[s]:= u[r,s]; r:= r – x[s].m[s]; end; End; Độ Bài toán Phép nhân t M n ... M 2 C n tính M = M 1 ầ m[i] (i=1..n) Trong ó: M i là ma tr n c p m[i-1] đ ậ Hãy xác nh th t th c hi n các phép nhân sao cho s phép tính là t đị M 3 M 2 Ví d : Tính M = M 1 ụ 5] 50] [50 20] [20 [10 M 3 có s phép toán là: 5 = 12500 50 50 + 1 0 20 10 M 3 ) có s phép toán là: ố ( M 2 M 1 ố

ậ ổ ợ h p nhi u ma tr n ề

ọ ậ u là P (1, n) )

ố ủ ự

i u c a bài toán P (r, s) ố ố ư ậ ủ h p nhi u ma tr n ề ổ ợ quy:

ả ườ ườ

ng h p 3: Khi s > r+1: ợ ườ

ị ố ệ ự

i u trong s các v trí c a v) ị ị ố ủ ố ư

ậ ể ườ ườ ả ậ ng h p 3! ợ ậ ng h p 2 vào tr ề ợ h p nhi u ma tr n) ổ ợ

h p nhi u ma tr n) ph c t p tính toán: O(n 3 ) ả ứ ạ ợ ổ ợ ề ế ậ

i thi u:’, l[1, n]); phép tính là t ể ố ố

ầ ượ đị ự ằ ầ ứ t xác nh các giá tr x[i]: v trí phép nhân c n th c hi n trong l n nhân th i ệ ầ ị ị

th c hi n các phép nhân :’); ệ

c xây d ng quy nh sau: ư đượ ủ ụ đệ đ ự

t r ng: ế ằ

c b ng cách xoá i m t s ký t i: S là xâu trong c a T n u S nh n ủ ậ đượ ế ằ đ ộ ố ự nào ó. Ví đ ự đạ ủ ụ i. ủ ộ độ dài c c ự đạ i. 5 = 6000 50 5 + 2 0 20 10 Phép nhân t Phân tích bài toán: s M s , v i r ớ ớ ... M r+1 G i P (r, s) là bài toán nhân ma tr n: M r (bài toán ban đầ Giá tr c n tìm: ị ầ k[r,s]: v trí phép toán th c hi n cu i cùng c a bài toán P (r, s) ệ ị M s ) ... M k+1 ( M k M k-1 ) ... M r+1 (M r [r+1, s] k = k[r,s] l[r, s]: s phép tính nhân t Phép nhân t i pháp Gi đệ ng h p 1: Khi s = r : l[r, r] = 0 Tr ợ Tr ng h p 2: Khi s = r+1: ợ m[r+1] m[r] l[r, r+1] = m[r-1] k[r, r+1] = r+1 Tr m[s] + l[v, s] } m[v-1] l[r, s] = min { l[r, v-1] + m[r-1] s v r+1 (v là các v trí phép toán th c hi n cu i cùng khác nhau) m[s] + l[v’, s] m[v’-1] = l[r, v’-1 ] + m[r-1] (v’ là v trí t k[r, s] = v’ Nh n xét : Có th ghép tr L p b ng (Bài toán phép nhân t Procedure LapBang; Begin For s:=1 to n do For r:=s downto 1 do If r = s then l[r, r] := 0 else Tính l[r, s] và k[r, s]; End; Độ T ng h p k t qu (Bài toán phép nhân t ổ Procedure TongHop; Begin writeln(‘S i:=n; TimVT(1, n); {Nh m l n l (i=1..n-1)} writeln(‘ Th t ứ ự ự For i:=1 to n-1 do writeln(x[i]); End; Trong ó th t c TimVT Procedure TimVT(r, s); Begin i:=i-1; vt:= k[r, s]; x[i]:= vt; If (vt > r+1) and (vt < s) then begin TimVT(r, vt-1); TimVT(vt, s); end; End; Bài t p ậ 1. Tính giá tr xác su t P(i, j) (i, j: byte). Bi ấ ị P(i, j) = 1 n u i=0 và j>0 ế = (P(i-1, j)+ P(i, j-1))/2 n u i>0 và j>0 ế = 0 n u ng c l i ượ ạ ế Bài toán xâu trong c c d : ‘ABC’ là xâu trong c a ‘GAHEBOOC’ Bài toán: Cho 2 xâu T1, T2. Tìm m t xâu S là xâu trong chung c a T1 và T2 có Ví d : T1=‘ABCDAE’ và T2=‘XYACADK’ có xâu ‘ACD’ là xâu trong chung v i ớ độ ụ dài c c ự đạ

i t thành ph 0 i ộ ố đế i ườ đ ừ n thành ph n và có th ố ể đ đ i k i 2 ….. i 1 qua n-1 ộ ủ ố n thành ph j là c[i,j]. Tìm m t l đ thành ph 0 trình t ố trình : 0 n, t rong ó: 0 < i 1 < i 2 < …< i k < n, Giá vé c a xe ộ ộ thành i t đ ừ n thành ph n sao cho t ng chi phí v giá vé ề ố đế ừ ố ổ

ủ ệ ế i m là a[i,j]. Gi ôn thi n môn. Theo kinh nghi m c a anh ta, n u ôn ế ả ử ớ để s cho bi tđạ ạ Tìm b x[j] (s ngày ôn môn j, v i j=1..n) sao cho max). t các a[i,j] (v i a[i,j]<=a[i+1,j]). ớ ớ a[x[j], j] t ng ớ i m l n đ ể ổ ố Bài toán du l ch: M t ng ị thành ph khác 1, 2,..., n-1 , theo l ph i ố đế t c c ti u. đạ ự ể Bài toán sinh viên ôn thi: M t sinh viên còn m ngày ộ c môn j trong i ngày thì đượ đ ể x[j]=n và sinh viên ộ nh t ( ấ