Kết quả dài nhất lặp đi lặp lại (phân tán) trong một chuỗi


26

Báo cáo vấn đề không chính thức:

Đưa ra một chuỗi, ví dụ , chúng tôi muốn tô màu một số chữ cái màu đỏ và một số chữ cái màu xanh (và một số không hoàn toàn), sao cho chỉ đọc các chữ cái màu đỏ từ trái sang phải mang lại kết quả tương tự như chỉ đọc các chữ cái màu xanh.ACCMộtBBMộtB

Trong ví dụ này, chúng ta có thể tô màu chúng như thế này:MộtCCMộtBBMộtB

Do đó, chúng tôi nói là một chuỗi lặp lại của . Nó cũng là một chuỗi lặp lại dài nhất (dễ kiểm tra).CMộtBMộtCCMộtBBMộtB

Chúng ta có thể tính toán các chuỗi lặp lại dài nhất một cách hiệu quả không?

Câu hỏi chính thức:

Có phải NP-khó quyết định cho một chuỗi và một số , liệu một chuỗi lặp lại có độ dài có tồn tại trong chuỗi không?kk

  • Nếu vậy: Vấn đề nào có thể được giảm xuống cho vấn đề này?
  • Nếu không: một thuật toán hiệu quả là gì? (rõ ràng, thuật toán này sau đó có thể được sử dụng để tính toán một chuỗi lặp lại dài nhất)

Câu hỏi thưởng:

Chúng sẽ luôn là một chuỗi lặp lại có độ dài nếu kích thước của bảng chữ cái được giới hạn bởi một hằng số?n/2-o(n)

(Điều này được biết là đúng với bảng chữ cái nhị phân.)

Chỉnh sửa 2: Câu trả lời phủ định cho Câu hỏi Tiền thưởng đã được biết đến với bảng chữ cái có kích thước ít nhất là . Trong thực tế cho bảng chữ cái kích thước Σ , có dây với subsequences lặp đi lặp lại lâu nhất của một chiều dài chỉ O (n · Σ ^ {- 1/2}) . Chuỗi ngẫu nhiên đủ để hiển thị điều này. Kết quả đã tồn tại, nhưng tôi bỏ qua nó.5ΣÔi(n·Σ-1/2)

Chỉnh sửa: Lưu ý:

Một số người có nghĩa là "chuỗi con" khi họ nói "chuỗi". Tôi không. Đây không phải là vấn đề tìm kiếm một chuỗi hai lần.


Sekti, cảm ơn bạn. Bạn nói đúng: nhận xét đầu tiên của tôi là sai lầm; Bây giờ tôi đã xóa nó. Mặt khác, bình luận còn lại của tôi nói về những điều không liên tục. Nếu được sửa, có một cách để giải quyết vấn đề của bạn (với các chuỗi không liền kề, bắt buộc không chồng chéo) trong thời gian . Mỗi bài toán con dp theo dõi các chỉ số của tất cả các chữ cái màu đỏ và tất cả các chữ cái màu xanh được chọn cho đến nay. Điều này có thể không thú vị, vì nó không cho chúng ta biết điều gì xảy ra khi là một phần của đầu vào. kÔi(n2k+2)k
DW

@DW Tại sao câu hỏi chính thức không thể được trả lời một cách hiệu quả với sửa đổi này của chuỗi con chung dài nhất? Có lẽ tôi đang thiếu một cái gì đó và ai đó có thể làm rõ cho tôi.
Bryce Kille

@BryceKille, tôi không biết; có lẽ nó có thể Nếu bạn tìm ra cách để làm điều đó, tôi hy vọng bạn sẽ viết câu trả lời!
DW

Câu trả lời:


-2

