가장 짧은 수퍼 스트링 문제는 다음과 같습니다. 알파벳 Σ 위에 문자열 s 1 , … , s n 이 주어지고 각 s 를 포함 하는 Σ 에서 가장 짧은 문자열을 찾고 싶습니다 ins1,…,snΣΣsi 를 연속 문자의 하위 시퀀스, 즉 하위 문자열로 .
문제에 대한 정확한 알고리즘에 대해 이야기 할 때 가장 짧은 수퍼 스트링 의 길이 을 찾는 것은 최종 수퍼 스트링에서 모든 연속적인 문자열 오버랩의 합인 최대 압축 C 를 찾는 것과 같습니다 . 즉 C = ∑ i | 이야 내가 | - L .LCC=∑i|si|−L
내가 아는 한, 가장 짧은 수퍼 스트링에 대한 가장 빠른 정확한 알고리즘은 ( 2 n )에서 실행됩니다. 여기서 n 은 문자열 수입니다. 가장 긴 경로 (및 기타 문제)에 대한 동적 프로그래밍 알고리즘과 유사한 간단한 동적 프로그래밍 알고리즘입니다.O∗2nn
각 스트링의 부분 집합 및 문자열 V 에서 S 우리 각지 superstrings 위에 최대 압축 계산 S를 여기서 , V는 제 문자열 ((상기 superstring 나타나는 C로 이것을 저장하고 V , S를 )). 먼저 하나의 요소로 모든 하위 집합을 처리 한 다음 k 문자열의 하위 집합 S 에 대한 C (( v , S )) 값을 k - 1 문자열의 하위 집합 에 대해 작성 합니다. 구체적으로 특별히:SvSSvv,Sv,SSkk−1
각 문자열 우리가 모든 부분 집합보고 S ' 에 K - 1 하지 포함 문자열 U를 하고 (값 설정 U , U ∪ S를 ' 문자열 걸쳐 최대) v에 에서 S ' 최대의 합을 C 와의 u 와 v의 중첩 (( v , S ' )).uS′k−1uu,u∪S′vS′uvv,S′
최종 런타임은 O ( ) 이하입니다. 여기서 l 은 최대 문자열 길이입니다.n22n+n2ll
이 작거나 쌍별 겹침이 작고 알파벳 크기가 작다고 가정하면 더 나은 알고리즘이 있지만 2 n 보다 빠른 알고리즘은 알지 못합니다 .l2n