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!
Trang 1C 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
Trang 2Nội dung trình bày
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ2
Trang 5 Mẫu cần tìm: P (chiều dài m).
Văn bản: T (chiều dài n).
P và T có cùng tập hữu hạn ký tự ∑ (∑ = {0, 1};
∑={A, ,Z},…)
m ≤ n
Trang 6Giới thiệu
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
6
Đ i sánh chu i: ố ỗ
Bằng cách lần lượt dịch chuyển (cửa sổ) P trên T.
P tồn tại trên T tại vị trí bắt đầu là i (0 ≤ i ≤ n – m) nếu
T[i + j] = P[j] với mọi 0 ≤ j ≤ m - 1
Ví d : ụ
P = abbaba
T = ababaabbabaa
=> i = 5
Trang 8Thuật toán Brute-Force
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 9Ý tưởng
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
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 trong T = acaabc
9
Trang 11Đánh giá
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
11
Tr ườ ng h p t t nh t – không tìm th y: O(n) ợ ố ấ ấ
Tr ườ ng h p x u nh t – không tìm th y: O(n*m) ợ ấ ấ ấ
Tr ườ ng h p trung bình: O(n+m) ợ
Trang 12Đặc điểm chính
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
12
Không c n thao tác ti n x lý trên P ầ ề ử
Luôn luôn d ch chuy n m u (c a s ) sang ph i ị ể ẫ ử ổ ả
Trang 13Thuật toán Morris-Pratt
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 14Đặt vấn đề
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
14
Đi m h n ch c a thu t toán BruteForce: ể ạ ế ủ ậ
Không ghi nhớ được thông tin đã trùng khớp (trước) khi xảy ra tình trạng không so khớp
Phải so sánh lại từ đầu (trên P) trong tất cả trường hợp
Trang 16Đề xuất của thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 17Đề xuất của thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
17
Gi s : ả ử
T tại vị trí i+j).
T[i+j] != P[j] => không so khớp
Trang 18Đề xuất của thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
18
Tìm:
Vị trí mới i1 (trên T) và j1 (trên P) sao cho
i+j = i1+j1 (vị trí đang xem xét)
v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.
Khi đó:
Đoạn dịch chuyển cửa sổ: j – j1.(do j1 < j)
Có thể tìm i1 dựa trên j1.
Trang 19Đề xuất của thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 30Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
30
M c tiêu : ụ
Xác định vị trí mới i1 (trên T) và j1 (trên P) sao cho
i+j = i1+j1 (vị trí đang xem xét)
v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.
Đã có j1 = NEXT[j]
V y, ậ i1 = i + j – NEXT[j]
Trang 31Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 32Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 33Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 34Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 35Sử dụng NEXT trong thuật toán
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
Trang 37Thuật toán Knuth-Morris-Pratt
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
37
Trang 38Ý tưởng
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
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ì nếu a =c sẽ không so khớp ngay sau khi dịch chuyển).
38
Trang 39Ý tưởng
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ
39
Thay đ i cách tính b ng NEXT: ổ ả
Nếu p[i] ≠ p[j] thì NEXT[i] = j
Ngược lại NEXT[i] = NEXT[j]
Thao tác tìm ki m v n không thay đ i ế ẫ ổ
Trang 41Hỏi và Đáp
C u trúc d li u và gi i thu t HCMUS 2010ấ ữ ệ ả ậ