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


26

비공식 문제 설명 :

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

이 예에서는ACCABBAB

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

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

공식적인 질문 :

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

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

보너스 질문 :

알파벳의 크기가 상수로 묶여 있으면 항상 길이 의 반복되는 하위 시퀀스 입니까?n/2−o(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.