Tôi đã bị mắc kẹt trong một thời gian đó là thuật toán tìm kiếm chuỗi nhanh nhất, nghe nhiều ý kiến, nhưng cuối cùng tôi không chắc chắn.
Tôi đã nghe một số người nói rằng thuật toán nhanh nhất là Boyer-Moore và một số người nói rằng Knuth-Morris-Pratt thực sự nhanh hơn.
Tôi đã tìm kiếm sự phức tạp trên cả hai nhưng chúng hầu như trông giống nhau O(n+m)
. Tôi đã thấy rằng trong trường hợp xấu nhất Boyer-Moore có một O(nm)
sự phức tạp so với Knuth-Morris-Pratt có O (m + 2 * n). Trong đó n = chiều dài của văn bản và m = chiều dài của mẫu.
Theo như tôi biết thì Boyer-Moore có trường hợp xấu nhất tuyến tính nếu tôi sử dụng Quy tắc Galil.
Câu hỏi của tôi, Trên tất cả, đây thực sự là thuật toán tìm kiếm Chuỗi nhanh nhất (Câu hỏi này bao gồm tất cả các thuật toán sting có thể có, không chỉ Boyer-Moore và Knuth-Morris-Pratt).
Chỉnh sửa: Do câu trả lời này
Điều tôi chính xác đang tìm kiếm là:
Cho một văn bản T
và một mô hình P
tôi phải tìm tất cả các xuất hiện của P
trong T
.
Ngoài ra độ dài của P và T là từ [1,2 000 000]
và chương trình phải chạy dưới 0,15 giây.
Tôi biết rằng KMP và Rabin-Karp là đủ để đạt được 100% điểm cho vấn đề nhưng tôi vì một người muốn thử và thực hiện Boyer-Moore. Cái nào sẽ là tốt nhất cho kiểu tìm kiếm này?