1. Trang chủ
  2. » Giáo án - Bài giảng

phân tích va thiết kế giải thuật dương tuấn anh chương 4 chiến lược biến thể để trị(transform and conquer) sinhvienzone com

36 82 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 36
Dung lượng 377,24 KB

Nội dung

om nh Vi en Zo ne C Chương Si Chiến lược biến thể-để-trị (transform-and-conquer) SinhVienZone.com https://fb.com/sinhvienzonevn   C ne Zo  nh Vi en  Chiến lược Biến thể-để-trị Giải thuật Gauss để giải hệ phương trình tuyến tính Cấu trúc heap heapsort Giải thuật Horner để định trị đa thức So trùng dòng ký tự giải thuật RabinKarp Si  om Nội dung SinhVienZone.com https://fb.com/sinhvienzonevn Có nhiều biến dạng bước 1:    nh Vi en  ne  Bước bước biến thể, thể toán biến đổi để chuyển sang dạng dễ dẫn đến lời giải Bước bước tìm lời giải cho toán Zo  C Kỹ thuật biến thể-để-trị thường làm việc theo hai bước Biến thể để đưa đến thể đơn giản toán (đơn giản hóa thể -instance simplification) Biến thể để đưa đến biểu diễn khác toán (biến đổi biểu diễn -representation change) Biến thể để đưa đến thể toán khác mà có tồn giải thuật (thu giảm tốn - problem reduction) Si  om 1.Biến thể để trị (transform-and-conquer) SinhVienZone.com https://fb.com/sinhvienzonevn  om Giải thuật Gauss để giải hệ phương trình tuyến tính Cho hệ phương trình gồm n phương trình với n ẩn số ne C a11x1 + a12x2 + … + a1nxn = b1 a21x1 + a22x2 + … + a2nxn = b2 an1x1 + an2x2 + … + annxn = bn Si  Để giải hệ phương trình trên, ta dùng giải thuật loại trừ Gauss (Gauss elimination) Ý tưởng giải thuật : biến đổi hệ thống n phương trình tuyến tính với n biến thành hệ thống tương đương (tức có lời giải hệ phương trình ban đầu) với ma trận tam giác (một ma trận với hệ số zero đường chéo chính) Giải thuật Gauss thể tinh thần chiến lược biến thểđể-trị theo kiểu “đơn giản hóa thể hiện” (instance simplification) nh Vi en  Zo ; ;  SinhVienZone.com https://fb.com/sinhvienzonevn a11x1 + a12x2 + … + a1nxn = b1 a21x1 + a22x2 + … + a2nxn = b2 a’11x1 + a’12x2 + … + a’1nxn = b’1 a’22x2 + … + a’2nxn = b’2 om ; ; a’nnxn = b’n ne C an1x1 + an2x2 + … + annxn = bn - - Hoán vị hai phương trình hệ thống Thay phương trình phương trình nhân với hệ số Thay phương trình với tổng hay hiệu phương trình với phương trình khác nhân hệ số Si - nh Vi en Zo Làm cách để ta chuyển hệ thống với ma trận A thành hệ thống tương đương với ma trận tam giác A’? Bằng loạt phép biến đổi sau: SinhVienZone.com https://fb.com/sinhvienzonevn Thí dụ C om 2x1 – x2 + x3 =1 4x1 + x2 – x3 = x1 + x2 + x3 = -1 1 -2 1 Zo ne row – (4/2) row row – (1/2) row 1 -2 row – (1/2) row Si -1 -3 0 nh Vi en -1 1 -3 3/2 ½ -1/2 SinhVienZone.com x3 = (-2/2)=1; x2 = (3-(-3)x3/3 = 0; x1 = (1-x3 – (-1)x2)/2 = https://fb.com/sinhvienzonevn Giải thuật Gauss nh Vi en Zo ne C om GaussElimination(A[1 n,1 n],b[1 n]) for i := to n A[i,n+1] := b[i]; for i := to n -1 for j := i + to n for k:= i to n+1 A[j,k] := A[j,k]-A[i,k]*A[j,i]/A[i,i]; Si Lưu ý: Vector cột b gom vào thành cột thứ n+1 ma trận A Trở ngại: Khi A[i,i] = 0, giải thuật không làm việc Và |A[i,i]| nhỏ, giải thuật bị sai số làm tròn máy tính tính tốn (round-off-error) gây ảnh hưởng xấu, làm cho tính tốn trở nên khơng xác SinhVienZone.com https://fb.com/sinhvienzonevn Giải thuật Gauss cải tiến nh Vi en Zo ne C om Để tránh trường hợp |A[i,i]| nhỏ nêu trên, ta áp dụng kỹ thuật tìm phần tử chốt bán phần (partial pivoting) mô tả sau: “Tại lượt lặp thứ i vòng lặp ngồi, ta cần tìm hàng có hệ số cột thứ i mang giá trị tuyệt đối lớn hoán đổi hàng với hàng i dùng hệ số phần tử chốt lượt lặp thứ i” Si  SinhVienZone.com https://fb.com/sinhvienzonevn om Giải thuật Gauss cải tiến Si nh Vi en Zo ne C BetterGaussElimination(A[1 n,1 n],b[1 n]) for i := to n A[i,n+1] := b[i]; for i := to n -1 pivotrow := i; for j := i+1 to n if |A[j,i]| > |A[pivotrow,i]| then pivotrow:= j; for k:= i to n+1 swap(A[i,k], A[pivotrow,k]); for j := i + to n temp:= A[j,i]/A[i,i]; for k:= i to n+1 A[j,k] := A[j,k]-A[i,k]*temp; SinhVienZone.com https://fb.com/sinhvienzonevn Độ phức tạp giải thuật Gauss C(n) = n i=1 n-1 j=i+1(n+1-i+1) = n i=1 n-1 C n-1 j=i+1(n+2-i) om n-1 n-1 j=1(j+2)j = + j j=1 nh Vi en = n-1 Zo ne = i=1 (n+2-i)(n-(i+1)+1) = i=1 (n+2-i)(n-i) = (n+1)(n-1)+n(n-2)+ +3.1 n-1 j=1 2j Si = (n-1)n(2n-1)/6 + 2(n-1)n/2 = n(n-1)(2n+5)/6 n3/3 = O(n3) Sau dùng giải thuật Gauss để đưa ma trận dạng ma trận tam giác trên, ta dùng phương pháp thay lùi (backward subsitution) để tính giá trị ẩn SinhVienZone.com https://fb.com/sinhvienzonevn 10 Thí dụ tác vụ xóa M Si nh Vi en Zo ne C om Trước xóa Sau xóa SinhVienZone.com https://fb.com/sinhvienzonevn 22 om Độ phức tạp tác vụ heap Zo ne C Tính chất 3.1: Mọi tác vụ thêm vào, xóa bỏ, downheap, upheap đòi hỏi 2lgN so sánh thực heap gồm N phần tử nh Vi en Tất tác vụ phải dọc theo lối nút rễ cuối heap mà bao gồm lgN phần tử với heap gồm N phần tử Si Thừa số tác vụ downheap xóa bỏ mà cần hai thao tác so sánh vòng lặp thao tác khác đòi hỏi lgN lần so sánh SinhVienZone.com https://fb.com/sinhvienzonevn 23 Giải thuật heapsort nh Vi en Zo ne C om Ý tưởng: Giải thuật bao gồm công tác (1) tạo heap chứa phần tử cần thứ tự (2) lấy chúng khỏi heap theo thứ tự M : kích thước heap N: số phần tử cần thứ tự Si N:=0; for k:= to M insert(a[k]); /* construct the heap */ for k:= M downto a[k]:= remove; /*putting the element removed into the array a */ SinhVienZone.com https://fb.com/sinhvienzonevn 24 Độ phức tạp heap sort om Tính chất: Heapsort dùng 3MlgM lần so sánh để thứ tự M phần tử Si nh Vi en Zo ne C Giới hạn xuất phát từ giải thuật heapsort tính chất hai tác vụ thêm vào/xóa bỏ heap Vòng for thứ tốn MlgM lần so sánh Vòng for thứ hai tốn 2MlgM lần so sánh Tổng cọng: MlgM + 2MlgM = 3MlgM Heapsort thí dụ điển hình chiến lược Biến thể-để-trị, dùng kỹ thuật “biến đổi biểu diễn” (representation change) SinhVienZone.com https://fb.com/sinhvienzonevn 25 Giải thuật Horner để định trị đa thức Si nh Vi en Zo ne C om Ta cần định trị đa thức sau p(x) = anxn + an-1xn-1 + … + a1x + a0 (4.1) điểm x G.H Horner, nhà toán học người Anh, cách 150 năm đưa qui tắc đinh trị đa thức hữu hiệu Qui tắc Horner thí dụ tốt chiến lược Biến thể-đểtrị dùng kỹ thuật “thay đổi biểu diễn” (representation change) Từ cơng thức 4.1 ta thu công thức cách liên tiếp dùng x làm thừa số chung đa thức lại với số mũ giảm dần p(x) = (…(anx + an-1)x+…)x + a0 SinhVienZone.com (4.2) https://fb.com/sinhvienzonevn 26 Giải thuật Horner nh Vi en Zo ne C om Horner(P[0 n],x) // Mảng P[0 n] chứa hệ số đa thức p := P[n]; for j := n -1 down to p := p*x + P[i]; return p; Si Tổng số phép nhân tổng số phép cọng giải thuật n Trong tính trực tiếp đa thức riêng số hạng anxn cần đến n phép nhân Giải thuật Horner giải thuật tối ưu để định trị đa thức SinhVienZone.com https://fb.com/sinhvienzonevn 27   C ne Zo  nh Vi en  So trùng dòng ký tự: tìm tất xuất khn mẫu (pattern) văn (text) Văn mảng ký tự T[1 n] chiều dài n khuôn mẫu mảng P[1 m] chiều dài m Các phần tử P T ký tự lấy từ tập ký tự (alphabet) Khuôn mẫu P xuất với bước dịch chuyển(shift) s văn T (tức là, P xuất vị trí s+1 văn T) s n – m T[s+1 s+m] = P[1 m] Nếu P xuất với bước dịch chuyển s T, ta bảo s bước dịch chuyển hợp lệ (valid shift); ngược lại ta bảo s bước dịch chuyển không hợp lệ (invalid shift) Si  om So trùng dòng ký tự giải thuật Rabin-Karp SinhVienZone.com https://fb.com/sinhvienzonevn 28 Bài tốn so trùng dòng ký tự tốn tìm tất bước dịch chuyển hợp lệ mà khuôn mẫu P xuất văn T cho trước om  abcabaabcabac C Văn ne Khuôn mẫu Zo abaabcabac nh Vi en Bước dịch chuyển: s = Si Giải thuật Rabin-Karp vận dụng khái niện lý thuyết số chẳng hạn tương đương hai số modulo số thứ ba SinhVienZone.com https://fb.com/sinhvienzonevn 29 Giải thuật Rabin-Karp om Giả sử = {0, 1, 2, …, 9}, tức ký tự ký số thập phân (Trong trường hợp tổng quát, ký tự ký số hệ d, tức d = | |.) Ta xem dòng gồm k ký tự diễn tả số thập phân có chiều dài k Dòng ký tự “31415” tương ứng với trị số thập phân 31415 Cho khuôn mẫu P[1 m], gọi p giá trị thập phân tương ứng với khuôn mẫu Cho văn T[1 n], gọi ts trị số thập phân dòng chiều dài m T[s+1 s+m], với s = 0, 1, …, n-m ts = p T[s+1 s+m] = P[1 m] s bước dịch chuyển hợp lệ ts = p  Si  nh Vi en Zo  ne C   SinhVienZone.com https://fb.com/sinhvienzonevn 30 om nh Vi en Zo  C  Ta tính p thời gian O(m) dùng qui tắc Horner: p = P[m] + 10*(P[m-1] + 10*(P[m-2] + … + 10*(P[2] + 10*P[1])…)) Giá trị t0 tính cách tương tự từ T[1 m] thời gian O(m) Chú ý: ts+1 tính từ ts: ts+1 = 10(ts – 10m-1T[s+1]) + T[s+m+1] (5.1) ne  Si Thí dụ: Nếu m = ts = 31415, ta bỏ ký số bậc cao T[s+1] = „3‟ đưa vào ký số bậc thấp „2‟ để đạt giá trị: ts+1 = 10(31415 – 10000.3) + = 14152 SinhVienZone.com https://fb.com/sinhvienzonevn 31  Si  nh Vi en Zo  om  C  Mỗi lần thực thi phương trình (5.1) cần tiến hành số lượng phép tốn số học cố định Việc tính tốn t1, t2,…, tn-m tỉ lệ với O(n-m) Như vậy, p t0, t1, …, tn-m tính chi phí thời gian O(m) +O(m) + O(n-m) O(n + m) Nhưng p ts lớn máy tính khơng thể biểu diễn Để khắc phục vấn đề này, ta tính p ts modulo đại lượng q thích hợp Đại lượng q thường chọn số nguyên tố cho 10q chứa từ máy tính Trong trường hợp tổng quát, với mẫu tự gồm d ký tự {0, 1, …, d-1}, ta chọn q cho dq chứa từ máy tính ne  SinhVienZone.com https://fb.com/sinhvienzonevn 32  om C Si  ne  Zo  Và phương trình (5.1) trở thành: ts+1 = d(ts – hT[s+1]) + T[s+m+1])mod q (5.2) với h = dm-1 (mod q) Tuy nhiên, ts p (mod q) không hàm ý ts = p Mặt khác, ts p (mod q) ta khẳng định ts p, bước dịch chuyển s khơng hợp lệ Chúng ta dùng cách thử ts p (mod q) để loại bỏ bước dịch chuyển không hợp lệ s Một bước dịch chuyển s mà thỏa ts p (mod q) phải thử nghiệm thêm để xem s có thực bước dịch chuyển hợp lệ khớp trùng giả (spurious hit) mà nh Vi en  Giải thuật Rabin-Karp thể rõ nét tinh thần chiến lược Biến thể-để-trị SinhVienZone.com https://fb.com/sinhvienzonevn 33 Thí dụ: om |2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1| Zo ne C | 7| |2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1| _ | 8| 9| 3|11| 0| 1| 7| 8| 4| 5|10|11| 7| 9|11| spurious match | 7| 8| Si nh Vi en valid match | 3| 1| 4| 1| 5| 2| 14152 = (31415 – 1000) = (mod 13) SinhVienZone.com 10 + (mod 13) https://fb.com/sinhvienzonevn 34 Si nh Vi en Zo ne C om procedure RABIN-KARP-MATCHER(T, P, d, q); /* T is the text, P is the pattern, d is the radix and q is the prime */ begin Thời gian thực thi RABINn: = |T|; m: = |P|; KARP-MATCHER O((n – m + h: = dm-1 mod q; 1)m) trường hợp xấu p: = 0; t0: = 0; giải thuật phải kiểm tra for i: = to m lại bước dịch chuyển hợp begin lệ p: = (d*p + P[i])mod q; t0: = (d*t0 + T[i])mod q Trong nhiều ứng dụng, thường end có vài bước dịch for s: = to n – m chuyển hợp lệ thời begin gian chạy thường O(n+m) if p = ts then /* there may be a hit */ cọng với thời gian đòi hỏi để if P[1 m] = T[s+1 s+m] then kiểm tra lại khớp trùng Print “Pattern occurs with shift “s; giả if s < n – m then ts+1: = (d(ts –T[s + 1]h) + T[s+m+1])mod q end end SinhVienZone.com https://fb.com/sinhvienzonevn 35 Vài ghi nhận chiến lược biến thể-để-trị Zo  Sự cân trì phép quay (rotation) Tất thao tác AVL có độ phức tạp O(nlgn), loại trừ trường hợp xấu tìm kiếm nhị phân .C  om Cây AVL tìm kiếm nhị phân mà ln làm cho cân ne  nh Vi en  Cây AVL giải thuật loại trừ Gauss thí dụ biến thể-để-trị theo kiểu “đơn giản hóa thể hiện” Heapsort, giải thuật Horner giải thuật RabinKarp thí dụ biến thể-để-trị theo kiểu “biến đổi cách biểu diễn” Si  SinhVienZone.com https://fb.com/sinhvienzonevn 36 ...  nh Vi en  Chiến lược Biến thể- để- trị Giải thuật Gauss để giải hệ phương trình tuyến tính Cấu trúc heap heapsort Giải thuật Horner để định trị đa thức So trùng dòng ký tự giải thuật RabinKarp... Heapsort thí dụ điển hình chiến lược Biến thể- để- trị, dùng kỹ thuật biến đổi biểu diễn” (representation change) SinhVienZone. com https://fb .com/ sinhvienzonevn 25 Giải thuật Horner để định trị đa thức... toán (biến đổi biểu diễn -representation change) Biến thể để đưa đến thể toán khác mà có tồn giải thuật (thu giảm toán - problem reduction) Si  om 1 .Biến thể để trị (transform -and- conquer) SinhVienZone. com

Ngày đăng: 30/01/2020, 22:02

TỪ KHÓA LIÊN QUAN

w