트리 구조 압축을 위한 RePair 알고리즘
본 논문은 순위가 매겨진 순서 트리를 선형 시간에 압축하는 새로운 알고리즘 “Re‑pair for Trees”를 제안한다. 이 알고리즘은 선형 직선형 컨텍스트 자유 트리 문법(Linear SLCF‑tree grammar)을 이용해 트리를 압축하고, 압축된 문법 위에서 직접 트리 탐색 및 질의를 수행할 수 있다. 또한 생성된 문법을 더욱 압축하기 위한 특수
초록
본 논문은 순위가 매겨진 순서 트리를 선형 시간에 압축하는 새로운 알고리즘 “Re‑pair for Trees”를 제안한다. 이 알고리즘은 선형 직선형 컨텍스트 자유 트리 문법(Linear SLCF‑tree grammar)을 이용해 트리를 압축하고, 압축된 문법 위에서 직접 트리 탐색 및 질의를 수행할 수 있다. 또한 생성된 문법을 더욱 압축하기 위한 특수 코딩 방식을 도입했으며, 프로토타입 실험을 통해 기존 문자열‑기반 RePair 및 다른 트리 압축 기법보다 압축 비율, 실행 시간, 메모리 사용량에서 우수함을 입증한다.
상세 요약
이 논문은 기존 문자열 압축 알고리즘인 RePair을 트리 구조에 일반화한 “Re‑pair for Trees”를 설계하고, 그 이론적·실험적 특성을 면밀히 분석한다. 핵심 아이디어는 트리를 선형 직선형 컨텍스트 자유 트리 문법(Linear SLCF‑tree grammar)으로 표현하는데, 이는 비단 문자열을 압축하는 직선형 CFG와 달리 트리의 계층적 구조와 순서를 그대로 보존한다는 점에서 차별화된다. 알고리즘은 트리의 모든 인접한 서브트리를 탐색하면서 가장 빈번히 등장하는 ‘쌍(pair)’을 찾아 새로운 비단말 기호로 교체하는 과정을 반복한다. 이 과정은 문자열 RePair에서와 동일하게 ‘쌍 교체’를 기반으로 하지만, 트리에서는 부모‑자식 관계와 형제 순서를 동시에 고려해야 하므로, 교체 후보를 효율적으로 관리하기 위해 해시 테이블과 우선순위 큐를 결합한 자료구조를 사용한다.
시간 복잡도 분석에서는 각 교체 단계가 트리의 전체 노드 수 n에 대해 O(1) 평균 시간으로 수행될 수 있음을 증명한다. 따라서 전체 알고리즘은 O(n) 시간에 종료한다는 점에서 기존의 트리 압축 기법(예: DAG 압축, BPLEX 등)보다 확연히 빠르다. 메모리 사용량 역시 교체 과정에서 생성되는 비단말 기호와 규칙을 순차적으로 저장하므로, 최악의 경우에도 O(n) 공간을 초과하지 않는다.
압축된 문법을 직접 이용해 트리 탐색을 수행할 수 있다는 점은 실용적인 강점이다. 논문은 트리 순회, 서브트리 검색, 라벨 기반 질의 등을 문법 규칙을 재귀적으로 해석함으로써 압축 상태에서 바로 실행할 수 있음을 보인다. 이는 대규모 XML·JSON 데이터베이스나 컴파일러 중간 표현에서 메모리 절감과 동시에 빠른 질의 응답을 가능하게 한다.
또한, 생성된 문법에 대해 ‘succinct coding’이라 명명한 추가 압축 단계가 제안된다. 이 단계는 비단말 기호와 규칙을 비트 레벨에서 최적화된 가변 길이 코드로 인코딩하고, 규칙 간 의존성을 고려한 순서 부호화를 적용한다. 결과적으로 압축률이 10~15% 정도 향상되며, 압축·해제 과정 모두 선형 시간 복잡도를 유지한다.
실험에서는 다양한 실세계 트리(HTML DOM, XML 스키마, 프로그래밍 언어 AST 등)와 합성 트리를 대상으로 기존 RePair 문자열 압축, DAG 압축, TreeRePair 등과 비교하였다. 압축 비율은 평균 30%~45% 개선, 실행 시간은 2배 이상 가속, 메모리 사용량은 40% 이하 감소를 기록했다. 특히, 대규모(수백만 노드) 트리에서도 메모리 초과 없이 안정적으로 동작함을 확인하였다.
전체적으로 이 논문은 트리 구조 압축에 있어 이론적 정밀도와 실용적 효율성을 동시에 달성한 알고리즘을 제시하며, 압축된 트리 위에서 직접 연산을 수행할 수 있는 새로운 패러다임을 제시한다는 점에서 의미가 크다.
📜 논문 원문 (영문)
🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...