순환 최장 공통 부분수열을 선형 시간에 해결
초록
본 논문은 두 문자열의 순환 최장 공통 부분수열(Cyclic LCS) 문제를 O(m·n) 시간에 해결하는 실용적인 알고리즘을 제시한다. 기존 최적 기록과 동일한 차수이지만 구현이 간단하고 직관적이며, 실제 데이터에 대해 뛰어난 성능을 보인다. 핵심 아이디어는 문자열을 두 번 연결한 뒤 전통적인 LCS 동적 계획법을 적용하고, 회전 위치에 따라 최소 비용 경로를 효율적으로 탐색하는 것이다.
상세 분석
논문은 먼저 순환 LCS 문제를 정의하고, 이를 기존의 비순환 LCS와 어떻게 차별화되는지 명확히 설명한다. 순환 문자열은 임의의 회전으로 동일하게 취급되므로, 문자열 A를 A·A(두 번 연결) 형태로 확장하면 모든 가능한 회전이 연속 구간으로 표현된다. 이때 B는 그대로 두고, 전통적인 LCS DP 테이블을 A·A와 B 사이에 구축한다. 표준 DP는 O(2m·n)=O(m·n) 시간과 O(2m·n) 공간을 요구하지만, 논문은 공간을 O(n)으로 줄이기 위해 행을 순차적으로 재활용하는 롤링 기법을 적용한다.
핵심은 “최적 회전 찾기” 단계이다. A·A의 각 시작점 i(0≤i<m)에서 B와의 LCS 길이를 구하면, i에 대한 결과는 DP 테이블의 i번째 행에 해당한다. 하지만 모든 행을 독립적으로 계산하면 O(m·n)·m이 되므로 비효율적이다. 저자는 DP 전이 관계를 이용해 인접 회전 사이의 차이를 상수 시간에 업데이트할 수 있음을 증명한다. 구체적으로, i→i+1 회전은 A·A의 첫 번째 문자와 마지막 문자를 교체하는 효과와 동일하며, 이는 DP 테이블의 첫 열과 마지막 열에만 영향을 미친다. 따라서 한 번의 전체 DP 수행 후, 슬라이딩 윈도우 방식으로 각 회전의 LCS 길이를 O(1)씩 추출한다.
알고리즘의 정확성은 두 가지 정리로 뒷받침된다. 첫 번째 정리는 A·A와 B 사이의 LCS가 원래 순환 문제의 최적 해와 일치한다는 것, 두 번째 정리는 회전 간 차이 업데이트가 DP 전이와 완전히 호환된다는 것이다. 복잡도 분석에서는 시간 O(m·n)과 공간 O(n)임을 명시하고, 최악의 경우에도 기존 최적 알고리즘과 동일한 차수를 유지함을 강조한다.
실험 섹션에서는 무작위 문자열, 바이오인포매틱스 데이터(예: DNA 서열) 및 텍스트 코퍼스를 대상으로 성능을 측정한다. 결과는 구현 난이도가 낮음에도 불구하고, 기존 복잡한 O(m·n·log min(m,n)) 알고리즘보다 평균 1.5배~2배 빠른 실행 시간을 보이며, 메모리 사용량도 현저히 감소함을 보여준다. 특히, 문자열 길이가 수천에서 수만에 이르는 경우에도 안정적인 성능을 유지한다.
결론적으로, 이 논문은 순환 LCS 문제에 대한 실용적인 O(m·n) 솔루션을 제공함으로써, 이론적 최적성보다 구현 용이성과 실제 적용 가능성을 중시하는 연구 방향에 중요한 기여를 한다. 향후 연구에서는 다중 문자열 순환 LCS, 가중치 부여 LCS, 그리고 병렬/GPU 구현을 통한 추가 가속 가능성을 탐색할 여지가 있다.