Làm thế nào để quy tắc của Galil hoạt động trên thuật toán Boyer-Moore?


7

Tôi muốn biết thuật toán tìm kiếm văn bản Boyer-Moore với quy tắc của Galil hoạt động như thế nào ,. Tôi đã cố gắng tìm kiếm nhưng tôi không thể hiểu thông tin tôi tìm thấy, ví dụ trang Wikipedia này . Và tại sao với quy tắc này, chúng ta đi đến một sự phức tạp thời gian tuyến tính?


Câu trả lời không cần phải là một ý kiến ​​chuyên nghiệp được giải thích chi tiết, chỉ là cách bạn nghĩ nó có thể hoạt động!
Andi Domi

Câu trả lời:


1

Thuật toán dựa trên một nguyên tắc đơn giản. Giả sử rằng chúng ta đang cố gắng khớp một chuỗi con có độ dài  n . Trước tiên chúng ta sẽ xem xét nhân vật ở chỉ số m. Nếu ký tự đó không có trong chuỗi, chúng tôi biết rằng chuỗi con chúng tôi muốn không thể bắt đầu bằng các ký tự tại các chỉ số  1 2 .... n

Nếu ký tự đó nằm trong chuỗi của chúng tôi, chúng tôi sẽ cho rằng đó là vị trí cuối cùng trong chuỗi của chúng tôi. Sau đó chúng tôi sẽ nhảy trở lại và bắt đầu cố gắng khớp chuỗi từ nơi bắt đầu có thể. Thông tin này là bảng đầu tiên của tôi.

Khi tôi bắt đầu khớp từ đầu chuỗi con, khi tôi tìm thấy sự không phù hợp, tôi không thể bắt đầu lại từ đầu. Tôi có thể một phần thông qua một trận đấu bắt đầu từ một điểm khác. Ví dụ: nếu tôi đang cố gắng khớp  anand trong ananand  khớp thành công, anan, nhận ra rằng đây không phải là quảng cáo, nhưng tôi vừa khớp với một, và vì vậy tôi nên quay lại để cố gắng khớp với ký tự thứ ba của mình trong chuỗi con của tôi . Thông tin này, "Nếu tôi thất bại sau khi khớp x ký tự, tôi có thể ở ký tự thứ năm của một trận đấu" được lưu trữ trong bảng thứ hai.

Lưu ý rằng khi tôi không khớp với bảng thứ hai, tôi có thể biết được bao xa trong một trận đấu mà tôi có thể dựa trên những gì tôi vừa khớp. Bảng đầu tiên biết tôi có thể lùi xa bao nhiêu dựa trên nhân vật mà tôi vừa thấy mà tôi không khớp. Bạn muốn sử dụng sự bi quan hơn của hai mẩu thông tin đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.