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…m1] = T[i… i+m1] 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 KnuthMorrisPratt 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…m1] = T[i…