So sánh giữa thuật toán Aho-Corasick và thuật toán Rabin-Karp


11

Tôi đang làm việc trên các thuật toán tìm kiếm chuỗi hỗ trợ tìm kiếm nhiều mẫu. Tôi tìm thấy hai thuật toán có vẻ như là ứng cử viên mạnh nhất về thời gian hoạt động, đó là Aho-CorasickRabin-Karp . Tuy nhiên, tôi không thể tìm thấy bất kỳ so sánh toàn diện giữa hai thuật toán. Thuật toán nào hiệu quả hơn? Ngoài ra, cái nào phù hợp hơn cho tính toán song song và tìm kiếm nhiều mẫu? Cuối cùng, cái nào đòi hỏi ít tài nguyên phần cứng hơn?

Đối với thuật toán AC, pha tìm kiếm mất thời gian , trong khi đó là O ( n m ) cho RK. Tuy nhiên, thời gian chạy cho RK là O ( n + m ) làm cho nó tương tự như AC. Kết luận dự kiến ​​của tôi là RK có vẻ thực tế tốt hơn vì nó không cần nhiều bộ nhớ như AC. Đúng không?O(n+m)O(nm)O(n+m)


Có phải tất cả các mẫu của bạn có cùng chiều dài?
Hendrik ngày

@HendrikJan Không, các mẫu có chiều dài khác nhau
Hawk

Nếu các mẫu có độ dài khác nhau, có vẻ khó xử lý chúng song song bằng RK? Trang wikipedia dường như đề xuất các mẫu này có độ dài bằng nhau, mặc dù việc cập nhật các giá trị băm có thể được thực hiện cho các độ dài khác nhau.
Hendrik ngày

Bạn có quan tâm đến một số loại nghiên cứu lý thuyết hoặc kinh nghiệm thực tế?
Raphael

@Raphael Về mặt học thuật, chúng tôi thường áp dụng nghiên cứu lý thuyết trước khi chúng tôi chứng minh điều đó theo kinh nghiệm. Tôi đã đăng câu hỏi ở đây vì tôi không mong đợi câu trả lời lập trình. Tôi cần một câu trả lời thuật toán hợp lý
Hawk

Câu trả lời:


4

Phân tích thời gian chạy tiệm cận không có khả năng là công cụ tốt nhất để chọn giữa hai thuật toán này: phân tích tiệm cận bỏ qua các yếu tố không đổi và các yếu tố không đổi sẽ rất quan trọng ở đây. Hai thuật toán về cơ bản có cùng thời gian chạy tiệm cận, vì vậy phân tích tiệm cận có lẽ không hữu ích để lựa chọn giữa chúng.

Thay vào đó, cách chọn đúng giữa hai thuật toán là thông qua phân tích thử nghiệm. Xác định khối lượng công việc đại diện và sau đó đánh giá hiệu suất của cả hai thuật toán trên khối lượng công việc của bạn, trên các loại máy bạn định sử dụng trong thực tế.


O(nm)O(n+m)

O(n+m)c(n+m)cO(n+m)

O(n+m)O(nm)


1

Tuy nhiên, tôi không thể tìm thấy bất kỳ so sánh toàn diện giữa hai thuật toán.

O(n+m)O(nm)

nhưng viết truy vấn ngầm của bạn để "so sánh toàn diện", một số bài báo đã được viết bằng thực nghiệm / so sánh thực nghiệm hai thuật toán này và dữ liệu khác trên dữ liệu thực và bao gồm phân tích / so sánh các ưu / nhược điểm / đánh đổi của các thuật toán khác nhau, ví dụ:

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.