접미사 배열: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
잔글 →‎랭크: 내용 추가
잔글 →‎랭크: 내용 추가
165번째 줄:
랭크 기반 정렬을 수행하기 전에 우선 문자열<math>S</math>의 접미사들을 첫번째 자리와 두번째 자리에 대해 사전순으로 정렬해준다. 이때 해당하는 자리에 문자가 없으면 모든 문자보다 앞서도록 처리한다. 작업을 수행하고 나면 앞의 두 자리에 대해 정렬되어있게 된다. '''모든''' 접미사 <math>S[i,n]</math>에 대해 앞의 두 자리에 대해 정렬이 되어있으므로 또다른 접미사인<math>S[i+2,n]</math>에 대한 순서도 알 수 있다. 이 순서를 다음 랭크로 정하고 이전의 두 자를 비교한 정보를 더하면 접미사들을 네 글자까지 정렬한 결과를 알 수 있다. 이때 첫번째, 두번째 글자에 대한 정보는 필요없고 정렬된 순서만 필요하므로 두개의 숫자를 압축할 수 있다.
 
첫번째 랭크는 접미사 앞의 두 자리까지를 비교한 순서의 정보를 갖는다. 이는 접미사의 첫번째 글자와 두번째 글자에 대해 정렬한 뒤 순차적으로 구할 수 있다. 문자열의 끝의 랭크를 -1으로 놓고, 정렬된 순서대로 탐색하면서 첫번째 글자와 두번째 글자에 대해 이전 접미사와 같으면 같은 랭크를 부여하고, 아니면 1을 더한 랭크를 부여한다. <math>S</math>=<code>banana</code>에 대한 첫번째 글자와 두번째 글자에 대한 값과 압축된 랭크는 다음과 같다.
{| class = "wikitable"
! align = "left" | 접미사 !! align = "left" | <math>i</math> !! align = "left" | 첫번째 글자 !! align = "left" | 두번째 글자 !! align = "left" | 정보를 압축해서 만든 첫번째 랭크
|- class = "odd"
| align = "left" | $ || '''7''' || -1 || -1 || -1