LCP 어레이
LCP array| LCP 어레이 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 유형 | 어레이 | |||||||||
| 발명자 | Manber & Myers (1990) | |||||||||
| 빅 O 표기의 시간 복잡성 및 공간 복잡성 | ||||||||||
| ||||||||||
컴퓨터 과학에서 가장 긴 공통 프리픽스 배열(LCP 배열)은 접미사 배열의 보조 데이터 구조입니다.정렬된 서픽스 배열에서 연속되는 모든 서픽스 쌍 사이의 가장 긴 공통 프리픽스(LCP)의 길이를 저장합니다.
예를 들어, A : =aab [ , , , , ]가 접미사 배열인 경우 A[1] =와 A[2] = 사이의 가장 긴 공통 접두사는 길이가 1이므로 LCP 배열 H에서 H[2] = 1입니다. 마찬가지로 A[2] = 및 A[3] = H3의 LCP는 다음과 같습니다.
서픽스 어레이를 LCP 어레이로 증강하면 서픽스 [1][2]트리의 하향식 및 상향식 트래버설을 효율적으로 시뮬레이션하여 서픽스 어레이의[3] 패턴 매칭을 고속화할 수 있으며 압축 서픽스 [4]트리의 전제 조건이 됩니다.
역사
LCP 배열은 1993년 [3]Udi Manber와 Gene Myers가 문자열 검색 알고리즘의 실행 시간을 개선하기 위해 접미사 배열과 함께 도입했습니다.
정의.
A A를 문자열 , s, n-$(\ Ss_{의 접미사 배열로 . 여기서$(\는 고유하고 사전학적으로 작은 문자입니다.[ , S [ , ]{ display S }는 i { i } { display j 의 서브스트링을 따라서 S[ [ , S [ [ i] , }는 S{ S의 입니다.
( ,) { } ( , ) denote 、 2 v [ ]와 w{ w 사이의 가장 긴 공통 프레픽스의 길이를 나타냅니다.그러면 LCP H [는 과 같은 의 배열입니다 H는 정의되지 H[ lcp (S [ [- , , S [ , ){ H [ i ]= \} ( S [ [ i - 1 ] , ] ) , [ , n ]、 < in \ < i \ n 。H [ \ H [i는 사전 편찬상 작은 접미사의 가장 긴 공통 접두사 와 접미사 배열의 이전 접미사를 저장합니다.
LCP 배열과 접미사 배열의 차이:
- 접미사 배열: 배열의 각 접미사의 사전 순위를 나타냅니다.
- LCP 어레이:사전 편집에 따라 정렬된 후 연속된 두 접미사 간의 최대 길이 접두사 일치가 포함됩니다.
예
S banana S
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| S[i] | b | a | n | a | n | a | $ |
및 대응하는 정렬된 접미사 AA):
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| A[i] | 7 | 6 | 4 | 2 | 1 | 5 | 3 |
접미사가 세로 방향으로 배열된 접미사 배열:
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| A[i] | 7 | 6 | 4 | 2 | 1 | 5 | 3 |
| S[A[i], n][1] | $ | a | a | a | b | n | n |
| S[A[i], n][2] | $ | n | n | a | a | a | |
| S[A[i], n][3] | a | a | n | $ | n | ||
| S[A[i], n][4] | $ | n | a | a | |||
| S[A[i], n][5] | a | n | $ | ||||
| S[A[i], n][6] | $ | a | |||||
| S[A[i], n][7] | $ |
다음으로 LCP H(\ H를 사전 편집적으로 연속되는 서픽스를 비교하여 가장 긴 공통 프레픽스를 결정합니다.
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| H[i] | 정의되어 있지 않다 | 0 | 1 | 3 | 0 | 0 | 2 |
를 들어 [4 ]3 { [ 4 3 { H [ 4]= [, 7 ]= { [S [4 , 7 ]= ana . 의 가 됩니다.사전 편집상 작은 서픽스가 없기 때문에H [ { H [ }는 되어 있지 않습니다.
효율적인 구축 알고리즘
LCP 배열 구축 알고리즘은 접미사 배열의 부산물로 LCP 배열을 계산하는 알고리즘과 LCP 값을 계산하기 위해 이미 구성된 접미사 배열을 사용하는 알고리즘의 두 가지 범주로 나눌 수 있습니다.
Manber & Myers(1993)는 서픽스 배열과 함께 LCP 배열을 O logn O n 시간으로 하는 알고리즘을 제공합니다.Kérkaiinen & Sanders(2003)는 LCP 어레이도 계산하도록 O 시간 알고리즘을 변경할 수 있음을 보여준다.카사이 등 (2001)는 텍스트와 서픽스 배열에 따라 LCP 배열을 계산하는 첫 O( n) \ O ( ) Time Algorithm (FLaAP )를 합니다.
각 텍스트 기호가 1바이트이고 서픽스 또는 LCP 배열의 각 엔트리가 4바이트라고 가정할 때 알고리즘의 주요 단점은 , 서픽스 배열, LCP 배열)의 이 바이트에 불과하다는 것입니다.따라서 Manzini(2004)는 Kasai 등의 알고리즘을 개량한 버전을 만들었다. (2001) (lcp9) 및 공간 점유율을 로 줄였습니다.Kérkkaiinen, Manzini 및 Puglisi(2009)는 Kasai 알고리즘\displaystyle - algorithm)을 개선하여 실행 시간을 향상시킵니다.이 알고리즘은 실제 LCP 배열이 아닌 permated LCP(PLCP; 치환 LCP) 배열을 구축합니다.이 배열에서는 값이 사전 순서가 아닌 텍스트 순서로 표시됩니다.
Gog & Ohlebusch(2011)는 이론적으로는 느리지만((2 O 실제로는 위의 알고리즘보다 빠르다는 두 가지 알고리즘을 제공한다.
2012년 현재[update] 가장 빠른 선형 시간 LCP 어레이 구축 알고리즘은 Fischer(2011년)에 의한 것이며, 이는 Nang, Zhang & Chan(2009)의 가장 빠른 서픽스 배열 구축 알고리즘(SA-IS) 중 하나에 기초하고 있습니다.유타 모리의 DivSufSort를 기반으로 한 Fischer & Kurpicz(2017)는 더욱 빠르다.
적용들
Abouelhoda, Kurtz & Ohlebusch(2004)가 지적한 바와 같이 다음과 같은 종류의 트리 트래버설을 통해 몇 가지 문자열 처리 문제를 해결할 수 있습니다.
- 완전한 서픽스 트리의 상향식 트래버설
- 서픽스 트리의 서브트리의 톱다운 트래버설
- 서픽스 링크를 사용하여 서픽스 트리를 트래버설합니다.
카사이 등 (2001)에서는 서픽스 배열과 LCP 배열만을 사용하여 서픽스 트리의 상향식 트래버설을 시뮬레이트하는 방법을 보여 줍니다.Abouelhoda, Kurtz 및 Ohlebusch(2004)는 LCP 배열 및 추가 데이터 구조를 사용하여 서픽스 배열을 확장하여 이 확장 서픽스 배열을 사용하여 3종류의 서픽스 트리 트래버설을 모두 시뮬레이트하는 방법을 설명합니다.Fischer & Heun(2007)은 범위 최소 쿼리에 대해 LCP 어레이를 전처리함으로써 확장 접미사 어레이의 공간 요건을 줄입니다.따라서 확장 접미사 [2]배열로 서픽스 트리 알고리즘으로 해결할 수 있는 모든 문제도 해결할 수 있습니다.
의 P P가 의 SS의 서브스트링인지 판단하려면 서픽스 배열만 사용하는 경우 log 시간이 .또한 LCP 정보를 사용함으로써 이 바인드를 O[3] log n O n 시간으로 할 수 있습니다.Abouelhoda, Kurtz & Ohlebusch(2004)는 최적의 O 시간을 달성하기 위해 이 실행 시간을 더욱 향상시키는 방법을 보여줍니다.따라서 서픽스 배열 및 LCP 배열 정보를 사용하면 서픽스 트리를 사용하는 것처럼 신속하게 결정 쿼리에 응답할 수 있습니다.
LCP 배열은 압축된 접미사 트리의 필수적인 부분이기도 합니다.접미사 트리 기능은 접미사 링크 및 가장 낮은 공통 상위 [5][6]쿼리와 같은 완전한 접미사 트리 기능을 제공합니다.또한 접미사 배열과 함께 사용하여 O() \ O ( )으로 [2][7][8][9]Lempel-Ziv LZ77 인수분해를 계산할 수 있습니다.
(\ n)의문자열 Sdisplaystyle S에 대해 가장 오래 반복되는 서브스트링 문제는 배열A(\A)와 LCP 배열 모두를 하여 n로 해결할 수 있습니다.LCP 어레이의 최대값 v a 및 v {\가 저장되어 있는 대응하는 i {\ i를 찾으려면 LCP 어레이를 통해 선형 스캔하면 됩니다.최소 2회 발생하는 가장 긴 서브스트링은 [ [ , [ + x - S [ [ ],[] + _ { - 1。
이 섹션의 나머지 부분에서는 LCP 어레이의 다음 두 가지 애플리케이션에 대해 자세히 설명합니다.문자열의 서픽스 배열과 LCP 배열을 사용하여 대응하는 서픽스 트리를 구축하는 방법 및 LCP 배열의 범위 최소 쿼리를 사용하여 임의의 서픽스에 대한 LCP 쿼리에 응답하는 방법.
패턴 발생 횟수 찾기
이 문서는 Wikipedia의 품질 기준을 충족하기 위해 청소가 필요할 수 있습니다.구체적인 문제는 이 섹션은 StackOverflow 응답의 스트레이트 카피이므로 질문에 대한 응답 형식으로 되어 있다는 것입니다.(2016년 6월 (이 및 ) |
T N N(\ N[3]에서 특정 P m P m의 발생 횟수를 찾으려면 ,
- T{\ T의 접미사 배열에 대해 이진 검색을 사용하여 모든 P{\ P의 및 끝 위치를 찾습니다.
- 검색 속도를 높이기 위해 LCP 어레이, 특히 LCP 어레이의 특수 버전(아래 LCP-LR)을 사용합니다.
표준 바이너리 검색(LCP 정보 없음)을 사용할 때의 문제는 실행해야 각 ON O N 비교에서 P를 서픽스 배열의 현재 엔트리와 비교한다는 것입니다.즉, 최대 m자의 문자열 전체를 비교합니다.복잡도는 ( N ){ O ( \ N)} 입니다.
LCP-LR 어레이는 다음과 같은 방법으로 + logN)\+\ N로 개선합니다.
바이너리 검색 알고리즘의 어느 시점에서도, 종래와 같이 접미사 배열의 범위 와 그 M M을 고려하여 왼쪽 서브 범위 에서 검색을 계속할지를 결정합니다., , ){。판정을 위해 P P를M(\ M의 문자열과 합니다.P P가 M M과 동일한 경우 이 완료됩니다그러나 그렇지 않은 경우의 첫 ({P를 비교한 후P({ P가 사전 편찬적으로M({M보다 작은지 하였습니다다음 단계에서는 ( {과(와) 새로운 M { M'}을를) 고려합니다
M ........ M' ....알고 있는 R: lcp(P,M)==k
여기서 문제는 O1O(lookup이 M 및 M M M)의 가장 긴 공통 프레픽스를 나타내도록 LCP-LR이 미리 계산된다는 것입니다
이전 에서) M {\ M 자체의 접두사가{{P : c ( , ) { \{} (, M ) k 의 개의 문자가 .
- 사례 1:k<>l cp(M, M′){\displaystyle k<, \mathrm{lcp}(M,M의)}, 즉 P{P\displaystyle}. 이 M의(k+1)-th 성격'을 의미하는 그 M의, 그리고 이후 P사전 편찬 상. M보다 크면, 그 사전 편찬 상.보다 더 커야만 한다 같은 상식에서 M으로 적은 접두사 문자보다 MM'와 공통점만 가지고 있다.M'too. 오른쪽 절반(M', ...R)으로 계속 진행합니다.
- 사례 2:k>l cp(M, M′){\displaystyle k>, \mathrm{lcp}(M,M의)}, 즉 P{P\displaystyle}공통적으로 M{M\displaystyle}과 더 많은 접두사 문자보다 M{M\displaystyle}공통적으로 M′{\displaystyle M의}과 맺고 있다. M.에 결과적으로, 만약 우리가 비교할 P{P\displaystyle}′ M 공통 접두사는 k k보다 M M은 사전 편찬상P(\ P보다 크므로 실제로 비교하지 않고 왼쪽 절반
- 케이스 3: ( , ) { k = \ {} ( , ' )} 。따라서 M과 M'은 모두 첫 k { k자의P { P와 동일합니다.왼쪽 절반으로 계속할지 오른쪽 절반으로 계속할지 결정하려면 ( 1)번째문자부터 하여 P P와 M M을 하면 됩니다.
- 우리는 반복적으로 계속한다.
전체적인 효과는 P P의 문자가 텍스트의 어떤 문자와도 두 번 이상 비교되지 않는다는 것입니다.문자 비교의 총수는 m{\ m으로 제한되어 있기 때문에 총 복잡도는 O + N {\ O 입니다.
서픽스 배열의 임의의 2개의 엔트리 사이의 lcp를O(O(1)의 으로 알 수 있도록 LCP-LR을 미리 계산해야 합니다.표준 LCP 배열에서는 연속되는 엔트리의 만 얻을 수 있습니다., i\ i는 의\displaystyle i에 대해 사용할 수 있습니다.다만, 상기의 설명에 기재된 MM과 은반드시 연속되는 것은 아닙니다.
여기서 중요한 것은 바이너리 검색 중에 특정 범위 , (LR))만 발생한다는 것을 인식하는 것입니다.항상 ( 으로시작하고 중앙에서 분할한 후 왼쪽 또는 으로 반복하여 절반씩 분할합니다.다른 관점에서 보면: 서픽스 배열의 모든 엔트리는 바이너리 검색 중 정확히 하나의 가능한 범위의 중앙점으로 발생합니다.따라서 바이너리 검색 중에 역할을 할 수 있는 N개의 고유 범위 … …)(\ M R가 있습니다.이러한 범위에서는 p M와 l (\displaystyle \ ( 를 사전에 할 수 있습니다레인지즉, 의 값이 미리 계산된 이므로 LCP-LR의 는 O O입니다.
또한 표준 LCP 어레이에서 LCP-LR의 2N 을 O 시간 로 계산하는 간단한 재귀 알고리즘이 있습니다.
정리하면:
- LCP-LR은 LCP에서O ( {\O ( 시간 및 ( ( {\O ()= 공간으로 할 수 있습니다.
- 바이너리 검색 중에 LCP-LR을 사용하면 검색 절차를 O logN O N에서 O + g O N로 가속화할 수 있습니다.
- 2개의 바이너리 검색을 사용하여 PP의 범위의 왼쪽 끝과 오른쪽 끝을 판별할 수 있습니다.일치 범위의 길이는 P의 발생 횟수에 대응합니다.
접미사 트리 구성
S ,,n$ { \의 접미사 A(\ A와 LCP H(\ H를 지정하면해당 접미사 S)가 될 수 있습니다.다음 아이디어를 기반으로 합니다.사전 편집상 가장 작은 접미사에 대한 부분 접미사 트리에서 시작하여 접미사 배열에서 지정된 순서대로 다른 접미사를 반복해서 삽입합니다.
를 0 in 0 i n의 부분 서픽스 트리로 합니다. d는 S 의 루트에서로의 모든 경로 라벨 연결 길이입니다.
루트만으로 된 트리인 S 0 ST_부터 시작합니다.[ + A[ + ]{ style _ {} } 、 최근 삽입된 A [ 에서 시작하여 루트까지 오른쪽 끝에 있는 ( v가 d 1 ( \ d로 이동합니다.
다음 두 가지 경우를 구분할 필요가 있습니다.
- + : 루트투 \ vequals equals equals equals equals equals equals onatenatenatenatenatenatenatenA i A [ A [ + A [ + 의 가장 긴 공통 프레픽스입니다.
이 경우A[ i + 1 A + ]{ v}의 새로운 x { x}로서 하고 가장자리 ){(v , x )}에 S [i+n의 을 따라서 엣지 라벨은 루트 v의 라벨 연결로 표현되지 않은 A [+ {{ A의 나머지 문자로 구성됩니다.
그러면 부분 가 + 1(\1로 생성됩니다. - : 루트 투v { 경로의 라벨이 연결된 경우 A [ 및 [+ 의 긴 공통 접두사보다 적은 문자가 표시되며 누락된 문자가 v엣지에 포함되어 있음을 의미합니다오른쪽 끝따라서 이 에지를 다음과 같이 분할해야 합니다.
w를 S 의 가장 오른쪽 경로에 vv의 이라고 .
- 가장자리 ,) { , ) 를 삭제합니다.
- S [ [ + () A[ ] +D ( ) 、 [ i + 1 - { S [ [ ]+ ()의 새로운 내부 와 새로운엣지 (v 를 추가합니다.새 라벨은 A[ { A [ ] aaA [ i] a a [ + 1]{ [ i + 1]} the the the ofersersersersersersersersersersersersersersersersersersersersersers of of of of of of of of of of따라서 루트 투 y 경로의 라벨을 연결하면 A[ \A [ i] A[ + \A [ + 의 가장 긴 공통 프레픽스가 표시됩니다.
- 생성된 내부 에 S[ [ + [ + [ + () - 1 { S [ i ]+ 1로w {w}를 합니다.새 라벨은 삭제된 에지 v ,w)의 나머지 문자(, w ) \ , w ) \displaystyle (v , w) \ (v , y ) \display ( v , )} )로 구성됩니다.
- [ + A [ + ]{ x}{ }의 새로운 에 S[ [ + [ + 1엣지 ( , x로 연결합니다 따라서 엣지 라벨은 루트 v의 라벨 연결로 표현되지 않은 A [+ {{ A의 나머지 문자로 구성됩니다.
- 그러면 부분 가 + 1(\1로 생성됩니다.
단순한 상각 인수는 이 알고리즘의 실행 시간이 O( O ( )로을 나타냅니다.
에서 (마지막 v(\ v를 하고) S의 끝에 있는 를 걸어 올라가 횡단한 노드는 A[+ A가 트리에 새 리프로 추가되면 경로에서 삭제됩니다.이러한 노드는 이후의 모든 > \ j 에서는 다시 통과하지 않습니다.따라서 의가 모두 통과합니다.
임의 접미사에 대한 LCP 쿼리
LCP H {\ H에는 배열A {\ A의 모든 연속된 접미사 쌍 중 가장 긴 공통 접두사 길이만 됩니다. 단, 역접미사 A- {\A } ([] A 즉의 j({S})에서 시작하는 S [ S는최소 디스플레이스타일의 쿼리에서 - [ Aj 위치에 됩니다.e: 임의 접미사의 가장 긴 공통 접두사 길이를O (O(1) 시간으로 합니다.
접미사 배열의 사전적 순서에 접미사S [, n] { [ i , n} 및 [ , { S [ , n ]{ S[ j , n]의 모든 접미사 A-[ 의 위치 사이의 접두사여야 합니다접미사 A - [ A^ { - }[ { displaystyle j의 위치따라서 이들 서픽스가 공유하는 최장 프리픽스의 길이는 H[ [ +,A - [ H [ A^ { - } [ ]+ { - 1 ][ ]}의 입니다.이 값은 범위 최소 쿼리에 대해H(\ H가 사전 처리되는 일정 시간 내에 찾을 수 있습니다.
n)와문자열S(\ i,의2개의 의 위치 i S)가 A - [A - [ j로 됩니다.\ { - 1 [ i]< S[ S n 및 S])의 가장 긴 공통 프리픽스의 길이는 다음과 같이 계산할 수 있습니다. δ() [ 1 -
메모들
- ^ 카사이 외 2001년
- ^ a b c Abouelhoda, Kurtz & Ohlebusch 2004.
- ^ a b c d Manber & Myers 1993.
- ^ Ohlebusch, Fischer & Gog 2010.
- ^ 사다케인 2007년
- ^ Crochemore & Illie 2008.
- ^ Crochemore, Ilie & Smyth 2008.
- ^ Chen, Puglisi 및 Smyth 2008.
레퍼런스
- Abouelhoda, Mohamed Ibrahim; Kurtz, Stefan; Ohlebusch, Enno (2004). "Replacing suffix trees with enhanced suffix arrays". Journal of Discrete Algorithms. 2: 53–86. doi:10.1016/S1570-8667(03)00065-0.
- Manber, Udi; Myers, Gene (1993). "Suffix Arrays: A New Method for On-Line String Searches". SIAM Journal on Computing. 22 (5): 935. CiteSeerX 10.1.1.105.6571. doi:10.1137/0222058. S2CID 5074629.
- Kasai, T.; Lee, G.; Arimura, H.; Arikawa, S.; Park, K. (2001). Linear-Time Longest-Common-Prefix Computation in Suffix Arrays and Its Applications. Proceedings of the 12th Annual Symposium on Combinatorial Pattern Matching. Lecture Notes in Computer Science. Vol. 2089. pp. 181–192. doi:10.1007/3-540-48194-X_17. ISBN 978-3-540-42271-6.
- Ohlebusch, Enno; Fischer, Johannes; Gog, Simon (2010). CST++. String Processing and Information Retrieval. Lecture Notes in Computer Science. Vol. 6393. p. 322. doi:10.1007/978-3-642-16321-0_34. ISBN 978-3-642-16320-3.
- Kärkkäinen, Juha; Sanders, Peter (2003). Simple linear work suffix array construction. Proceedings of the 30th international conference on Automata, languages and programming. pp. 943–955. Retrieved 2012-08-28.
- Fischer, Johannes (2011). Inducing the LCP-Array. Algorithms and Data Structures. Lecture Notes in Computer Science. Vol. 6844. pp. 374–385. arXiv:1101.3448. doi:10.1007/978-3-642-22300-6_32. ISBN 978-3-642-22299-3.
- Manzini, Giovanni (2004). Two Space Saving Tricks for Linear Time LCP Array Computation. Algorithm Theory - SWAT 2004. Lecture Notes in Computer Science. Vol. 3111. p. 372. doi:10.1007/978-3-540-27810-8_32. ISBN 978-3-540-22339-9.
- Kärkkäinen, Juha; Manzini, Giovanni; Puglisi, Simon J. (2009). Permuted Longest-Common-Prefix Array. Combinatorial Pattern Matching. Lecture Notes in Computer Science. Vol. 5577. p. 181. doi:10.1007/978-3-642-02441-2_17. ISBN 978-3-642-02440-5.
- Puglisi, Simon J.; Turpin, Andrew (2008). Space-Time Tradeoffs for Longest-Common-Prefix Array Computation. Algorithms and Computation. Lecture Notes in Computer Science. Vol. 5369. p. 124. doi:10.1007/978-3-540-92182-0_14. ISBN 978-3-540-92181-3.
- Gog, Simon; Ohlebusch, Enno (2011). Fast and Lightweight LCP-Array Construction Algorithms (PDF). Proceedings of the Workshop on Algorithm Engineering and Experiments, ALENEX 2011. pp. 25–34. Retrieved 2012-08-28.
- Nong, Ge; Zhang, Sen; Chan, Wai Hong (2009). Linear Suffix Array Construction by Almost Pure Induced-Sorting. 2009 Data Compression Conference. p. 193. doi:10.1109/DCC.2009.42. ISBN 978-0-7695-3592-0.
- Fischer, Johannes; Heun, Volker (2007). A New Succinct Representation of RMQ-Information and Improvements in the Enhanced Suffix Array. Combinatorics, Algorithms, Probabilistic and Experimental Methodologies. Lecture Notes in Computer Science. Vol. 4614. p. 459. doi:10.1007/978-3-540-74450-4_41. ISBN 978-3-540-74449-8.
- Chen, G.; Puglisi, S. J.; Smyth, W. F. (2008). "Lempel–Ziv Factorization Using Less Time & Space". Mathematics in Computer Science. 1 (4): 605. doi:10.1007/s11786-007-0024-4. S2CID 1721891.
- Crochemore, M.; Ilie, L. (2008). "Computing Longest Previous Factor in linear time and applications". Information Processing Letters. 106 (2): 75. CiteSeerX 10.1.1.70.5720. doi:10.1016/j.ipl.2007.10.006.
- Crochemore, M.; Ilie, L.; Smyth, W. F. (2008). A Simple Algorithm for Computing the Lempel Ziv Factorization. Data Compression Conference (dcc 2008). p. 482. doi:10.1109/DCC.2008.36. hdl:20.500.11937/5907. ISBN 978-0-7695-3121-2.
- Sadakane, K. (2007). "Compressed Suffix Trees with Full Functionality". Theory of Computing Systems. 41 (4): 589–607. CiteSeerX 10.1.1.224.4152. doi:10.1007/s00224-006-1198-x. S2CID 263130.
- Fischer, Johannes; Mäkinen, Veli; Navarro, Gonzalo (2009). "Faster entropy-bounded compressed suffix trees". Theoretical Computer Science. 410 (51): 5354. doi:10.1016/j.tcs.2009.09.012.
- Fischer, Johannes; Kurpicz, Florian (5 October 2017). "Dismantling DivSufSort". Proceedings of the Prague Stringology Conference 2017. arXiv:1710.01896.
외부 링크
- Fischer(2011)에 기술된 코드의 임시 구현 거울
- SDSL: 간결한 데이터 구조 라이브러리 - 다양한 LCP 어레이 구현, Range Minimum Query(RMQ) 지원 구조 및 많은 간결한 데이터 구조를 제공합니다.
- 서픽스 배열 및 LCP 배열(Java)을 사용하여 에뮬레이트된 상향 서픽스 트리 트래버설
- 텍스트 색인화 프로젝트(접미사 트리, 접미사 배열, LCP 배열 및 버로우스의 선형 시간 구성)휠러 변환)