티스토리 뷰
Suffix Array
suffix array란 string의 suffix로 이루어진 sorted array 이다.
예시를 통해 이해하도록 하자.
"camel" 이란 string이 suffix는 다음과 같다.
Index | suffix string |
---|---|
이것을 순서대로 정렬하면,
Index | suffix string |
---|---|
따라서 suffix array는 {1,0,3,4,2} 가 된다.
suffix string을 저장할 필요 없이 index만 저장하면 된다.
Code
- naive하게 만들기
typedef struct Suffix{
string s;
int idx;
}Suffix;
bool Compare(Suffix a, Suffix b){
return a.s < b.s;
}
int* naive_suffix_array(string s){
int n = s.size();
Suffix* A = (Suffix*)malloc(sizeof(Suffix)*n);
int* T = (int*)malloc(sizeof(int)*n);
for(int i = 0 ; i < s.size();i++){
A[i].s = s.substr(i,n-i);
A[i].idx = i;
}
sort(A,A+n,Compare);
for(int i = 0; i < n; i++)
T[i] = A[i].idx;
return T;
}
이 경우 sorting할 때 이 걸린다.
Compare를 할 때 O(1)이 아니라 O(n) 이 걸리기 때문이다!
T[n] = 2*T[n/2] + O(n^2) 에서
(트리를 그려보면 높이는 log n이고 각 높이에서 n^2 만큼 계산하므로.. 그림 잘 생각해두자.)
적용할 수 있는 문제
차차 업데이트 해야겠다. -_- string에서의 정렬과 관련된 문제에 적용할 수 있을 것이다.
'컴퓨터 과학 이야기(Computer Science) > 자료구조&알고리즘' 카테고리의 다른 글
Bit vector (비트벡터) (0) | 2018.10.19 |
---|---|
Binary Indexed Tree (BIT,펜윅 트리) (0) | 2018.08.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 사이킷런
- Pytorch Variable
- Bit vector
- sublime text
- 파이토치
- vs code
- 박사과정 #PhD
- r
- pytorch
- Pytorch .data
- vscode
- cross validation
- Visual Studio Code에서 R
- 비트 벡터
- scikit learn
- variable
- 사이킷런 KFold
- sklearn.model_selection.KFold
- 비쥬얼스튜디오코드
- 교차검증
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함