선형 시간에 모든 시드 계산하기

이 논문은 문자열의 모든 시드(중첩 가능한 반복 부분)를 선형 시간 O(n) 안에 구하고, 그 결과를 선형 크기의 패키지 형태로 압축한다. 기존 O(n log n) 알고리즘을 개선하고, 역문자열을 이용하던 복잡한 구조를 없애는 새로운 표현법을 제시한다.

저자: Tomasz Kociumaka, Marcin Kubica, Jakub Radoszewski

선형 시간에 모든 시드 계산하기
본 논문은 문자열 w(길이 n)의 모든 시드(seed)를 선형 시간에 계산하고, 그 결과를 선형 크기의 압축 표현으로 제공한다. 시드는 “커버(cover)” 개념을 확장한 것으로, 문자열 v가 w의 부분 문자열이면서 w를 포함하는 어떤 초문자열 x·w·y를 v가 완전하게 커버하도록 할 때 v를 w의 시드라 정의한다. 이때 v의 발생 위치는 겹칠 수 있으며, 좌·우 오버핸딩(왼쪽·오른쪽 초과) 발생도 허용한다. 기존 연구(Iliopoulos·Moore·Park, 1996)는 O(n log n) 시간에 선형 크기의 “두 부분” 표현(정방향 접미사 트리와 역방향 접미사 트리)으로 시드 집합을 압축했지만, 구현이 복잡하고 역문자열 트리를 별도로 관리해야 하는 단점이 있었다. 논문은 먼저 문자열의 서브워드 복잡도(subword complexity)를 이용해 시드와 길이 구간 사이의 조합적 관계를 밝힌다. 구체적으로, 길이 k인 서브워드들의 등장 횟수와 중복도를 분석하면, 시드가 존재할 수 있는 길이 구간이 제한되고, 이러한 구간을 재귀적으로 나누면 전체 작업량이 일정 비율로 감소한다는 사실을 증명한다. 이 과정에서 “패키지(pack)”라는 새로운 압축 단위를 도입한다. 패키지는 (i, j₁, j₂) 형태의 삼중항으로, w

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기