최단 공통 수퍼 스트링 : 주어진 모든 문자열 조각을 포함하는 최단 문자열 찾기


12

일부 문자열 조각이 주어지면 모든 조각을 포함하는 가장 짧은 단일 문자열 ( "출력 문자열")을 찾고 싶습니다. 출력 문자열에서 조각이 서로 겹칠 수 있습니다.

예:

문자열 조각의 경우 :

BCDA
AGF
ABC

다음 출력 문자열에는 모든 조각이 포함되어 있으며 순진 추가로 만들어졌습니다.

BCDAAGFABC

그러나이 출력 문자열은 겹침을 사용하므로 더 짧습니다.

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

이 문제에 대한 알고리즘을 찾고 있습니다. 가장 짧은 출력 문자열을 찾는 것이 절대적으로 중요하지는 않지만 짧을수록 좋습니다. 입력 조각의 모든 순열을 추가하고 겹침을 제거하려고 시도하는 명백한 순진한 알고리즘보다 더 나은 알고리즘을 찾고 있습니다 (NP 완료로 표시됨).

나는 해결책에 대한 작업을 시작했고 그것은 꽤 흥미로운 것을 증명하고있다. 다른 사람들이 생각 해낼 수있는 것을보고 싶습니다. 잠시 동안이 작업에 진행중인 작업을 추가하겠습니다.


3
문제가 NP- 완전한 것 같습니다. 그렇다면 가장 짧은 문자열을 결정하기위한 다항식 알고리즘을 찾을 수는 없지만 대략적인 (가장 짧은) 솔루션을 제공하는 다항식 알고리즘이있을 수 있습니다.
superM

3
NP-Complete에 관한이 블로그 게시물은 다음과 같습니다. codinghorror.com/blog/2008/11/…
occulus

블로그는 정말 좋았습니다. 항상 읽었습니다))))
superM

@superM 이것은 세일즈맨 여행과 비슷합니다 (각 문자열은 도시와 도시 간 비용 = 일부 중복)
래칫 괴물

@ratchet 괴물, 그들이보다 일반적인 문자가있는 경우는 도시 사이에 작은 비용을 줄 수 _이며, 그들은 모두에서 어떤 공통의 편지가없는 가장 큰 비용
가게되는

답변:


14

당신이 요구하는 것은 Shortest Common Superstring 문제이며, 모든 경우에 작동하는 알고리즘이 없습니다. 그러나 이는 일반적인 문제이며 (압축 및 DNA 시퀀싱에서) 몇 가지 근사 알고리즘이 잘 알려져 있습니다.

"Greedy"알고리즘은 일반적으로 가장 효과적입니다 (최악의 최악의 경우가 있음).

자세한 내용 은 Jonathan Turner작성한 가장 짧은 공통 슈퍼 스트링 문제에 대한 근사 알고리즘을 읽어보십시오 .



흠, 내 의견의 첫 번째 링크는 슈퍼 문자열이 아닌 슈퍼 시퀀스를 처리합니다. 슈퍼 시퀀스가 ​​시퀀스의 모든 문자를 연속적으로 요구하지는 않습니다.
occulus

연결이 끊어졌습니다.
Majid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.