2010-01-11 29 views
8

Tôi đang tìm một thuật toán xây dựng/sử dụng cây hậu tố ngắn, đơn giản trong Java. Điều tốt nhất tôi đã tìm thấy cho đến nay nằm với Bộ công cụ khám phá ngữ nghĩa, nhưng việc thực hiện là vài nghìn dòng và kéo dài nhiều lớp. Lý tưởng nhất là việc triển khai sẽ càng ngắn càng tốt và không quá vài trăm dòng.Ngắn, Java thực hiện một cây hậu tố và cách sử dụng?

Có ai có triển khai như vậy không?

+0

không, nhưng tôi đã viết một bản ruby ​​trong khi quay lại. bạn có lẽ chỉ cần viết nó cho mình nếu bạn muốn thực hiện ngắn ... char [] c = string.toCharArray(); cho (int i = c.length-1; i> = 0; i ++) recurse (c [i]) ... – twolfe18

+0

Đăng nó làm câu trả lời để tôi có thể upvote nó. Tôi chỉ cần một cái gì đó phù hợp trên một tờ giấy mà tôi có thể tham khảo dễ dàng. Một thời gian ngắn, tôi sẽ cần để có thể sản xuất một số thuật toán với tài liệu tối thiểu, do đó, triển khai ngắn là triển khai tốt. –

Trả lời

1

Bài viết "Đơn giản hóa công việc tuyến tính Suffix mảng xây dựng", bởi Karkkainen và Sanders, chấm dứt với 50 dòng C + +. Bạn có lẽ cũng sẽ muốn một cái gì đó để sản xuất các mảng LCP. Googling cho "Tính toán mảng LCP trong thời gian tuyến tính, cho S và POS mảng hậu tố." nên tìm bạn.

0

Bạn cũng có thể mất mine nhưng đây không phải là thuật toán của Ukkonen - như tất cả các cách tiếp cận đơn giản khác, nó chạy theo thời gian bậc hai. Tôi đồng ý rằng một thuật toán ngây thơ (có thể làm việc tốt cho các trình tự ngắn hơn) là dễ dàng để viết trong nửa ngày nhiều nhất.

5

Tôi vừa hoàn thành việc triển khai Java của cây hậu tố. Trong số blog entry của tôi, bạn có thể tìm hiểu thêm về cây hậu tố, xem cách sử dụng thư viện của tôi, cũng như tải xuống và xây dựng thư viện bằng Subversion và Maven. Có, nó dài hơn chỉ một vài dòng trong một tệp lớp duy nhất, nhưng nó được viết cao và được tạo ra để sử dụng trong thế giới thực cho các mục đích thực tế. Ngoài ra, nó sử dụng phương pháp Ukkonen để xây dựng thời gian tuyến tính. (Hầu hết các triển khai được lưu ý ở đây có ít nhất thời gian chạy O (n^2).)

+0

+1 Mặc dù OP không chỉ định khả năng mở rộng/hiệu suất làm tiêu chí, nhưng chúng gần như luôn luôn đối với tôi; do đó, điều quan trọng là phải có thời gian tuyến tính - và do đó tiếp cận của Uknonnen. Khi bao gồm các tiêu chí đó, đây là câu trả lời có chất lượng. – javadba

Các vấn đề liên quan