본문 바로가기
Data Structure

Tree Structure 노트9 - Trie

by SuldenLion 2022. 4. 11.
반응형

탐색 트리 트라이

문자열 탐색을 위한 Trie(Prefix tree) 

 

내용이 있다는 것과 그것이 '인식될 수 있는 형식'으로 표현된 것은 다르다.

주소 시스템 같이 내용이 많은걸 할때 씀. 휴대 전화에서 쓰이는 것 같은 예측 문자나 자동 완성에 필요한 사전을 저장하는 것들도 일반적인 응용중 하나/ 주로 문자열이 key인 경우가 많음./ 노드의 모든 자손은 노드에 연관된 문자열의 공통 접두사를 공유한다. 루트는 빈 문자열에 연관된다.

 

Trie의 장단점 :

ㆍ트라이는 문자열 검색이 빠름.

ㆍ문자열 탐색시, 하나하나 모두 비교하면서 탐색을 하는 것 보다 시간 복잡도 측면에서 훨씬 효율적임.

ㆍ각 노드에서 자식들에 대한 포인터들을 배열로 모두 저장하고 있다는 점에서 저장 공간의 크기가 크다는 단점도 있음.

 

구현 :

key에는 해당 노드의 문자가 들어가고, child에는 자식노드가 포함되게 한다. / data는 문자열이 끝나는 위치를 알려주는 역할을 한다. / 해당 노드에서 끝나는 문자열이 없을 때는 None으로 내버려둔다.

 

가장 긴 문자열의 길이가 L이고 총 문자열들의 수가 M일 때, Trie의 생성 시간 복잡도는 O(M*L), 탐색 시간 복잡도는 O(L).

 

Trie에서 문자열 탐색 : 'abc'문자열이 있는가를 탐색한다 할때

- Head의 child에 'a'가 존재 --> 'a노드' (key 'a')로 이동. / 'a'노드의 child에 'b'가 존재 -->  'b노드' (key 'b')로 이동 /  'b'노드의 child에 'c'가 존재 -->  'c노드' (key 'c')로 이동 / 문자열 탐색 완료. 현재 노드 'c'에 Data가 존재하면 문자열이 존재하는 것.

 

 c

  |

 o

  |

 m

  |

 p

  |

 u 

  |

  t

|   |

e  i

|   |

r  n

    |

   g

 

Radix Tree(Compact Trie) (짜부러트린 트라이)

여기서 radix는 node가 가질 수 있는 최대 자식의 갯수이다(서로 구분되는 문자의 총 갯수). trie도 radix와 같은 의미를 갖지만 radix tree는 trie 중에서 특별히 compact tree를 지칭함.

 

radix trie의 전체 노드 갯수가 O(N)이 되는 것의 증명 : root의 child인 경우 -> 전체 key에 해당하는 하나의 노드만 생김. / 그 외, branch 노드가 없을때, branch 노드 및 그 이하 뒷부분에 해당하는 노드 2개가 생김. branch 노드가 있으면, 그 이하 뒷부분에 해당하는 노드 1개가 생김. / 매 key 추가시 1 또는 2의 상수개 노드만 생기므로 전체 N개의 key에 대해 O(N)의 노드 개수를 가짐.

 

 

comput

/       |

er     ing

반응형

'Data Structure' 카테고리의 다른 글

Data Structure - Priority Queue  (0) 2022.04.14
Tree Structure 노트10 - Suffix Tree  (0) 2022.04.14
Tree Structure 노트8 - Red-Black Tree  (0) 2022.04.11
Tree Structure 노트7 - 2-3 Tree  (0) 2022.04.09
Tree Structure 노트6 - AVL Tree  (0) 2022.04.09

댓글