본문 바로가기
Bioinformatics/Algorithms

접미사 배열(Suffix Array)

by 임은천 2012. 11. 22.

접미사 배열은 접미사 트리의 공간 소모량을 줄이기 위해 고안된 데이터 구조이다. 이 데이터 구조는 아리조나 대학의 Udi Manber  씨와 Gene Myers 씨에 의해서 1989년 5월에 제안되었다.

다음은 해당 논문의 연결이다.

http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fwebglimpse.net%2Fpubs%2Fsuffix.pdf&ei=5vytUPW1DsK1tAa214HYDA&usg=AFQjCNFj4JQQ2S1vdKZ09py7_SLZ45m_SA&sig2=b_RSaBtaOhl2V_yGzA2gHw


이 데이터 구조는 기본적으로 다음과 같이 생성된다.

  1. 주어진 문자열에 대한 모든 접미사 문자열을 가장 긴 것부터 가장 짧은 것 까지 나열한다.
  2. 나열하는 과정에서 각 접미사 문자열을 순서대로 번호를 할당한다.
  3. 문자열을 사전식 순서의 오름차순으로(가나다) 정렬한다.
  4. 접미사 배열은 각 접미사 문자열에 할당된 번호만을 가진 배열이다.

예를 들어, banana를 정렬하여 보자.


숫자 

0

5

6

문자[숫자]

b

a

n

a

n

a

$


문자열의 마지막은 사전식 순서에서 사용되는 문자 집합에서 가장 큰 값을 가진 문자를 이용한다. 이 문자열에 대한 접미사 문자열은 다음과 같다.


접미사 문자열

숫자

banana$

0

anana$

1

nana$

2

ana$

3

na$

4

a$

5

$

6


그리고 이 접미사 문자열들을 사전식 순서대로 정렬하면 다음과 같다.


 접미사 문자열

숫자 

$

a$

5

ana$

3

anana$

1

banana$ 

0

na$

4

nana$

2


접미사 배열은 정렬된 숫자를 배열화 하여 얻을 수 있다.

즉, A = (6, 5, 3, 1, 0, 4, 2)이다.

현재까지 개발된 Suffix Array 생성에 대한 알고리즘의 벤치 마크 결과는 다음을 참고하기 바란다.

http://code.google.com/p/libdivsufsort/wiki/SACA_Benchmarks

댓글