Skip to main content
QUICK REVIEW

[논문 리뷰] Optimal Dynamic Strings

Paweł Gawrychowski, Adam Karczmarz|arXiv (Cornell University)|2015. 11. 09.
Algorithms and Data Compression참고 문헌 42인용 수 8
한 줄 요약

이 논문은 O(log n) worst-case 시간 내에 업데이트를 수행하고, O(1) worst-case 시간 내에 질의를 수행하는 최적의 동적 문자열 데이터 구조를 제안한다. 이는 연결, 분할, 동등성 비교, 사전순 비교, 그리고 가장 긴 공통 접두사(LCP) 질의를 모두 지원한다. 솔루션은 최적의 한계를 달성하기 위해 랜덤화된 해싱을 사용하는 문맥 무관한 파싱 트리 표현 방식을 사용한다. 이는 업데이트 또는 질의에 대해 O(log n)의 평균적으로 하한선 Ω(log n)을 증명함으로써 최적성의 증명을 얻는다.

ABSTRACT

In this paper we study the fundamental problem of maintaining a dynamic collection of strings under the following operations: concat - concatenates two strings, split - splits a string into two at a given position, compare - finds the lexicographical order (less, equal, greater) between two strings, LCP - calculates the longest common prefix of two strings. We present an efficient data structure for this problem, where an update requires only $O(\log n)$ worst-case time with high probability, with $n$ being the total length of all strings in the collection, and a query takes constant worst-case time. On the lower bound side, we prove that even if the only possible query is checking equality of two strings, either updates or queries take amortized $Ω(\log n)$ time; hence our implementation is optimal. Such operations can be used as a basic building block to solve other string problems. We provide two examples. First, we can augment our data structure to provide pattern matching queries that may locate occurrences of a specified pattern $p$ in the strings in our collection in optimal $O(|p|)$ time, at the expense of increasing update time to $O(\log^2 n)$. Second, we show how to maintain a history of an edited text, processing updates in $O(\log t \log \log t)$ time, where $t$ is the number of edits, and how to support pattern matching queries against the whole history in $O(|p| \log t \log \log t)$ time. Finally, we note that our data structure can be applied to test dynamic tree isomorphism and to compare strings generated by dynamic straight-line grammars.

연구 동기 및 목표

  • 연결, 분할, 동등성 테스트, 사전순 비교, LCP 계산과 같은 기본 연산을 효율적으로 지원하는 동적 문자열 데이터 구조를 설계하는 것.
  • 모든 핵심 연산에 대해 O(log n) worst-case 업데이트 시간(고확률)과 O(1) worst-case 질의 시간을 달성하는 것.
  • 업데이트 또는 질의 중 하나에 대해 평균적으로 Ω(log n)의 하한선을 증명하여 제안된 솔루션의 최적성의 증명을 하는 것.
  • 편집력이 있는 편집 기록과 동적 문법 기반 문자열 생성을 포함한 동적 및 영구적 문자열 컬렉션에서의 패턴 매칭을 지원하도록 데이터 구조를 확장하는 것.

제안 방법

  • 문자열은 재귀적 축소 함수에서 유도된 닫힌 직선 문법에서 유일한 기호로 표현되는 문맥 무관한 파싱 트리 표현 방식을 사용한다.
  • 사전에 계산된 랜덤 비트를 사용하는 랜덤화된 해싱 체계를 유지하여 부분 문자열를 고유하게 식별하고, 상수 시간 비교 및 LCP 질의를 가능하게 한다.
  • 각 기호의 레벨은 랜덤 비트 검사를 통해 결정되는 레벨 기반 구축 방식을 사용하여 고유한 표현과 효율적 탐색을 보장한다.
  • 압축된 파싱 트리를 탐색하기 위해 트리 포인터를 사용하며, 조합적 도구상자(combinatorial toolbox)를 통해 효율적인 포인터 연산과 경로 압축을 가능하게 한다.
  • 영구적 데이터 구조를 통해 문법의 버전을 유지함으로써 히스토리 인식 작업과 편집 간 패턴 매칭을 지원하는 동적 업데이트를 구현한다.
  • 패턴 매칭을 지원하기 위해 보조 구성 요소를 추가한다: 짧은 패턴을 위한 영구적 문자 포인터와 긴 패턴을 위한 이중 계층 색인으로, 질의 및 업데이트 비용은 각각 log²n과 log t log log t 비례한다.

실험 결과

연구 질문

  • RQ1연결, 분할, 동등성, 사전순 비교, LCP와 같은 기본 동적 문자열 연산에 대해 O(log n) worst-case 업데이트 시간과 O(1) worst-case 질의 시간을 달성할 수 있는가?
  • RQ2어떤 동적 문자열 데이터 구조에서도 업데이트 또는 질의에 대해 평균적으로 Ω(log n)의 하한선이 존재하는가?
  • RQ3이 데이터 구조는 비영구적 및 영구적 동적 컬렉션에서 편집력 있는 히스토리와 함께 효율적인 패턴 매칭을 지원하도록 확장할 수 있는가?
  • RQ4이 구조는 동적 트리 동형성 테스트와 동적 직선 문법으로 생성된 문자열을 비교하는 데 사용될 수 있는가?

주요 결과

  • 제안된 데이터 구조는 고확률로 O(log n) worst-case 업데이트 시간과 모든 핵심 연산에 대해 O(1) worst-case 질의 시간을 달성하며, 이는 이론적 하한선과 정확히 일치한다.
  • 등등성 질의 또는 업데이트를 지원하는 모든 동적 문자열 데이터 구조에 대해 평균적으로 Ω(log n)의 하한선이 증명되어, 제안된 솔루션의 최적성의 증명이 된다.
  • 짧은 패턴에 대해서는 질의 시간이 O(|p|)이며, 긴 패턴에 대해서는 O(|p| log²n)이며, 업데이트 시간은 O(log²n)이다.
  • t회의 편집이 있는 영구적 컬렉션의 경우, 업데이트 시간은 O(log t log log t)이며, 패턴 매칭 시간은 O(|p| log t log log t)이다.
  • 문법 기반 표현은 문자열과 문법 내 기호 사이에 이항 대응 관계를 보장하여 정확성의 단순화와 효율적 탐색을 가능하게 한다.
  • 이 접근법은 동적 트리 동형성 테스트와 동적 직선 문법으로 생성된 문자열 비교를 위한 효율적 지원을 가능하게 하여, 적용 범위를 확장한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.