Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 83 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
83
Dung lượng
1,86 MB
Nội dung
Ch ng Các k thu t thi t k gi i thu t N i dung Qui ho ch ng Gi i thu t tham lam Gi i thu t quay lui Qui ho ch ng Quy ho ch ng (dynamic programming) gi i toán b ng cách k t h p l i gi i c a toán c a toán ang xét Ph ng pháp kh d ng toán không c l p i v i nhau, t c toán có dùng chung nh ng toán “cháu” (subsubproblem) Qui ho ch ng gi i toán “cháu” dùng chung m t l n l u l i gi i c a chúng m t b ng sau ó kh i ph i tính l i g p l i toán cháu ó c áp d ng cho nh ng toán t i u Qui ho ch ng hóa (optimization problem) B nb c c a qui ho ch ng â d ng m t gi i thu t qui ho ch làm b n b c: ng có th c chia c tr ng hóa c u trúc c a l i gi i t i u nh ngh a giá tr c a l i gi i t i u m t cách Tính tr c a l i gi i t i u theo ki u t d quy i lên C u t o l i gi i t i u t nh ng thông tin ã toán c tính Thí d Nhân xâu ma tr n Cho m t chu i g m n matr n, ta mu n tính tích ma tr n A1 A2 … An (5.1) c g i m - óng-ngo c- yTích c a xâu ma tr n (fully parenthesized ) n u m t ma tr n n ho c tích c a hai xâu ma tr n m - óng-ngo c- y- c m - óng-ngo c- y- theo Thí d : A1 A2 A3 A4 có th cách: (A1(A2(A3A4))) (A1((A2A3)A4) ((A1A2)(A3A4)) (A1(A2A3))A4) (((A1A2)A3)A4) a m óng ngo c m t xâu ma tr n có nh h r t l n n chi phí tính tích xâu ma tr n ng Thí d : A1 10 100 A2 100 A3 50 (A1(A2A3)) th c hi n 10.000.5 + 10.5.50 = 5000 + 2500 = 7500 phép nhân vô h ng (A1(A2A3)) th c hi n 100.5.50 + 10.100.50 = 25000 + 50000 = 75000 phép nhân vô h ng Hai chi phí r t khác bi t Phát bi u toán nhân xâu ma tr n í í â '‘Cho m t chu i g m n matr n, v i m i i = 1, 2, …, n, ma tr n Ai có kích th c pi-1 pi, ta m - óngngo c tích cho t i thi u hóa t ng s phép nhân vô h ng” ây m t toán t i u hóa thu c lo i khó C u tr c c a m t cách m óng ngo c t i u c 1: c tr ng hóa c u trúc c a m t l i gi i t i u Dùng Ai j ký hi u ma tr n k t qu c a vi c tính Ai Ai+1…Aj M t s m óng ngo c t i u c a tích xâu ma tr n A1.A2… An Tách xâu t i v trí n m gi a Ak Ak+1 v i m t tr nguyên k, k < n Ngh a là, tr c tiên ta tính chu i ma tr n A1 k and Ak+1 n r i nhân chúng v i cho A1.n Chi phí c a s m óng ngo c t i u = chi phí tính Al k + chí phí tính Ak+1 n, + chi phí nhân chúng l i v i Di n t l i gi i m t cách quy â , nh ng toán c a ta toán xác nh chi phí t i u ng v i s m óng ngo c cho chu i Ai.Ai+1… Aj v i i j n t m[i, j] t ng s t i thi u phép nhân vô h ng c òi h i tính ma tr n Ai j Chi phí c a cách r nh t tính c ghi m[1, n] A1 n s Gi s r ng s m óng ngo c t i u t ch i tích chu i Ai Ai+l… Aj t i gi a Ak and Ak+l, v i i k < j Thì m[i, j] b ng v i chí phí t i thi u tính Ai k Ak+1 j, c ng v i chi phí nhân hai ma tr n l i v i m[i, j] = m[i, k] + m[k+1, j] + pi-1pkpj M t c ng th c quy v y, nh ngh a quy cho chi phí t i thi u c a m t s m óng ngo c cho Ai Ai+l… Aj nh sau: m[i, j] = n u i = j, = {m[i, k] + m[k + 1, j] + pi-1pkpj.} n u i < j giúp theo dõi cách t o m t l i gi i t i u, ngh a: (5.2) nh s[i, j]: tr c a k t i ó tách tích xâu ma tr n t n m t s m óng ngo c t i u AiAi+1…Aj 10 procedure (i: integer); begin initialize selection of positions for i-th queen; repeat make next selection; if safe then begin setqueen; if i < then begin try (i + 1); if not successful then remove queen end end until successful ∨ no more positions end 69 Lu t c : M t h u có th t n công h u khác n m ng chéo bàn c m t hàng, m t c t Cách bi u di n d li u Làm cách var di n t h u bàn c ? array 8] of integer; a: array[1 8] of Boolean; b: array[b1 b2] of Boolean; c: array[c1 c2] of Boolean; v i x[i] ch v trí c a h u c t th i; a[j] cho bi t h u hàng th j; b[k] cho bi t h u ng chéo th k; c[k] cho bi t h u ng chéo th k 70 Vi c ch n tr cho m c b1, b2, c1, c2 c xác nh b i cách mà ch s c a m ng b c c tính ng chéo chi u t t Hãy ý r ng m t c ô s có giá tr c a t ng hai t a i +j, m t ng chép chi u diagonal, t t c ô s có giá tr c a hi u hai t a (i j ) Nh v y, phát bi u setqueen c tinh ch nh sau: a[j]:=false; b[i+j]:=false;c[i-j]:=false; Phát bi u removequeen c chi ti t hóa nh sau: a[j] = true; b[i+j] = true ; c[i-j] := true i u ki n safe c di n t nh sau: a[j] ∧ b[i+j] ∧ c[i-j] 71 program ( olution to eight queens problem} var i : integer; q: boolean; a : array [1 8] of boolean; b : array [2 16] of boolean; c : array [–7 7] of boolean; x : array [1 8] of integer; procedure try(i: integer; var q: boolean); var j: integer; begin j:=0; repeat j:=j+1; q:=false; if a[j] ∧ b[i+j] ∧ c[i-j] then begin x[i]:=j; a[j]:=false; b[i+j]:=false; c[i-j]:=false; if i[...]... ính tích xâu ma tr n ch cho i < j, ch ph n c a b ng m ng chéo chính m i c dùng Cho các ma tr n v i kích th A1 30 35 A2 35 15 A3 15 5 A4 5 10 A5 10 20 A6 20 25 c nh sau: Hình 5. 1 trình bày b ng m và s c tính b i th t c MATRIX-CHAIN-ORDER v i n = 6 14 M t thí d v tính tích xâu ma trân M ng m 6 5 j 4 3 2 1 i 1 2 3 4 151 5 1 050 0 51 0 50 0 1000 118 75 71 7 75 750 0 78 75 0 157 50 0 0 5 5000 0 M ng s H nh 5. 1... 118 75 71 7 75 750 0 78 75 0 157 50 0 0 5 5000 0 M ng s H nh 5. 1 1 6 5 j 4 3 2 6 0 2 i 3 4 5 4 5 5 1 1 15 M t thí d v tính tích xâu ma trân m[2,2] + m[3 ,5] + p.p2p5 = 0 + 250 0 + 35. 15. 20 = 13000 2 ,5] = min m[2,3] + m[4 ,5] + p1p2p5 = 26 25 +100 + 35. 5.30 = 71 25 m[2,4] + m[5m5] + p p p = 43 75 + 0 + 35. 10.20 = 113 75 1 4 5 = 71 25 k = 3 for A2 5 B c 4 c a ph ng pháp qui ho ch ng là t o m t l i gi i t i u... best[k] j =5 cost[k] best[k] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0 0 4 4 4 8 8 8 12 12 12 16 16 16 20 20 20 A A A A A A A A A A A A A A A 0 0 4 5 5 8 9 10 12 13 14 16 17 18 20 21 22 A B B A B B A B B A B B A B B 0 0 4 5 5 8 10 10 12 14 15 16 18 18 20 22 24 A B B A C B A C C A C C A C C 0 0 4 5 5 8 10 11 12 14 15 16 18 20 21 22 24 A B B A C D A C C A C C D C C 0 0 4 5 5 8 10 11 13 14 15 17 18 20... x2, …, xm> và Y = là nh ng chu i, và Z = là LCS c a X và Y 1 N u xm = yn thì zk = xm = yn và Zk-1 là LCS c a Xm-1 và Yn-1 2 N u xm yn, thì zk xm hàm ý Z là LCS c a Xm-1 và Y 3 N u xm yn, thì zk yn hàm ý Z là LCS c a X và Yn-1 22 L i gi i quy ì m t LCS c a X và Y, ta có th c n tìm LCS c a X và Yn-1 và LCS c a Xm-1 và Y Nh ng m i trong hai bài toán tìm Xm-1 và Yn-1 con... 5, 7> Cho hai chu i X và Y, ta b o Z là chu i con chung (common subsequence) c a X và Y n u Z là m t chu i con c a c hai chu i X và Y Trong bài toán chu i con chung dài nh t, ta c cho hai chu i X = và Y = và mu n tìm chu i con chung dài nh t (LCS) c a X và Y 21 Ti u c u trúc t i chung dài nh t í u c a bài toán chu i con : X = và Y = 0 và xi = yj max(c[i, j-1],c[i-1,j]) n u i,j >0 và xi yj (5. 3) 23 Tính chi u dài c a m t LCS à trình (5. 3), ta có th vi t m t gi i thu t quy tìm chi u dài c a m t... lúc M i ho t ng i có th i i m b t u si và m t th i i m k t c l a ch n, ho t ng i di n ra thúc fi, mà si fi N u trong th i kho ng [si, fi) Ho t ng i và j là t ng thích n u th i kho ng [si, fi) và [sj, fj) không ph l p lên nhau (t c là, i và j là t ng thích n u si >= fj hay sj >= fi) Bài toán x p l ch các ho t ng là ch n ra m t chu i các ho t ng t ng thích v i nhau và có s ho t ng nhi u nh t 34 Gi i thu... cái túi napsac '‘M t k tr m t nh p vào m t c a hi u tìm th y có n m t hàng có tr ng l ng và giá tr khác nhau, nh ng y ch mang theo m t cái túi có s c ch a v tr ng l ng t i a là M Bài toán cái túi là tìm m t t h p các m t hàng mà k tr m nên b vào cái túi t m t giá tr cao nh t v i nh ng món hàng mà y mang i.” Bài toán này có th gi i b ng qui ho ch dùng hai b ng cost và best sau ây: ng b ng cách cost[i]... c n t d i lên Gi s ma tr n Ai có kích th c pi-1 pi v i i = 1, 2 , , n u vào là chu i tr s Th t c dùng m t b ng m[1 n, 1 n] l u các chi phí m[i, j] và b ng s[1 n, 1 n] l u giá tr nào c a v trí k mà th c c chi phí t i u khi tính m[i, j] hi n Th t c MATRIX-CHAIN-ORDER tr v hai m ng m và s 12 Th t c tính hai b ng m và s procedure MATRIX-CHAIN-ORDER(p, m, s); begin n:= length[p] - 1; for ... tính tích xâu ma trân M ng m j i 151 1 050 0 51 50 0 1000 118 75 71 75 750 78 75 157 50 0 50 00 M ng s H nh 5. 1 j i 5 1 15 M t thí d v tính tích xâu ma trân m[2,2] + m[3 ,5] + p.p2p5 = + 250 0 + 35. 15. 20... tính tích xâu ma tr n ng Thí d : A1 10 100 A2 100 A3 50 (A1(A2A3)) th c hi n 10.000 .5 + 10 .5. 50 = 50 00 + 250 0 = 750 0 phép nhân vô h ng (A1(A2A3)) th c hi n 100 .5. 50 + 10.100 .50 = 250 00 + 50 000... p.p2p5 = + 250 0 + 35. 15. 20 = 13000 2 ,5] = m[2,3] + m[4 ,5] + p1p2p5 = 26 25 +100 + 35. 5.30 = 71 25 m[2,4] + m[5m5] + p p p = 43 75 + + 35. 10.20 = 113 75 = 71 25 k = for A2 B c c a ph ng pháp qui