비공식 문제 설명 :
과 같은 문자열이 주어지면, 왼쪽에서 오른쪽으로 빨간색 글자 만 읽으면 파란색 글자 만 읽는 것과 같은 결과를 얻을 수 있도록 일부 글자는 빨간색으로, 일부 글자는 파란색으로 칠하고 (일부는 전혀 아님) 색을 지정하려고합니다.
이 예에서는
따라서 는 의 반복되는 하위 시퀀스입니다 . 또한 가장 긴 반복 하위 시퀀스입니다 (확인하기 쉽습니다).A C C A B B A B
가장 긴 반복 서브 시퀀스를 효율적으로 계산할 수 있습니까?
공식적인 질문 :
문자열 에 길이 의 반복되는 서브 시퀀스가 문자열에 존재 하는지 여부를 문자열과 일부 로 결정하는 것은 NP-hard 입니까?k
- 그렇다면 :이 문제로 어떤 문제를 줄일 수 있습니까?
- 그렇지 않은 경우 : 효율적인 알고리즘은 무엇입니까? (분명히,이 알고리즘은 가장 긴 반복 서브 시퀀스를 계산하는 데 사용될 수 있습니다)
보너스 질문 :
알파벳의 크기가 상수로 묶여 있으면 항상 길이 의 반복되는 하위 시퀀스 입니까?
(이진 알파벳에 해당하는 것으로 알려져 있습니다.)
편집 2 : 보너스 질문에 대한 부정적인 대답은 이미 이상의 알파벳에 대해 알려져 있습니다. 실제로 크기가 Σ 인 알파벳의 경우 길이가 O (n · Σ ^ {-1/2}) 인 가장 긴 반복 서브 시퀀스를 갖는 문자열이 있습니다 . 이것을 보여주기 위해 임의의 문자열로 충분합니다. 결과는 이미 존재하지만 간과했습니다.Σ
편집 : 참고 :
어떤 사람들은 "subsequence"라고 말할 때 "substring"을 의미합니다. 난 아니야 이것은 부분 문자열을 두 번 찾는 문제가 아닙니다.