1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng Cấu trúc dữ liệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà Dương

41 51 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 41
Dung lượng 834,09 KB

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà Dương có nội dung trình bày về đối sánh chuỗi, thuật toán Brute-Force, thuật toán Morris-Pratt, cải tiến với Knuth-Morris-Pratt,... Mời các bạn cùng tham khảo!

Cấu trúc dữ liệu và giải thuật ĐỐI SÁNH CHUỖI Giảng viên: Đậu Ngọc Hà Dương Nội dung trình bày Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Giới thiệu  Đối sánh chuỗi  Từ khóa: String matching, String searching, Pattern searching, Text Searching  Một thuật toán quan trọng có ứng dụng rộng rãi Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Giới thiệu  Ứng dụng của đối sánh chuỗi:  Máy tìm kiếm  Trình soạn thảo văn  Trình duyệt web  Sinh học phân tử (Tìm mẫu dãy DNA)  Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Giới thiệu   Mục tiêu:  Kiểm tra tồn chuỗi ký tự (mẫu, pattern) chuỗi ký tự có kích thước lớn nhiều (văn bản, text)  Nếu tồn tại, trả (hoặc nhiều) vị trí xuất Quy ước:  Mẫu cần tìm: P (chiều dài m)  Văn bản: T (chiều dài n) Cấu trúc d ữ liệu và giải thuật ­ HCMUS 2010  P T có tập hữu hạn ký tự ∑ (∑ = {0, 1}; Giới thiệu  Đối sánh chuỗi:  Bằng cách dịch chuyển (cửa sổ) P T  P tồn T vị trí bắt đầu i (0 ≤ i ≤ n – m)  T[i  + j] = P[j] với ≤ j ≤ m - Ví dụ:  P = abbaba  T = ababaabbabaa => i = 5ữ liệu và giải thuật ­ HCMUS 2010 C ấu trúc d Giới thiệu  Các thuật toán tiêu biểu:  Brute Force  Karp-Rabin  Morris-Pratt  Knuth-Morris-Pratt  Boyer-Moore  … Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Thuật toán Brute-Force Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Ý tưởng  Lần lượt kiểm tra điều kiện P[0…m­1] = T[i… i+m­1] tại mọi vị trí có thể của i  Ví dụ   Tìm kiếm P = aab T = acaabc Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Cài đặt 10 bruteForceMatcher(T, P) n ← length[T] m ← length[P] for i ← to n - m if P[0 m-1] = T[i…i+m-1] return i Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Xây dựng bảng NEXT 27  P = AAATA  Bảng NEXT  NEXT[0] = -1  NEXT[1] =0  NEXT[2] =1  NEXT[3] =2  NEXT[4] = 00 ­1 NEXT Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Xây dựng bảng NEXT 28  Xây dựng bảng NEXT cho P = 10100  Xây dựng bảng NEXT cho P = ABACAB  Xây dựng bảng NEXT cho P = GCAGAGAG  Xây dựng bảng NEXT cho P = AABAABA Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Xây dựng bảng NEXT 29  P = 10100 NEXT  ­1 0 P = ABACAB NEXT ­1 0 1 Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật toán 30  Mục tiêu :  Xác định vị trí i1 (trên T) j1 (trên P) cho  i+j v = i1+j1 (vị trí xem xét) =T[i1 … i1+j1–1] đoạn so khớp P T  Đã có j1 = NEXT[j]  Vậy, i1 = i + j – NEXT[j] Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật tốn 31  Ví dụ:  T = AATAAAATA  P = AAATA NEXT ­1  i = AATAAAATA  j = AAATA Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật toán 32  Ví dụ:  T = AATAAAATA  P = AAATA NEXT ­1  i = AATAAAATA  j = AAATA Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật toán 33  Ví dụ:  T = AATAAAATA  P = AAATA NEXT ­1  i = AATAAAATA (i = + – 0)  j=0 (j = 0) AAATA Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật tốn 34  Ví dụ:  T = AATAAAATA  P = AAATA NEXT ­1  i = AATAAAATA  j=3 AAATA Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Sử dụng NEXT thuật tốn 35  Ví dụ:  T = AATAAAATA  P = AAATA NEXT ­1  i = AATAAAATA  j=4 AAATA (Hồn tồn so khớp, vị trí xuất P T i=4) Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Độ phức tạp 36  Tính NEXT: O(m)  Tìm kiếm: O(n)  Tổng: O(n+m) Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 37 Thuật toán Knuth-Morris-Pratt Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Ý tưởng 38  Thuật toán Knuth­Morris­Pratt cải tiến Morris­ Pratt bằng cách  bổ sung thêm điều kiện a ≠ c (vì a =c không so khớp sau dịch chuyển) Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Ý tưởng 39   Thay đổi cách tính bảng NEXT:  Nếu p[i] ≠ p[j] NEXT[i] = j  Ngược lại NEXT[i] = NEXT[j] Thao tác tìm kiếm vẫn khơng thay đổi Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Xây dựng bảng NEXT 40   P = 10100 MP ­1 0 KMP ­1 ­1 P = ABACAB MP ­1 0 1 KMP ­1 ­1 ­1 Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 Hỏi Đáp Cấu trúc dữ liệu và giải thuật ­ HCMUS 2010 ... acaabc Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010 Cài đặt 10 bruteForceMatcher(T, P) n ← length[T] m ← length[P] for i ← to n - m if P[0 m-1] = T[i…i+m-1] return i Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010... Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010 Độ phức tạp 36  Tính NEXT: O(m)  Tìm kiếm: O(n)  Tổng: O(n+m) Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010 37 Thuật tốn Knuth-Morris-Pratt Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010... Karp-Rabin  Morris-Pratt  Knuth-Morris-Pratt  Boyer-Moore  … Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010 Thuật toán Brute-Force Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật ­ HCMUS 2010 Ý tưởng  Lần lượt kiểm tra điều kiện P[0…m­1] = T[i…

Ngày đăng: 11/09/2021, 13:43

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN