728x90
- DB
- Index
Index 작동 원리- Index 종류
B-Tree 인덱스Hash IndexesBitmap IndexGIST(Generalized Search Tree)R-TreeFull Text IndexSpatial Index- Trie(Prefix Tree) Index
- Covering Index
- 영속성
- 트랜잭션
- ORM
- ACID
- N+1 문제
- DB 정규화
- Data Replication
- sharding 전략
- CAP 이론
- Index
란?
- 문자열을 효율적으로 저장하고 검색하기 위한 트리 기반 데이터 구조
- 문자열 집합에서 공통 접두사를 공유하는 문자열을 효율적으로 관리하는데 유용함.
- 텍스트 검색, 자동 완성, 사전 구현 등에서 널리 사용됨.
Trie 구조
Trie 는 노드(node)와 간선(Edge) 로 구성된 트리임. 각 노드는 하나의 문자(character) 를 나타내며, 루트 노드부터 각 노드로의 경로는 하나의 문자열을 나타냄.
Trie 의 각 노드에는 다음과 같은 정보가 저장됨.
- 자식 노드에 대한 포인터 또는 참조(Children)
- 각 노드는 자식 노드에 대한 참조를 가짐. 자식 노드는 현재 노드에서 이어지는 다음 문자들을 나타냄.
- 끝 표지(End of Word)
- 일부 구현에서는 노드에 현재 노드까지의 경로가 유효한 단어의 끝인지 표시하는 플래그를 포함함.
주요 연산
- Insert(삽입)
- 문자열을 Trie 에 삽입할 때는 루트 노드에서 시작하여 문자열의 각 문자를 따라 내려가면서 노드를 추가함.
만약 해당 문자가 이미 존재하는 노드에 있다면, 그 노드를 따라가고, 없다면 새 노드를 생성하여 연결함.
마지막 문자 노드에 단어의 끝을 표시함.
- 문자열을 Trie 에 삽입할 때는 루트 노드에서 시작하여 문자열의 각 문자를 따라 내려가면서 노드를 추가함.
- Search(검색)
- 특정 문자열이 Trie 에 존재하는지 검색할 때는 루트 노드에서 시작하여 문자열의 각 문자를 따라 내려감.
- 문자열의 모든 문자를 따라가면서 노드가 존재하면 마지막 노드에서 단어의 끝 표시를 확인하여 존재 여부를 판단함.
- Delete(삭제)
- 문자열을 삭제할 때는 먼저 해당 문자열이 Trie 에 존재하는지 확인 후, 존재하면 노드를 역으로 탐색하면서 단어의 끝 표시를 제거하거나 불필요한 노드를 삭제함.
- Autocomplete(자동 완성)
- 특정 접두사로 시작하는 모든 단어를 찾기 위해서는 해당 접두사의 마지막 문자가 있는 노드로 이동한 후, 그 노드에서부터 DFS(깊이 우선 탐색) 또는 BFS(너비 우선 탐색) 을 통해 모든 자식 노드 경로를 탐색함.
장단점
장점
- 빠른 검색 속도 : 문자열의 길이에 비례하여 검색이 가능하므로, 접두사 검색 및 단어 검색이 매우 빠름.
- 공통 접두사 저장의 효율성 : 공통 접두사를 공유하는 문자열들이 하나의 경로를 공유하므로 저장 공간을 절약할 수 있음.
단점
- 공간 복잡도 : 각 노드가 자식 노드에 대한 포인터를 여러 개 가지고 있으므로, 메모리 사용량이 많아 질 수 있음.
- 구현의 복잡성 : Trie 구조를 구현하고 유지 관리하는 데 복잡할 수 있음
예시
"hello", "heaven", "heavy" 라는 단어를 저장한 Trie 의 예시임.
이 Trie 에서
- "he" 로 시작하는 단어들은 "hello", "hell", "heaven", "heavy" 임
- "hell" 로 시작하는 단어들은 "hello", "hell" 임
728x90
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 13일차 TIL DB 영속성 (0) | 2024.06.01 |
---|---|
99클럽 코테 스터디 12일차 TIL DB Covering Index (0) | 2024.05.31 |
99클럽 코테 스터디 9일차 TIL DB Full Text Index (0) | 2024.05.28 |
99클럽 코테 스터디 8일차 TIL DB R-Tree (0) | 2024.05.27 |
99클럽 코테 스터디 6일차 TIL DB Bitmap Index (0) | 2024.05.25 |
Comment