Bài giảng Chương 5: Các kỹ thuật thiết kế giải thuật giới thiệu tới các bạn những nội dung về quy hoạch động; giải thuật tham lam; giải thuật quay lui. Bài giảng phục vụ cho các bạn chuyên ngành Công nghệ thông tin và những bạn quan tâm tới lĩnh vực này.
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 c c 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 c a b#i to n ang x%t Ph ng ph p n#y kh d ng c c b#i to n kh'ng c l p i v i nhau, t c l# c c b#i to n c* d+ng chung nh ng b#i to n -ch u (subsubproblem) Qui ho ch ng gi i c c b#i to n -ch u d+ng chung n#y m t l n v# l u l i gi i c a ch/ng m t b ng v# sau * kh i ph i t0nh l i g p l i b#i to n ch u * c p d ng cho nh ng b#i 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 T0nh tr c a l i gi i t i u theo ki u t d quy i l2n C u t o l i gi i t i u t nh ng th'ng tin to n c t0nh Th# d Nh$n x$u ma tr n Cho m t chu i g m n matr n, v# ta mu n t0nh t0ch c c ma tr n A1 A2 An (5.1) c g i l# m - ng-ngo c- yT0ch c a x1u ma tr n n#y (fully parenthesized ) n u n* l# m t ma tr n n ho c l# t0ch c a hai x1u ma tr n m - *ng-ngo c- y- c m - *ng-ngo c- y- theo Th0 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 x1u ma tr n c* nh h r t l n n chi ph0 t0nh t0ch x1u ma tr n ng Th0 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 nh1n v' h ng (A1(A2A3)) th c hi n 100.5.50 + 10.100.50 = 25000 + 50000 = 75000 ph%p nh1n v' h ng Hai chi ph0 tr2n r t kh c bi t Ph t bi u b&i to n nh$n x$u ma tr n # 0 '6Cho m t chu i g m n matr n, v i m i i = 1, 2, 5, n, ma tr n Ai c* k0ch th c pi-1 pi, ta m - *ngngo c t0ch n#y cho t i thi u h*a t ng s ph%p nh1n v' h ng 1y l# m t b#i 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 k7 hi u ma tr n k t qu c a vi c t0nh Ai Ai+15Aj M t s m *ng ngo c t i u c a t0ch x1u ma tr n A1.A25 An T ch x1u t i v tr0 n m gi a Ak v# Ak+1 v i m t tr nguy2n k, k < n Ngh a l#, tr c ti2n ta t0nh c c chu i ma tr n A1 k and Ak+1 n v# r i nh1n ch/ng v i cho A1.n Chi ph0 c a s m *ng ngo c t i u n#y = chi ph0 t0nh Al k + ch0 ph0 t0nh Ak+1 n, + chi ph0 nh1n ch/ng l i v i Di n t l i gi i m t c ch quy , nh ng b#i to n c a ta l# b#i to n x c nh chi ph0 t i u ng v i s m *ng ngo c cho chu i Ai.Ai+15 Aj v i i j n t m[i, j] l# t ng s t i thi u c c ph%p nh1n v' h ng c 9i h i t0nh ma tr n Ai j Chi ph0 c a c ch r nh t t0nh c ghi m[1, n] A1 n s Gi s r ng s m *ng ngo c t i u t ch i t0ch chu i Ai Ai+l5 Aj t i gi a Ak and Ak+l, v i i k < j Th: m[i, j] b ng v i ch0 ph0 t i thi u t0nh Ai k v# Ak+1 j, c ng v i chi ph0 nh1n hai ma tr n n#y 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 ph0 t i thi u c a m t s m *ng ngo c cho Ai Ai+l5 Aj l# 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, h3y ngh a: (5.2) nh s[i, j]: tr c a k t i * ch/ng ta t ch t0ch x1u ma tr n t n m t s m *ng ngo c t i u AiAi+15Aj 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 c#c h u kh#c n m tr(n ng ch1o tr(n b+n c c/ng m t h+ng, c/ng m t c t hay l+ c/ng C ch bi u di n d li u L#m c ch n#o var di n t h u tr2n 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 tr0 c a h u tr2n c t th i; a[j] cho bi t kh'ng c* h u tr2n h#ng th j; b[k] cho bi t kh'ng c* h u tr2n ng ch%o th k; c[k] cho bi t kh'ng c* h u tr2n ng ch%o th k 70 Vi c ch n tr cho c c m c b1, b2, c1, c2 c x c nh b i c ch m# c c ch s c a c c m ng b v# c c t0nh ng ch%o chi u t t H3y ch/ r ng tr2n c+ng m t c c c ' s c* c+ng gi tr c a t ng hai t a i +j, v# tr2n c+ng m t ng ch%p chi u diagonal, t t c c c ' s c* c+ng 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] 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