Tƣởng của thuật toán

Một phần của tài liệu nghiên cứu thuật toán knuth-morris-pratt và ứng dụng (Trang 53 - 55)

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ỏ 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 ở đó,

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

đƣợ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 [4].

Ý tƣởng của thuật toán này là: 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). 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.

ptr

P(n1) ptr+m-n1

1+m-n1 m+1

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 2.2. Ý tƣởng chung của thuật toán KMP-BM mờ

Một phần của tài liệu nghiên cứu thuật toán knuth-morris-pratt và ứng dụng (Trang 53 - 55)

Tải bản đầy đủ (PDF)

(76 trang)