INSTRUCT 초고효율 문자열 인덱싱 구조

INSTRUCT 초고효율 문자열 인덱싱 구조

초록

INSTRUCT는 문자열 삼중자(triplet)를 비트벡터에 저장해 중복을 최소화하고, 정확 검색·접두·접미·부분 문자열 검색을 모두 지원하는 메모리 절약형 인덱스 구조이다.

상세 분석

INSTRUCT는 기존 트라이와 해시 기반 인덱스가 갖는 메모리 과다 사용 문제를 해결하기 위해 “삼중자 재사용(bit‑vector triplet sharing)”이라는 핵심 아이디어를 도입한다. 입력 문자열을 연속된 3‑문자 조각(triplet)으로 분해하고, 각 위치별(첫 번째, 두 번째, …) 가능한 3‑문자 조합을 2차원 비트맵에 기록한다. 예를 들어 알파벳 26자를 가정하면 26³=17 576개의 가능한 삼중자가 존재하고, 이를 17 576 × L(문자열 최대 길이) 크기의 비트 행렬에 매핑한다. 이때 L은 전체 데이터베이스에서 가장 긴 문자열의 길이이다. 비트가 1이면 해당 위치에 해당 삼중자가 존재한다는 의미이며, 0이면 존재하지 않는다. 이렇게 하면 동일한 삼중자를 공유하는 모든 문자열이 하나의 비트만 차지하므로 메모리 사용량이 문자열 수에 비례하지 않는다.

검색 알고리즘은 매우 직관적이다. 정확 검색은 문자열을 삼중자 단위로 슬라이딩하면서 각 삼중자가 해당 위치 비트맵에 존재하는지 순차적으로 확인한다. 어느 하나라도 0이면 즉시 부정 결과를 반환하고, 전부 1이면 후보 집합을 구성한다. 후보 집합에 대해서는 실제 문자열을 검증해 최종 결과를 얻는다. 접두·접미 검색은 동일한 절차에 시작 위치 혹은 종료 위치를 고정함으로써 구현한다. 예를 들어 접두 검색은 첫 번째 위치부터 연속된 삼중자를 검사하고, 접미 검색은 마지막 위치부터 역방향으로 삼중자를 확인한다. 이러한 방식은 트라이에서 흔히 요구되는 노드 탐색 깊이와 달리 비트 연산만으로 O(m) (m은 검색 문자열 길이) 시간에 처리된다.

부분 문자열(서브스트링) 검색을 지원하기 위해서는 모든 가능한 시작 위치에 대해 별도의 비트맵을 유지하거나, 기존 비트맵을 확장해 “오프셋‑인덱스”를 추가한다. 논문에서는 두 번째 방식을 제안했으며, 이는 공간 복잡도가 O(σ³·L·L) (σ는 알파벳 크기)로 증가하지만, 여전히 전통적인 서브스트링 트라이보다 훨씬 효율적이다. 삽입·삭제 연산은 해당 문자열의 삼중자를 비트맵에 1로 설정하거나 0으로 리셋하는 간단한 비트 플립으로 수행된다. 충돌 관리가 필요 없는 구조이므로 동시성 제어가 비교적 용이하고, 대규모 업데이트에도 높은 처리량을 유지한다.

실험 결과는 두드러진 장점을 보여준다. 동일한 데이터셋(수십만~수백만 문자열)에서 INSTRUCT는 기존 압축 트라이·DAWG·FM‑Index 대비 평균 45 %55 %의 메모리 절감을 달성했으며, 검색 시간은 1.2배1.8배 빠른 것으로 보고되었다. 특히 접두·접미·서브스트링 복합 쿼리에서 트라이 기반 솔루션이 겪는 탐색 깊이 증가 현상이 거의 없으며, 비트 연산만으로 일관된 성능을 유지한다. 이러한 결과는 대규모 텍스트 마이닝, OCR 후 데이터베이스 구축, 실시간 검색 엔진 등 메모리와 응답 속도가 동시에 중요한 응용 분야에 적합함을 시사한다.