Một số thuật toán so khớp

Một phần của tài liệu NGHIÊN cứu, xây DỰNG mô HÌNH ĐÁNH GIÁ, PHÁT HIỆN HÀNH VI bất THƯỜNG dựa TRÊN PHÂN TÍCH dữ LIỆU cảm BIẾN TRONG điện THOẠI THÔNG MINH (Trang 30 - 32)

2.3.2.1.Các thuật toán so khớp chính xác cổ điển

Thuật toán vét cạn (Brute Force): đây là thuật toán đầu tiên và đơn giản nhất. Thuật toán Brute Force [12] kiểm tra tất cả các vị trí trong văn bản giữa 0 và n - m, có xuất hiện của mẫu P hay không. Sau đó, sau mỗi lần so sánh sẽ dịch chuyển mẫu đúng một vị trí sang bên phải. Thuật toán Brute Force không yêu cầu giai đoạn tiền xử lý và một không gian thêm liên tục thêm vào mẫu và các văn bản. Trong giai đoạn tìm kiếm so sánh ký tự văn bản có thể được thực hiện theo thứ tự. Độ phức tạp của giai đoạn tìm kiếm này là O(mxn).

Thuật toán Knuth-Morris-Pratt (KMP) [13] được đề xuất bởi Knuth, Morris và Pratt dựa trên tiếp cận tiền tố bằng cách không so sánh mẫu với lần lượt từng vị trí trong văn bản như trong thuật toán Brute Force mà có thể dịch chuyển mẫu sang phải văn bản một số vị trí do sử dụng những thông tin của lần thử trước cho lần thử sau. Ý tưởng của phương pháp này là trong quá trình tìm kiếm vị trí của mẫu P trong xâu gốc T, nếu tìm thấy một vị trí sai ta chuyển sang vị trí tìm kiếm tiếp theo và quá trình tìm kiếm sau này sẽ được tận dụng thông tin từ quá trình tìm kiếm trước để không phải xét các trường hợp không cần thiết. Thuật toán KMP cải tiến thời gian thực hiện bằng cách giảm số phép so sánh dựa trên các mẫu được tiền xử lý để tìm ra các mẫu con từ đó xây dựng mảng tiếp (Next) để xác định ký tự tiếp theo trong mẫu được kiểm tra dựa trên mô hình Automat. Việc so khớp được thực hiện dựa trên các ký tự trong xâu văn bản T và dịch trạng thái của mảng Next. Ưu điểm của thuật toán KMP là con trỏ trên văn bản T không bao giờ bị giảm lùi lại. Thuật toán KMP dùng ít phép so sánh hơn thuật toán Brute Force, độ phức tạp thời gian và không gian để xây dựng bảng kmpNext là O(m)và độ phức tạp tính toán của thuật toán là O(m+n) = O(n).

Thuật toán Boyer-Moore (BM) [14]: được xây dựng để kiểm tra các ký tự của mẫu từ phải sang trái. Khi phát hiện sự khác nhau sẽ tiến hành dịch mẫu sang phải văn bản một số vị trí với hai cách dịch chuyển mẫu là Good-suffix và

31

Bad-character. Khoảng cách dịch chuyển Good-suffix gần giống trong thuật toán KMP, chúng ta dịch 11 mẫu sang phải văn bản sao cho tại vị trí mới có đoạn u trên mẫu P khớp với đoạn u trên văn bản T và ký tự c trên mẫu P ngay trước u phải khác a. Ta chọn đoạn dịch ngắn nhất. Nếu không có cả đoạn u trong P, ta chọn sao cho phần đuôi dài nhất của u xuất hiện ở đầu mẫu P. Với Bad- character, khi xuất hiện sự khác nhau giữa mẫu P và văn bản T, ta sẽ dịch sao cho có một ký tự giống b trên mẫu khớp vào vị trí đó, nếu có nhiều vị trí xuất hiện b trên mẫu ta chọn vị trí bên phải nhất. Nếu không có ký tự b nào trong mẫu ta sẽ dịch sao cho ký tự trái nhất của mẫu vào vị trí ngay sau ký tự Tij để đảm bảo sự ăn khớp. Hai hướng tiếp cận sẽ tạo ra 2 giá trị dịch chuyển khác nhau, từ đó sẽ lựa chọn giá trị lớn hơn làm giá trị dịch chuyển. Độ phức tạp trung bình của thuật toán BM là O(n/m) trong trường hợp các ký tự trong T không thường xuyên xuất hiện trong mẫu P, trong trường hợp xấu nhất là O(n+m). Thời gian thực thi của BM sẽ giảm khi độ dài của mẫu tăng.

2.3.2.2.Các thuật toán so khớp gần đúng

Thuật toán so khớp gần đúng chính là sự đánh giá sự tương đồng của mẫu P so với mẫu T dựa trên một hàm khoảng cách với độ dài xâu con k cho trước. Đa số các thuật toán so khớp không chính xác sử dụng khoảng cách Hamming hay khoảng cách Levenshtein với k vị trí khác biệt được thiết lập trước.

Khoảng cách Hamming (Hamming distance) giữa hai xâu văn bản con đang xét và mẫu có chiều dài bằng nhau là số các ký hiệu ở vị trí tương đương có giá trị khác nhau. Chúng ta gọi các thuật toán so khớp gần đúng này sử dụng hàm khoảng cách Hamming và k vị trí lỗi.

Khoảng cách Levenshtein thể hiện khoảng cách khác biệt giữa chuỗi kí tự đang xét và mẫu. Khoảng cách Levenshtein giữa mẫu P và chuỗi T đang xét là số bước ít nhất biến chuỗi T thành mẫu P thông qua ba phép biến đổi là xóa một ký tự, thêm một ký tự và thay thế một ký từ này bằng một ký tự khác. Chúng ta gọi các thuật toán so khớp gần đúng này sử dụng hàm khoảng cách Levenshtein với k vị trí khác biệt.

32

Khi đó hàm khoảng cách d(P,T) đóng vai trò một hàm heuristic, giá trị của nó tùy thuộc vào từng thuật toán cụ thể. Các thuật toán so khớp gần đúng được phân loại dựa trên các tiêu chí sau:

- Phương pháp đếm (Counting Method): dựa trên phép tính số học, sử dụng bộ đếm cho từng vị trí trong văn bản từ đó tính ra khoảng cách.

- Phương pháp lọc (Filtering): dựa trên việc tìm kiếm các thuật toán nhanh để loại bỏ một số lượng lớn các ký tự trong văn bản đang xét không có khả năng khớp với mẫu và áp dụng một thuật toán tìm so khớp khác để kiểm tra phần còn lại của văn bản.

Một phần của tài liệu NGHIÊN cứu, xây DỰNG mô HÌNH ĐÁNH GIÁ, PHÁT HIỆN HÀNH VI bất THƯỜNG dựa TRÊN PHÂN TÍCH dữ LIỆU cảm BIẾN TRONG điện THOẠI THÔNG MINH (Trang 30 - 32)