일부 문자열 조각이 주어지면 모든 조각을 포함하는 가장 짧은 단일 문자열 ( "출력 문자열")을 찾고 싶습니다. 출력 문자열에서 조각이 서로 겹칠 수 있습니다.
예:
문자열 조각의 경우 :
BCDA
AGF
ABC
다음 출력 문자열에는 모든 조각이 포함되어 있으며 순진 추가로 만들어졌습니다.
BCDAAGFABC
그러나이 출력 문자열은 겹침을 사용하므로 더 짧습니다.
ABCDAGF
^
ABC
^
BCDA
^
AGF
이 문제에 대한 알고리즘을 찾고 있습니다. 가장 짧은 출력 문자열을 찾는 것이 절대적으로 중요하지는 않지만 짧을수록 좋습니다. 입력 조각의 모든 순열을 추가하고 겹침을 제거하려고 시도하는 명백한 순진한 알고리즘보다 더 나은 알고리즘을 찾고 있습니다 (NP 완료로 표시됨).
나는 해결책에 대한 작업을 시작했고 그것은 꽤 흥미로운 것을 증명하고있다. 다른 사람들이 생각 해낼 수있는 것을보고 싶습니다. 잠시 동안이 작업에 진행중인 작업을 추가하겠습니다.
3
문제가 NP- 완전한 것 같습니다. 그렇다면 가장 짧은 문자열을 결정하기위한 다항식 알고리즘을 찾을 수는 없지만 대략적인 (가장 짧은) 솔루션을 제공하는 다항식 알고리즘이있을 수 있습니다.
—
superM
NP-Complete에 관한이 블로그 게시물은 다음과 같습니다. codinghorror.com/blog/2008/11/…
—
occulus
블로그는 정말 좋았습니다. 항상 읽었습니다))))
—
superM
@superM 이것은 세일즈맨 여행과 비슷합니다 (각 문자열은 도시와 도시 간 비용 = 일부 중복)
—
래칫 괴물
@ratchet 괴물, 그들이보다 일반적인 문자가있는 경우는 도시 사이에 작은 비용을 줄 수 _이며, 그들은 모두에서 어떤 공통의 편지가없는 가장 큰 비용
—
가게되는