Trong thuật toán Boyer - Moore (BM), các ký tự trên mẫu P được duyệt từ phải sang trái, bắt đầu từ Pm. Tại thời điểm gặp ký tự không trùng khớp, chẳng hạn Pi = a còn Sj = b, khi đó sẽ quyết định dịch con trỏ
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
34
trên mẫu. Phép dịch chuyển ứng với mỗi ký tự trên P, nếu sự không trùng khớp xảy ra ở đó, được xác định trong bước tiền xử lý mẫu P. Trong thuật toán “ký tự không khớp” này của BM, có một trường hợp cho phép dịch chuyển tốt nhất (xa nhất) là khi ký tự b không xuất hiện trong mẫu P. Từ chi tiết này, kết hợp với kiểu sánh mẫu như trong KMP, ta sẽ có một “thuật toán theo tiếp cận mờ tổng quát kiểu KMP và BM”, trong đó độ mờ vẫn được tính toán dựa trên hàm TFuzz, đồng thời sẽ có những bước nhảy dài trên xâu đích, đem lại hiệu quả tìm kiếm cao.
Ý tưởng của thuật toán này là [11]: gọi ptr là con trỏ trên xâu đích S (khởi đầu ptr = 0 và độ mờ tại đó bằng 0 báo hiệu chưa tìm thấy mẫu). Mỗi lần xét một khối w gồm m + 1 ký tự liên tục trên S, bắt đầu từ vị trí ptr, ta gọi khối này là “khối ký tự quan sát” và ký hiệu wi là ký tự thứ i trong w (với w1 = Sptr). Dựa trên bảng TFuzz, tính độ mờ xuất hiện mẫu khi gặp ký tự w1 (hay chính là Sptr), ký hiệu độ mờ này là n1, đồng thời xác định bước nhảy tiếp theo để từ đó sẽ xét khối ký tự w mới, ký hiệu bước nhảy là n2. Nếu n1 là độ mờ tại Sptr thì có nghĩa sufn1(S(ptr)) = P(n1) (Hình 2.2). Xảy ra các khả năng sau:
+ Nếu n1 = m, chứng tỏ đã xuất hiện mẫu bắt đầu từ vị trí ptr - m + 1 trên S. Để không bỏ sót sự xuất hiện lồng nhau của mẫu, đặt n2 = 1.
+ Nếu n1 lớn hơn độ mờ tại vị trí được xét trước vị trí ptr, có nghĩa đang có hy vọng tìm thấy mẫu nên n2 = 1.
+ Trong các trường hợp còn lại của n1, chỉ mới xuất hiện khúc đầu P(n1) khớp với khúc cuối độ dài n1 của S(ptr). Nếu việc khớp mẫu thành công với khối ký tự quan sát w, thì ký tự Pm sẽ khớp với ký tự Sptr+m-n1
(hay w1+m-n1). Do đó, nếu Sptr+m-n1 không phải là một ký tự xuất hiện trong P thì có thể thực hiện bước nhảy xa để đọc w mới bắt đầu từ vị trí ptr+m- n1+1 trên S mà vẫn đảm bảo không bỏ sót sự xuất hiện nào của mẫu.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
35
Hình 2.2. Ý tưởng chung của thuật toán KMP-BM mờ