Thuật toán xây dựng mảng hậu tố trong thời gian


7

Gần đây tôi đã làm việc với các mảng hậu tố và tôi không thể tìm thấy một thuật toán hiệu quả để xây dựng một mảng hậu tố dễ hiểu. Tôi đã thấy trong nhiều trang web có thuật toán , nhưng tôi không thể hiểu nó, vì nhiều chi tiết quan trọng bị bỏ qua. Có một ví dụ tại Top Coder .O(nlog2n)

Ai đó có thể giới thiệu cho tôi một thuật toán hiệu quả để xây dựng mảng hậu tố, dễ hiểu không?

Câu trả lời:


15

Bạn có thể tính toán mảng hậu tố theo thời gian tuyến tính với Thuật toán DC-3 . Đây là một thuật toán ưa thích siêu thú vị có thể được thực hiện trong 50 dòng mã C ++ có thể đọc được - một trong những mục yêu thích mọi thời đại của tôi. Mã nguồn được chứa trong bài báo gốc. Nếu bạn có thể so sánh hai ký tự trong thời gian không đổi và kích thước bảng chữ cái là , thì thuật toán DC3 chạy trong thời gian .nO(1)O(n)

Lưu ý rằng bạn cũng có thể nhận được cây hậu tố trong thời gian tuyến tính khi bạn có quyền truy cập vào mảng hậu tố và mảng LCP. Các LCP-mảng cũng có thể được xây dựng với sự DC3-thuật toán.


4

Đây là một lời giải thích tốt cho thuật toán : http://www.stanford.edu/ . Trên thực tế, bằng cách sử dụng sắp xếp thời gian tuyến tính, cách tiếp cận tương tự cho độ phức tạp thời gian .O(nlog2n)O(nlogn)

Nếu bạn có bất kỳ câu hỏi cụ thể về nó, bạn có thể hỏi.

Tôi đồng ý với A. Schultz rằng DC-3 cực hay. Nó cũng không phức tạp lắm, nhưng vẫn đơn giản hơn.O(nlog2n)

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.