2013-03-31 37 views
12

Ví dụ: Chuỗi A = "abcd" thì câu trả lời phải là {a, ab, abc, abcd, b, bc, bcd, c, cd, d} (Tôi không biết điều này tất cả đều được gọi là chuỗi con hay không nhưng tôi giả định như vậy ...)Tìm tất cả chuỗi con có thể theo cách nhanh nhất

để tìm tất cả các chuỗi con tôi đã sử dụng phương pháp

for (int i = 0; i < A.length(); i++) { 
     for (int j = i+1; j <= A.length(); j++) { 
      System.out.println(A.substring(i,j)); 
     } 
    } 

sau Tuy nhiên, theo hiểu biết của tôi nó đi đến N^2 chúng ta có thể làm nó nhanh hơn tôi tham khảo câu hỏi pervious và có liên kết cho cây hậu http://allisons.org/ll/AlgDS/Tree/Suffix/ nhưng nó không có vẻ để giải quyết vấn đề của tôi .... đầu ra mà tôi nhận được từ hậu tố cây là {1: abcd 2: bcd 3: cd 4: d} bất kỳ ai có thể giúp tôi tìm cách nhanh nhất để làm điều này không? cảm ơn trước .....

+0

Bạn không thể làm cho nó nhanh hơn O (n^2) để liệt kê các điểm bắt đầu và kết thúc của mỗi chuỗi con có thể, vì có O (n^2) các đoạn mã như vậy! Nếu bạn muốn in ra từng chuỗi con đầy đủ (như bạn hiện đang làm), thì độ phức tạp thời gian tăng lên đến O (n^3) vì nó mất thời gian tỉ lệ với độ dài chuỗi tổng thể để in từng chuỗi con. –

+0

Cũng lưu ý rằng chuỗi rỗng cũng là một chuỗi con hợp lệ. – Philip

+2

Bạn chỉ có thể làm cho nó nhanh hơn nếu bạn đang chạy một truy vấn trên tập hợp các chất nền mà không "chạm" tất cả. In chúng chạm vào tất cả chúng. Nếu bạn muốn hỏi, "chuỗi con dài nhất xuất hiện ít nhất hai lần" hoặc "chuỗi con nào có nhiều hơn k ký tự xảy ra thường xuyên nhất", thì bạn có thể làm như vậy mà không liệt kê tất cả các phần tử (với cây hậu tố). – harold

Trả lời

19

Bạn không thể tạo chuỗi O(N^2) tốt hơn thời gian O(N^2). Nó là một phép toán không thể. Ngay cả khi tạo một chuỗi có một chỉ lệnh, đó vẫn là một tính toán O(N^2).

Tôi không nghĩ rằng mã của bạn có thể được cải thiện theo bất kỳ cách nào đáng kể.


tôi nên quan sát rằng tối ưu hóa mã này là một hoạt động vô ích, vì hiệu suất thực tế sẽ được chi phối bởi các chi phí chung của văn bản cho nhân vật vào dòng đầu ra ... và bất cứ hệ điều hành thực hiện với sản lượng suối.

+0

Được giải thích rõ ràng, hy vọng logic được ghi lại ở đây . – kabuto178

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