Làm thế nào để thời gian chạy của thuật toán Ukkonen phụ thuộc vào kích thước bảng chữ cái?


19

Tôi quan tâm đến câu hỏi về thời gian chạy tiệm cận của thuật toán Ukkonen , có lẽ là thuật toán phổ biến nhất để xây dựng các cây hậu tố trong thời gian tuyến tính (?).

Dưới đây là một trích dẫn từ cuốn sách "Thuật toán về chuỗi, cây và chuỗi" của Dan Gusfield (phần 6.5.1):

"... Các thuật toán Aho-Corasick, Weiner, Ukkonen và McCreight đều yêu cầu không gian hoặc giới hạn thời gian O ( m ) nên được thay thế bằng tối thiểu O ( m log m )O ( m log | Σ | ) ".Θ(m|Σ|)O(m)O(mlogm)O(mlog|Σ|)

[ là độ dài chuỗi và Σ là kích thước của bảng chữ cái]mΣ

Tôi không hiểu tại sao điều đó là đúng.

  • Space: tốt, trong trường hợp chúng ta biểu diễn các nhánh ra khỏi các nút bằng cách sử dụng các mảng có kích thước , thì thực sự, chúng ta kết thúc với việc sử dụng không gian Θ ( m | Σ | ) . Tuy nhiên, theo như tôi có thể thấy, cũng có thể lưu trữ các nhánh bằng cách sử dụng bảng băm (giả sử, từ điển trong Python). Sau đó chúng tôi sẽ có chỉ Θ ( m ) con trỏ lưu trữ trong tất cả các bảng băm hoàn toàn (kể từ khi có Θ ( m ) cạnh trong cây), trong khi vẫn có thể truy cập vào các nút con trong O ( 1 )Θ(|Σ|)Θ(m|Σ|)Θ(m)Θ(m)O(1) thời gian, nhanh như khi sử dụng mảng.
  • Thời gian : như đã đề cập ở trên, sử dụng bảng băm cho phép chúng ta truy cập vào các nhánh đi của bất kỳ nút nào trong thời gian . Vì thuật toán của Ukkonen yêu cầu các hoạt động O ( m ) (bao gồm truy cập các nút con), nên thời gian chạy tổng thể sau đó cũng sẽ là O ( m ) .O(1)O(m)O(m)

Tôi sẽ rất biết ơn bạn về bất kỳ gợi ý nào về lý do tại sao tôi sai trong kết luận của mình và tại sao Gusfield đúng về sự phụ thuộc của thuật toán Ukkonen vào bảng chữ cái.


3
Tôi không nghĩ có bất kỳ bằng chứng nào cho thấy ảnh hưởng của thời gian / không gian độc lập với kích thước bảng chữ cái là không thể. Tôi tin rằng Gusfield đã đưa ra tuyên bố vì không có phương pháp nào được biết để loại bỏ hoàn toàn thời gian bị ràng buộc. Để thiết lập một cái, bạn phải giải thích chi tiết hơn về các hàm băm của mình. Một trường hợp xấu nhất trong trường hợp O (1) trong trường hợp tra cứu băm yêu cầu một hàm băm hoàn hảo. Tôi không rõ làm thế nào để làm điều này trong thuật toán (vì các mục băm không tĩnh tại thời điểm đó).
jogojapan

(tiếp theo) Bạn có thể làm điều đó khi cây hoàn thành, nhưng sau đó thời gian giới hạn cho thuật toán sẽ vẫn không thay đổi. (+1 cho câu hỏi mặc dù.)
jogojapan

1
Bối cảnh hữu ích: Giải thích thuật toán của Ukkonen
FrankW

Câu trả lời:


2

O(1)O(1)Ω(Σ)Θ(mΣ)

Hơn nữa, trong thực tế thời gian để thiết lập tất cả các bảng băm này sẽ cao hơn nhiều so với thời gian để thiết lập mảng.

Bạn có thể có giá tốt hơn khi sử dụng bảng băm toàn cầu được lập chỉ mục với các nút (nút, ký tự), nhưng ít nhất đối số "chỉ khấu hao" sẽ vẫn còn.

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.