작은 메모리로 희소 접미사 트리 구축

작은 메모리로 희소 접미사 트리 구축

초록

텍스트 T 길이 n 에서 임의로 선택된 b 개의 접미사에 대해, O(b) 워드 메모리만 사용하면서 O(n log² b) 시간에 희소 접미사 트리를 만들 수 있음을 보였다. 핵심은 O(b) 공간으로 b개의 LCP 질의를 효율적으로 처리하는 새로운 기법이다.

상세 분석

이 논문은 “희소 접미사 트리”(Sparse Suffix Tree, SST) 구축 문제를 메모리 제약이 강한 환경에서 해결하고자 한다. 기존 연구에서는 1996년 Kärkän­inen‑Ukkonen이 제시한 ‘균등 간격 희소 접미사 트리’에 한정해 O(n log b) 혹은 O(n + b log b) 시간 알고리즘을 제시했지만, 여기서는 접미사들의 위치에 어떠한 제약도 두지 않는다. 따라서 가장 직관적인 방법은 선택된 b개의 접미사를 각각 전체 텍스트와 비교해 LCP를 구하고, 이를 기반으로 트리를 삽입하는 방식인데, 이는 최악의 경우 O(n b) 시간이 소요된다.

저자들은 이 한계를 깨기 위해 두 가지 핵심 아이디어를 도입한다. 첫째, 전체 텍스트 T에 대한 전통적인 suffix array(SA)와 LCP 배열을 미리 구축한다. 이 단계는 O(n) 시간·공간으로 가능하지만, 메모리 제한 때문에 전체 SA를 저장할 수 없으므로, 대신 ‘샘플링’ 기법을 이용해 O(b) 개의 중요한 포지션만 유지한다. 둘째, b개의 LCP 질의를 동시에 처리할 수 있는 ‘배치 LCP’ 구조를 설계한다. 구체적으로, 선택된 접미사들을 길이 기준으로 정렬하고, 인접한 두 접미사 사이의 LCP를 재귀적으로 구한다. 이때 각 재귀 단계에서는 현재 구간을 반으로 나누어 ‘중간 접미사’를 기준으로 LCP를 계산하고, 이미 알려진 LCP 값을 이용해 하위 구간의 값을 빠르게 추론한다. 중요한 점은 각 단계에서 필요한 문자열 비교를 해시(예: 롤링 해시)와 최소공통조상(LCA) 쿼리로 대체함으로써, 실제 문자 접근을 O(1)로 제한하고 전체 메모리 사용량을 O(b) 로 유지한다는 것이다.

이 배치 LCP 기법은 b개의 질의를 O(log b) 단계에 걸쳐 처리하므로, 전체 복잡도는 O(n log² b) 가 된다. 또한, 저자들은 공간·시간 트레이드오프를 제시한다. 예를 들어, O(b log b) 공간을 허용하면 LCP 질의당 로그 팩터를 하나 줄여 O(n log b) 시간으로 개선할 수 있다. 반대로, 공간을 O(b) 로 강제하면 로그 제곱 팩터가 남는다. 이러한 유연성은 외부 메모리 알고리즘이나 임베디드 시스템 등 메모리 제한이 심한 환경에서 실용적이다.

마지막으로, 제안된 기법은 단순히 희소 접미사 트리 구축에만 국한되지 않는다. LCP 배치 질의는 문자열 매칭, 패턴 검색, 압축 인덱스 구축 등 다양한 텍스트 알고리즘에서 핵심 서브루틴으로 활용될 수 있다. 따라서 이 논문은 작은 메모리 환경에서 고성능 문자열 구조를 구현하려는 연구자들에게 중요한 도구와 아이디어를 제공한다.