Chúng ta biết rằng chuỗi con chung dài nhất của hai chuỗi có thể được tìm thấy trong độ phức tạp thời gian . Một giải pháp có thể được tìm thấy chỉ trong thời gian tuyến tính?
Chúng ta biết rằng chuỗi con chung dài nhất của hai chuỗi có thể được tìm thấy trong độ phức tạp thời gian . Một giải pháp có thể được tìm thấy chỉ trong thời gian tuyến tính?
Câu trả lời:
Để cho và là độ dài của hai chuỗi đã cho,
Có, chuỗi con chung dài nhất của hai chuỗi đã cho có thể được tìm thấy trong thời gian, giả sử kích thước của bảng chữ cái là không đổi.
Dưới đây là một đoạn trích từ bài viết trên Wikipedia về vấn đề chuỗi con phổ biến dài nhất .
Các chuỗi con chung dài nhất của một chuỗi các chuỗi có thể được tìm thấy bằng cách xây dựng một cây hậu tố tổng quát cho các chuỗi, và sau đó tìm các nút bên trong sâu nhất có các nút lá từ tất cả các chuỗi trong cây con bên dưới nó.
Xây dựng một cây hậu tố tổng quát cho hai chuỗi đã chothời gian sử dụng thuật toán Ukkonen nổi tiếng khéo léo . Tìm các nút nội bộ sâu nhất đến từ cả hai chuỗithời gian. Do đó chúng ta có thể tìm thấy chuỗi con chung dài nhất trong thời gian.
Để triển khai công việc, vui lòng xem qua Ứng dụng Suffix Tree 5 - Chuỗi con chung dài nhất tại GeekforGeek
Trong thực tế, chuỗi con chung dài nhất của hai chuỗi đã cho có thể được tìm thấy trong thời gian bất kể kích thước của bảng chữ cái.
Dưới đây là bản tóm tắt về tính toán các nền tảng phổ biến dài nhất qua Suffix Mảng của Babenko, Maxim & Starikovskaya, Tatiana. (2008).
Cho một bộ dây tổng chiều dài trên bảng chữ cái người ta có thể yêu cầu tìm, cho mỗi , chuỗi con dài nhất ít nhất xuất hiện chuỗi trong . Được biết, vấn đề này có thể được giải quyết trongthời gian với sự giúp đỡ của cây hậu tố. Tuy nhiên, thuật toán kết quả khá phức tạp (đặc biệt, nó liên quan đến việc trả lời một số truy vấn tổ tiên ít phổ biến nhất trongthời gian). Ngoài ra, thời gian chạy và tiêu thụ bộ nhớ của nó có thể phụ thuộc vào.
Bài viết này trình bày một cách tiếp cận khác, đơn giản đáng chú ý cho vấn đề trên, dựa trên khái niệm mảng hậu tố. Khi mảng hậu tố của một số phụ trợchuỗi -length được tính toán, người ta cần một đơn giản thời gian hậu xử lý để tìm chuỗi con dài nhất được yêu cầu. Do một số thuật toán thời gian tuyến tính hiệu quả và đơn giản để xây dựng các mảng hậu tố đã được phát triển gần đây (với hằng số không phụ thuộc vào), cách tiếp cận của chúng tôi có vẻ khá thực tế.
Dưới đây là ý tưởng chung của thuật toán trong bài báo trên. Hãy để chuỗi được kết nối của tất cả với các Sentinels riêng biệt. Xây dựng mảng hậu tố chocũng như mảng tiền tố phổ biến dài nhất của nó . Áp dụng một kỹ thuật cửa sổ trượt cho các mảng này để có được các chuỗi con dài nhất.
Đúng. Thậm chí còn có một bài viết Wikipedia về nó! https://en.wikipedia.org/wiki/Longest_common_subopes_propet
Cụ thể, như Wikipedia giải thích, có một thuật toán thời gian tuyến tính, sử dụng các cây hậu tố (hoặc mảng hậu tố).
Tìm kiếm trên "chuỗi con chung dài nhất" sẽ hiển thị bài viết Wikipedia đó là lần truy cập đầu tiên (đối với tôi). Trong tương lai, xin vui lòng nghiên cứu vấn đề trước khi hỏi ở đây. (Xem, ví dụ: https://meta.stackoverflow.com/q/261592/781723 .)