1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Chương 5: Các kỹ thuật thiết kế giải thuật

83 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

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

Ngày đăng: 11/05/2021, 04:15

TỪ KHÓA LIÊN QUAN