๋ฌธ์์ด ๊ฒ์ ๋ฐ ์ ์ฅ์ ํจ์จ์ ์ผ๋ก ํ ์ ์๊ฒ ํด์ฃผ๋ ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ
- ๊ฒ์์ด ์๋์์ฑ์ ์ฌ์ฉ
- ๋งํฌ๋ ๋ฆฌ์คํธ ์ฌ์ฉ
์์ฑ
- ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋งจ ์ ๋ฌธ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์จ๋ค.
- ํ์ฌ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ ธ๋๊ฐ ์กด์ฌํ๋ฉด, ๊ทธ ๋ ธ๋๋ก ๋ค์ ๋ฌธ์์ด์ ํ์ํ๊ณ , ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋ ธ๋๋ฅผ ์๋ก ์์ฑํ ํ ๋ค์ ๋ฌธ์์ด์ ํ์ํ๋ค.
- ๋ง์ง๋ง ๋ฌธ์์ด์ด ํ์ฌ ๋ฌธ์๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ๋์ด์ ์ฝ์ ํ ๋ฌธ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ๋๋ ๋ฌธ์์ด์์ ํ์ํ๋ค.
ํ์
- ํ์ํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ํ์ฌ ๋
ธ๋(๋ฃจํธ๋
ธ๋)์ ์์ ๋
ธ๋์ ํด๋น ๋ฌธ์์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ๋ค์ ๋ฌธ์๋ก ๋์ด๊ฐ๋ค.
- ๋ง์ฝ ํ์ฌ ๋ ธ๋์ ์์ ๋ ธ๋์ ํด๋น ๋ฌธ์์ ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ํธ๋ผ์ด์ ์ฝ์ ๋์ง ์๋ ๋ฌธ์์ด์ด๋ค.
- ์์ ๊ณผ์ ์ ๋ฌธ์์ด์ ๋ง์ง๋ง๊น์ง ๋ฐ๋ณตํ๋ค.
- ๋ง์ง๋ง ๋ฌธ์์ด๊น์ง ๋
ธ๋์ ์กด์ฌํ ๊ฒฝ์ฐ, ๋๋ ๋ฌธ์์ด ํ์๋ฅผ ํ์ธํ๋ค.
- ๋ง์ฝ ๋ฌธ์์ด์ด ๋๋ฌ๋ค๋ ํ์๊ฐ ๋์ด์์ผ๋ฉด ํด๋น ๋ฌธ์์ด์ ํธ๋ผ์ด์ ์กด์ฌํ๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์๋ค๋ฉด ํด๋น ๋ฌธ์์ด์ ํธ๋ผ์ด์ ์กด์ฌํ์ง ์๋ ๋ฌธ์์ด์ด๋ค.
- ๋น ๋ฅธ ๋ฌธ์์ด ๊ฒ์์ด ๊ฐ๋ฅํ๋ค.
- ์๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- ์์ฑ ์๊ฐ ๋ณต์ก๋ -> O(M*L)
- ํ์ ์๊ฐ ๋ณต์ก๋ -> O(L)
- M์ ์ด ๋ฌธ์์ด์ ์, L์ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ๊ธธ์ด
- ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ค.
- ์ ์ฅ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ํฌ๋ค.
๋ ธ๋ ๊ตฌ์กฐ
typedef struct node{
int fin; //๋๋ ๋ฌธ์์ด์์ ์๋ฆฌ๋ ๋ณ์
struct node *child[26] //์ํ๋ฒณ 26๊ฐ(์์์ด ๋ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์)
}node;
๋ ธ๋ ์์ฑ
node *newNode(){
node* new=(node *)malloc(sizeof(node));
new-> fin=0;
for(int i=0;i<26;i++) new->child[i]=0; //0์ผ๋ก ์ด๊ธฐํ
return new;
}
์ฝ์
void insert(node *root, const char* str){
int len=strlen(str);
node* now=root;
for(int i=0;i<len;i++){
if(!now->child[str[i]-'a']) now->child[str[i]-'a']=newNode(); //ํด๋น ๋ฌธ์๋ฅผ ๊ฐ์ง ๋
ธ๋๊ฐ ์๋ค๋ฉด ์์๋
ธ๋ ์์ฑ
now=now->child[str[i]-'a']; //๋ฌธ์ ์ ์ฅ
}
now->fin=1; //๊ธธ์ด๋งํผ ์ ์ฅํ๋ฉด, ๋๋ ๋ฌธ์์ด์์ ์๋ฆฐ๋ค
}
ํ์
int search(node *root, const char* str){
node* now=root;
for(int i=0;i<strlen(str);i++){
if(!now->child[str[i]-'a']) return 0;
now=now->child[str[i]-'a'];
}
return now->fin;
}
- ํธ๋ผ์ด์์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ์ข๊ฒ ๋ง๋ ์๋ฃ๊ตฌ์กฐ.
- compact prefix tree๋ผ๊ณ ๋ ํจ
- ํ๋ก ์๋ ์์์ธ ๊ฒฝ์ฐ, ๋ถ๋ชจ๋ ธ๋์ ํฉ์ณ์ ๊ณต๊ฐ ์ต์ ํ๋ฅผ ํจ.
- radix Tree์ ํผ์ฉํด์ ์ฌ์ฉ๋๊ธฐ๋ ํจ
์ฐธ๊ณ ์๋ฃ
https://yabmoons.tistory.com/379
https://en.wikipedia.org/wiki/Radix_tree
https://brunch.co.kr/@springboot/75