동기 부여 : 데이터 버전 관리를위한 도구를 개발하는 동안 우리는 정수 세트를 다른 정수 세트로 가져 오는 일련의 변환을 통해 두 세트의 정수를 "확산"하는 알고리즘을 찾아 보았습니다. 우리는 거리를 편집 하고 , 스와핑으로 그룹화하고 , 최소 공통 문자열 파티션 을 연결하는 것으로 보이는 다음과 같은 매우 자연스러운 문제로 그 문제를 줄일 수있었습니다 .
문제 : 일련의 문자, 즉 일련의 문자가 주어지며 목표는 최소 비용 으로 균질화 하는 것입니다. 즉, 모든 문자가 서로 옆에 있도록 재 배열 된 순서를 원합니다.
허용 되는 유일한 작업 은 똑같은 문자의 하위 시퀀스를 집어 들고 해당 하위 시퀀스를 어디로 나 이동 시키는데 1 단위의 비용이 듭니다.
이 문제의 복잡성을 특성화하는 데 도움이 될 것입니다.
예 :
- aabcdab : 입력
- bcd aa ab : 첫 번째 aa 를 "d"바로 다음 위치로 이동 한 후
- b bcdaaa : 후행 b 를 첫 번째 위치로 이동 한 후
결과 문자열은 동종이므로 비용은 2입니다.
우리는 출력과 관련하여 어떤 식 으로든 제한되지 않습니다. 균질 한 한, 특정 순서를 보장 할 필요는 없습니다.