문자열 균질화의 복잡성


10

동기 부여 : 데이터 버전 관리를위한 도구를 개발하는 동안 우리는 정수 세트를 다른 정수 세트로 가져 오는 일련의 변환을 통해 두 세트의 정수를 "확산"하는 알고리즘을 찾아 보았습니다. 우리는 거리를 편집 하고 , 스와핑으로 그룹화하고 , 최소 공통 문자열 파티션 을 연결하는 것으로 보이는 다음과 같은 매우 자연스러운 문제로 그 문제를 줄일 수있었습니다 .

문제 : 일련의 문자, 즉 일련의 문자가 주어지며 목표는 최소 비용 으로 균질화 하는 것입니다. 즉, 모든 문자가 서로 옆에 있도록 재 배열 된 순서를 원합니다.

허용 되는 유일한 작업 은 똑같은 문자의 하위 시퀀스를 집어 들고 해당 하위 시퀀스를 어디로 나 이동 시키는데 1 단위의 비용이 듭니다.

이 문제의 복잡성을 특성화하는 데 도움이 될 것입니다.

:

  • aabcdab : 입력
  • bcd aa ab : 첫 번째 aa 를 "d"바로 다음 위치로 이동 한 후
  • b bcdaaa : 후행 b 를 첫 번째 위치로 이동 한 후

결과 문자열은 동종이므로 비용은 2입니다.

우리는 출력과 관련하여 어떤 식 으로든 제한되지 않습니다. 균질 한 한, 특정 순서를 보장 할 필요는 없습니다.

답변:


6

이 문제는 Minimum Hitting Set 에서 줄임으로써 NP가 완전 합니다.

USsS,sUHUsS,hHhs

축소는 다음과 같습니다.

  • uUussSusu

  • s|s|1suusu

  • ususssSssu

  • |s|+|H|H

최소 타격 세트는 NP-Hard이므로 문자열을 최적으로 균질화하는 것도 좋습니다. 이러한 움직임은 증인을 구성하므로 NP-Complete입니다.


이것은 우아한 감소입니다-감사합니다!
Aditya Parameswaran

2

현의 한 글자에서 다른 글자로 바뀌는 횟수를 살펴보십시오.이 수치는 현의 비균질성에 대한 척도로 볼 수 있습니다. 서브 시퀀스의 모든 (유용한) 이동과 함께, 이동하는 서브 시퀀스 앞에 두 개의 다른 문자가 오면이 숫자를 1 씩 줄입니다. 그렇지 않으면 불균일성이 2만큼 줄어 듭니다.

따라서 k 변경 사항이있는 문자열의 경우 최대 k-l + 1이 필요합니다. 이동 합니다. 여기서 l은 문자열의 다른 문자 수입니다. 끝에 l-1 변경 사항이 유지 되기 때문입니다 . 길이 n의 문자열은 최대 n-1 개의 문자 변경을 가질 수 있으므로 최대 n-l 이동이 필요할 수 있습니다 . 가장 적은 수는이 중 절반입니다.

따라서 최선의 전략은 abbba 형식의 하위 시퀀스를 찾고 bbb를 멀리 이동시키는 것 같습니다. 남은 것이 없으면 무엇이든 이동하십시오. 새로운 abbba 상황을 만드는 작업을 계속 시도 할 수는 있지만 이익은 거의 없을 것이라고 생각합니다. 최악의 전략 (불균형을 증가시키는 어리석은 움직임이없는)은 최적의 것보다 최대 두 배의 움직임을 사용하기 때문에, 당신이 얻을 수있는 것 중 적은 것은 다음 과 같은 특성을 가진 isaacg 의 대답과 같은 노력과 관련이없는 것처럼 보입니다. NP 하드가 제안합니다. 물론, 실제로는 이동 작업의 수만 계산하고 어떤 이동을 수행할지 결정하는 시간에 신경 쓰지 않는 한.

따라서 최악의 경우는 모든 문자가 이전 문자와 다른 문자열입니다 (그리고 당신은 abbba 보너스를 얻지 못합니다). 여기에는 문자열 길이에서 선형 이며이 길이와 거의 동일한 여러 작업이 필요합니다.

귀하의 예에서 5-> 4-> 3 개의 변경 사항이 있으며 3은 문자 수 (4)에서 1을 뺀 것입니다.

참고 : 크기가 2 인 알파벳의 경우 문자열의 접두사 또는 접미사를 움직이지 않는 모든 움직임은 불균일성을 2만큼 줄이므로 모든 합리적인 움직임 순서가 최적입니다.


한 번의 이동으로 최대 2 개의 변경 횟수를 줄일 수 있다고 주장하지만 실제로는 최대 3까지의 변경 횟수를 줄일 수 있습니다. 예를 들어 첫 번째 하위 문자열 "bc"를 "aabcabc"를 "aaabbcc"로 변환 두 번째 하위 문자열 "bc"의 중간에 문자열 변경 횟수가 5에서 2로 감소합니다.
Mikhail Rudoy

안녕하세요, @MikhailRudoy. 질문은 작업이 "유사한 문자의 하위 시퀀스를 선택"하므로 bc는 내가 이해하는 한 허용되지 않습니다.
피터 Leupold

나는 그 세부 사항을 완전히 놓쳤다. 이 경우에 맞습니다.
Mikhail Rudoy

베드로는 정확합니다. 그러한 움직임은 허용되지 않습니다.
Aditya Parameswaran

다시 : 나머지 답변-실제로, 이러한 관찰은 하한, 알파벳 크기 2의 경우의 최적 성 및 어떤 시점에서 무엇을 해야할지에 대한 휴리스틱은 가치가 있습니다. 최악의 경우 이동은 해당 문자 시퀀스에만 도움이되며 최상의 경우에는 abbba에서와 같이 최대 2 개의 문자 시퀀스를 병합하므로 2 근사값은 자연스럽게 보입니다.
Aditya Parameswaran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.