문자열에서 가장 긴 반복 (산란) 서브 시퀀스


26

비공식 문제 설명 :

과 같은 문자열이 주어지면, 왼쪽에서 오른쪽으로 빨간색 글자 만 읽으면 파란색 글자 만 읽는 것과 같은 결과를 얻을 수 있도록 일부 글자는 빨간색으로, 일부 글자는 파란색으로 칠하고 (일부는 전혀 아님) 색을 지정하려고합니다.ACCABBAB

이 예에서는ACCABBAB

따라서 는 의 반복되는 하위 시퀀스입니다 . 또한 가장 긴 반복 하위 시퀀스입니다 (확인하기 쉽습니다).A C C A B B A BCABACCABBAB

가장 긴 반복 서브 시퀀스를 효율적으로 계산할 수 있습니까?

공식적인 질문 :

문자열 에 길이 의 반복되는 서브 시퀀스가 문자열에 존재 하는지 여부를 문자열과 일부 로 결정하는 것은 NP-hard 입니까?kkk

  • 그렇다면 :이 문제로 어떤 문제를 줄일 수 있습니까?
  • 그렇지 않은 경우 : 효율적인 알고리즘은 무엇입니까? (분명히,이 알고리즘은 가장 긴 반복 서브 시퀀스를 계산하는 데 사용될 수 있습니다)

보너스 질문 :

알파벳의 크기가 상수로 묶여 있으면 항상 길이 의 반복되는 하위 시퀀스 입니까?n/2o(n)

(이진 알파벳에 해당하는 것으로 알려져 있습니다.)

편집 2 : 보너스 질문에 대한 부정적인 대답은 이미 이상의 알파벳에 대해 알려져 있습니다. 실제로 크기가 Σ 인 알파벳의 경우 길이가 O (n · Σ ^ {-1/2}) 인 가장 긴 반복 서브 시퀀스를 갖는 문자열이 있습니다 . 이것을 보여주기 위해 임의의 문자열로 충분합니다. 결과는 이미 존재하지만 간과했습니다.Σ5ΣO(n·Σ1/2)

편집 : 참고 :

어떤 사람들은 "subsequence"라고 말할 때 "substring"을 의미합니다. 난 아니야 이것은 부분 문자열을 두 번 찾는 문제가 아닙니다.


섹티, 고마워 네 말이 맞아. 내 첫 번째 의견은 잘못되었다. 이제 삭제했습니다. 반면에, 남은 의견 비 연속 하위 시퀀스에 대해 이야기하고 있습니다. 가 고정되어 있으면 시간 내에 인접하지 않은 서브 시퀀스로, 겹치지 않아야 함) 문제를 해결할 수있는 방법이 있습니다 . 각 dp 하위 문제는 지금까지 선택한 모든 빨간색 글자와 파란색 글자의 색인을 추적합니다. 이것은 가 입력의 일부일 때 어떤 일이 발생하는지 알려주지 않기 때문에 아마도 흥미롭지 않을 것 입니다. O ( n 2 k + 2 ) kkO(n2k+2)k
DW

@DW 가장 긴 공통 하위 시퀀스 의이 수정으로 공식 질문에 효율적으로 답변 할 수없는 이유는 무엇 입니까? 어쩌면 나는 무언가를 놓치고 누군가가 나를 명확히 할 수 있습니다.
브라이스 킬

@BryceKille, 모르겠다; 아마 할 수 있습니다. 당신이 그것을하는 방법을 알아 내면 나는 대답을 쓸 수 있기를 바랍니다!
DW

답변:


-2

이것은 해결할 수 있습니다 다항식 시간그래프를 구성하여 각 노드 점 대표 의 일부 반복 시퀀스에서 되도록 . 노드 와 사이의 모서리 는 길이 2의 반복되는 서브 시퀀스를 형성하기 위해 를 로 계속할 수 있음을 의미합니다 .( i , j ) S S [ i ] = S [ j ] u v u vG(i,j)SS[i]=S[j]uvuv

1. 노드를 찾으십시오. 이것은 각 문자 에 대해 정렬 된 인덱스 목록을 작성한 다음 고유 쌍을 열거하여 시간 안에 수행 할 수 있습니다 . 노드 가 없습니다 .c m = n 2영형(2)기음=2

2. 가장자리를 찾으십시오. 노드 가 노드 의해 계속 될 수 있는지 확인하는 데 시간 이 걸리므로 모든 쌍 을 고려 하여이 단계는 시간이 걸립니다.U V ( U , V ) O ( m 2 )영형(1)V(,V)영형(2)

3. 에서 가장 긴 경로 는 유효한 반복 서브 시퀀스가 ​​아닐 수 있습니다. 경로 및 고려하십시오 . 에지가 존재하지 않으면 후 걸리는 따라서 길이 (3)의 유효 반복의 서브 일반적인 경우에는 길이 3의 모든 반복 시퀀스를 찾는 시간은 그 여부 개의 유효한 경로를 확인하는 선형 시간이 걸린다 길이 의 길이 는 길이 의 유효한 경로로 결합 될 수 있습니다 .a b b c a c a b c O ( m 4 ) n n + 1에이기음에이기음에이기음영형(4)+1

4. 더 이상 경로를 찾을 수 없을 때까지 3 단계를 반복하십시오.


흠. 너무 빠릅니다. 3 단계에서 고려해야 할 하위 시퀀스의 수가 점점 커집니다. 다항식이 아닙니다.
noplogist

1
CS.SE에 오신 것을 환영합니다.이 문제를 해결해 주셔서 감사합니다! 알고리즘을 이해할 수 없습니다. 3 단계는 무엇입니까? "3"에서 모두 볼 수 있습니다. 선언적 진술 / 관찰이지만 알고리즘이 수행 해야하는 작업에 대한 절차 적 사양은 없습니다. 또한 3 단계를 반복한다는 것이 의미하는 바 또는 시간이 충분 하다는 귀하의 주장에 대한 근거를 알 수 없습니다 . 이후의 의견은 더 이상 귀하의 답변이 옳지 않다고 들리는 것 같습니다. 그렇다면 혼동을 피하기 위해 답을 삭제하는 것이 좋습니다. O(nnm2)
DW

나중에 답을 찾으면 언제든지 답을 삭제 취소하거나 새 답을 게시 할 수 있습니다.
DW

DW, 고마워 단계 3으로의 입력은 모두 길이 n의 반복 된 서브 시퀀스이고, 출력은 모두 길이 n + 1의 반복 된 서브 시퀀스이다. 알고리즘은 정확하지만 다항식 시간 알고리즘이 아니라고 생각합니다. 나는 이제 내가 틀렸다고 주장하는 것을 표시했다.
noplogist

고맙습니다. 이해 했어. 불행히도, 그 개정으로, 나는이 답변이 요청 된 질문에 대답하지 않을 것을 두려워합니다. 문제는 다음과 같습니다. NP-hard입니까? 효율적인 알고리즘이 있습니까? 지수 시간 알고리즘이 있음을 보여주는 것은 이러한 질문 중 하나에 답하는 데 도움이되지 않습니다. 실제로 멋진 기술을 호출하지 않고 문제에 대한 지수 시간 알고리즘이 있음을 아는 것은 이미 사소한 일입니다. 당신의 시도에 감사드립니다.
DW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.