일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- Unity
- stack
- dirtyflag pattern
- level3
- binary search
- 8-Puzzle
- algorithm
- BOJ
- 3D RPG
- Flyweight Pattern
- Bronze
- Zenject
- SWEA
- Modern C++
- 프로그래머스
- solid 원칙
- trie
- BFS
- Silver
- Gold
- level1
- PrefixSum
- effective C++
- Project
- knapsack Problem
- programmers
- 프로세스 상태
- Euclidean
- two pointer
- LEVEL2
Archives
- Today
- Total
Patrick's Devlog
[Algorithm] 트라이(Trie) 자료구조 본문
1. 트라이
탐색 트리의 일종이며, 동적 집합이나 연관 배열을 저장하는데 사용되는 트리 자료구조이다. 문자열을 저장하고 효율적으로 탐색하기 위한 자료구조로 생각하면 된다. 이진 탐색 트리와 달리 트리의 어떤 노드도 그 노드 자체와 연관된 키는 저장하지 않는다. 대신 노드가 트리에서 차지하는 위치가 연관된 키를 정의한다. 즉, 키의 값은 자료 구조 전체에 분산됨을 의미한다. 노드의 모든 자손은 노드에 연관된 문자열의 공통 접두사를 공유한다. 메모리에 최적화된 경우에는 기수 트리가 된다.
2. 장단점
- 문자열 검색 시 빠른 검색 가능
- 문자열 탐색 시 하나씩 전부 비교하는 것 보다 시간 복잡도 측면에서 효율적
- 각 노드에서 자식들에 대한 포인터들을 배열로 모두 저장하고 있으므로 공간적인 측면(메모리)에서는 비효율적
3. 구현
키의 길이가 m일 때 탐색, 삽입 모두 O(m) 시간에 수행된다.
트라이의 자세한 구현사항은 이곳을 참조한다.
참고문서
https://velog.io/@kimdukbae/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%9D%BC%EC%9D%B4-Trie
https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9D%BC%EC%9D%B4_(%EC%BB%B4%ED%93%A8%ED%8C%85)
'Algorithm > Algorithms & Data Structure' 카테고리의 다른 글
[Algorithm] 누적합(Prefix Sum) (0) | 2024.08.29 |
---|---|
[Algorithm] Monotonic Stack (0) | 2024.07.22 |
[Algorithm] 위상 정렬(Topological Sort) (1) | 2024.01.22 |
[Algorithm] 유클리드 알고리즘 (0) | 2023.01.08 |
[Algorithm] 투 포인터 알고리즘(Two Pointer Algorithm) (1) | 2022.11.22 |