Điều này có thể được giải quyết trong thời gian đa thứcbằng cách xây dựng một đồ thị trong đó mỗi nút đại diện cho một điểm trong một số chuỗi lặp lại của sao cho . Cạnh giữa các nút và có nghĩa là có thể được tiếp tục bởi để tạo thành một chuỗi lặp lại có độ dài 2.GS S [ i ] = S [ j ] u v u v(i,j)SS[tôi]= =S[j]bạnvbạnv

1. Tìm các nút. Điều này có thể được thực hiện trong thời gian bằng cách xây dựng một danh sách các chỉ số được sắp xếp cho mỗi ký tự , sau đó liệt kê các cặp duy nhất. Không có nhiều hơn nút.c m = n 2Ôi(n2)cm= =n2

2. Tìm các cạnh. Phải mất thời gian để kiểm tra xem nút có thể được tiếp tục bởi nút , vì vậy bằng cách xem xét tất cả các cặp , bước này mất thời gian .u v ( u , v ) O ( m 2 )Ôi(1)bạnv(bạn,v)Ôi(m2)

3. Lưu ý rằng đường dẫn dài nhất trong có thể không phải là một chuỗi lặp lại hợp lệ. Hãy xem xét đường dẫn và . Nếu tồn tại cạnh thì là một chuỗi lặp lại hợp lệ có độ dài 3. Do đó, phải mất thời gian để tìm tất cả các chuỗi lặp lại có độ dài 3. Trong trường hợp chung, phải mất thời gian tuyến tính để kiểm tra xem hai đường dẫn hợp lệ có độ dài có thể được kết hợp thành một đường dẫn hợp lệ có độ dài .a b b c a c a b c O ( m 4 ) n n + 1GmộtbbcmộtcmộtbcÔi(m4)nn+1

4. Lặp lại bước 3 cho đến khi không thể tìm thấy đường dẫn nữa.


Hừm. Quá nhanh. Trong bước 3, số lượng các phần sau để xem xét ngày càng lớn hơn. Vì vậy, nó không phải là đa thức.
noplogist

1
Chào mừng bạn đến với CS.SE và cảm ơn bạn đã cố gắng giải quyết vấn đề này! Tôi sợ tôi không hiểu thuật toán của bạn. Bước 3 là gì? Tất cả những gì tôi thấy trong "3." là một số tuyên bố / quan sát khai báo, nhưng tôi không thấy một đặc tả thủ tục về những gì thuật toán được cho là phải làm. Ngoài ra, tôi không thấy ý nghĩa của việc lặp lại Bước 3, hoặc lý do cho tuyên bố của bạn rằng thời gian đủ. Nhận xét tiếp theo của bạn làm cho nó có vẻ như bạn không còn tin rằng câu trả lời của bạn là chính xác. Nếu vậy, tốt hơn là xóa câu trả lời, để tránh nhầm lẫn. Ôi(nnm2)
DW

Bạn luôn có thể phục hồi hoặc đăng câu trả lời mới nếu bạn tìm ra câu trả lời sau.
DW

DW, cảm ơn. Đầu vào cho bước 3 là tất cả các chuỗi lặp lại có độ dài n và đầu ra là tất cả các chuỗi lặp lại có độ dài n + 1. Tôi tin rằng thuật toán là chính xác nhưng nó không phải là thuật toán thời gian đa thức. Bây giờ tôi đã đánh dấu các khiếu nại mà tôi cho là không chính xác.
noplogist

Cảm ơn bạn. Tôi hiểu. Thật không may, với những sửa đổi đó, tôi sợ câu trả lời này không trả lời được câu hỏi đã được hỏi. Câu hỏi là: NP này có cứng không? Có một thuật toán hiệu quả? Cho thấy tồn tại một thuật toán thời gian theo cấp số nhân không giúp trả lời một trong hai câu hỏi đó. Thật vậy, thật tầm thường khi thấy rằng có một thuật toán theo thời gian theo cấp số nhân cho vấn đề, mà không cần gọi bất kỳ kỹ thuật ưa thích nào. Tôi đánh giá cao nỗ lực của bạn.
DW
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.