문자열 처리 문제를 위한 실용 알고리즘 기법

본 논문은 문자열 전처리와 질의 응답, 최적 문자열 연결, 사전식 최소 연결, 공통 연속·비연속 부분수열 탐색 등 다섯 가지 핵심 문제에 대해 KMP, 접미사 배열, 트라이, DFA 등 기존 자료구조를 활용한 새로운 실용 알고리즘을 제시한다. 각 기법은 시간·공간 복잡도 측면에서 기존 방법보다 개선된 성능을 보이며, 실제 데이터 마이닝·검색·생물정보학 등에 바로 적용 가능하도록 설계되었다.

저자: Mugurel Ionut Andreica, Nicolae Tapus

본 논문은 데이터 마이닝·지식 발견 분야에서 대규모 텍스트 데이터를 효율적으로 다루기 위해 여러 문자열 처리 문제에 대한 실용적인 알고리즘 기법을 제시한다. 전체 내용은 다음과 같이 다섯 개의 주요 섹션으로 구성된다. Ⅰ. 문자열 접두 질의 문자열 S=c₁c₂…cₙ에 대해 두 종류의 질의(PQ와 LPQ)를 지원한다. PQ(i, j)는 S의 앞 i개의 접두가 S의 j‑i+1…j 구간과 동일한지를 묻고, LPQ(j, k)는 j까지의 접두 중 k 이하인 가장 큰 i를 찾는다. 이를 위해 KMP 알고리즘으로 실패 함수 p(i)를 구하고, p(i)를 부모로 하는 ‘실패 트리’를 만든다. 트리에서 조상 관계는 DFS 번호와 서브트리 범위로 O(1) 확인 가능하며, LPQ는 이진 승수 조상 테이블 Anc(i, t)를 이용해 O(log n) 시간에 해결한다. 메모리 사용을 줄이기 위해 c‑레벨 조상 Anc(i)를 정의하고 스택 기반 탐색으로 O(n) 메모리·O(log c) 시간 복잡도를 얻는다. Ⅱ. 최적 문자열 연결 두 집합 A와 B(각 N개의 문자열)에서 일부 문자열을 선택해 각각 S₁, S₂를 만든 뒤, S₁과 S₂가 서로 접두·접미 관계를 유지하도록 연결해 가장 짧은 공통 문자열을 구한다. 정점 (i, j, p)는 집합 p의 i번째 문자열에서 위치 j부터 시작하는 접미를 의미하고, 다른 집합의 문자열이 현재 접미와 일치하면 비용이 추가되는 방향성 간선을 만든다. 모든 매칭 정보를 KMP로 사전 처리해 O(1) 매칭을 가능하게 하고, Dijkstra 알고리즘을 적용해 최단 경로를 찾는다. 정점 수는 O(N·(Lmax+1)), 간선 수는 O(N²·(Lmax+1))이며, 전체 시간 복잡도는 O(N²·(Lmax+1)·log N)이다. 특수 응용으로 회문을 찾을 때는 B를 A의 역순으로 두어 동일한 프레임워크를 사용한다. Ⅲ. 사전식 최소 연결 문자열 N개의 문자열을 임의 순서로 연결했을 때 전체 문자열 Q가 사전식으로 최소가 되도록 정렬한다. 비교 연산을 “S_i+S_j < S_j+S_i” 로 정의하고, 동등한 경우 길이가 짧은 문자열을 앞에 두는 규칙을 추가한다. 이를 기존 정렬 알고리즘에 커스텀 비교자로 삽입하면 O(N·log N) 시간에 최적 순서를 얻는다. Ⅳ. 최장 공통 연속 부분수열 각 문자열 S(i)마다 최소 등장 횟수 a_i와 전체 최소 문자열 수 F가 주어질 때, 조건을 만족하는 가장 긴 연속 부분 문자열을 찾는다. 모든 문자열을 구분 기호 $₁…$_{N‑1} 로 연결해 하나의 문자열 Z를 만든 뒤, Z에 대한 접미사 배열과 LCP 배열을 O(|Z|·log |Z|) 시간에 구축한다. 슬라이딩 윈도우를 이용해 현재 윈도우에 포함된 접미들의 원본 문자열별 등장 횟수를 유지하고, 윈도우가 유효하면 RMQ를 통해 최소 LCP 값을 구해 후보 길이를 업데이트한다. 전체 알고리즘은 접미사 배열·LCP 구축 O(|Z|·log |Z|)와 윈도우 이동 O(|Z|)로 구성돼 전체 복잡도는 O(|Z|·log |Z|)이다. Ⅴ. 최장 공통 비연속 부분수열(가중치) K개의 문자열에 각 문자 위치마다 가중치 wp(i, j)가 부여되고, agg₁·agg₂ 라는 두 단계 집계 함수를 통해 전체 가중치를 정의한다. 일치 튜플(p₁,…,p_K)을 사전식 순서로 생성하기 위해 각 문자열에 문자별 위치 리스트 L(i, c)를 만든다. 이후 사전식 순서대로 튜플을 탐색하면서 (K‑1) 차원 범위 트리를 유지해 현재 튜플보다 앞선 모든 튜플 중 최대 가중치를 빠르게 조회한다. DP 형태의 wmax(p₁,…,p_K)=agg₁(w(p₁,…,p_K), max{wmax(p'₁,…,p'_K) | p'ᵢ

원본 논문

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

댓글 및 학술 토론

Loading comments...

의견 남기기