[자료구조] Trie 자료구조로 문자열을 빠르게 탐색해 보자! (feat. 검색창 자동 완성)

2023. 12. 21. 15:30· Computer Science/Data Structure
목차
  1. 💋 Trie란?
  2. ✔️ 개념
  3. ✔️ 특징
  4. 💋 Trie의 연산
  5. ✔️ insert
  6. ✔️ search
  7. 💋 참고자료
반응형
반응형

 

 

Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS

 

GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip

주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS development by creating an account on GitHub.

github.com

 

 

💋 Trie란?

✔️ 개념

  • 트라이(Trie)는 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조
  • 검색 자동완성 기능 등 문자열을 탐색하는데 특화되어있는 자료구조
  • 주로 문자열을 저장하고 검색하는 데 사용된다.

 

이미지 출처:  https://www.youtube.com/watch?v=-urNrIAQnNo

 

 

Trie 자료구조는 컴퓨터공학 과목에서 본격적으로 다루는 자료구조는 아니다. 하지만, 검색 자동완성 등 많은 서비스에서 필수적으로 사용되는 자료구조이기 때문에 인터뷰에서 자주 등장하는 주제다.

 

✔️ 특징

  • 각 노드는 문자열 + 해당 노드까지가 단어인지에 대한 여부를 나타내는 boolean을 가진다.
    • 구체적인 구현은 구현체에 따라 달라질 수 있다.
  • 문자열 검색을 굉장히 빠르게 할 수 있다.
  • 메모리 관점에서는, 각 노드에서 자식들에 대한 포인터들을 배열로 모두 저장하고 있다는 점에서 저장 공간의 크기에 비효율적일 수 있다.

 

💋 Trie의 연산

✔️ insert

  • 각 문자열을 한 글자씩 트라이에 추가한다.
  • O(L)의 시간 복잡도를 가지며, 여기서 L은 문자열의 길이다.
    • 트라이는 각 문자를 노드로 저장하므로, 문자열의 길이만큼만 탐색하면 된다.

 

이미지 출처:  https://www.youtube.com/watch?v=-urNrIAQnNo

 

예시에서 등장한 Trie는 Car, Cat, Do, Done, Trie, Try를 삽입한 Trie 자료구조다.

각 문자마다 노드를 생성하면서, 공통된 부분에서는 prefix처럼 공유하기 때문에 메모리 공간을 효율적으로 활용할 수 있다. 예를 들어, Car, Cat의 공통 부분인 Ca에 대해서는 별도로 저장하지 않고, Ca를 prefix로 공유한다.

 

 

✔️ search

  • 각 문자를 순차적으로 탐색하여 문자열이 존재하는지 여부를 판단한다.
  • O(L)의 시간 복잡도를 가지며, 여기서 L은 문자열의 길이다.
    • 트라이는 각 문자를 노드로 저장하므로, 문자열의 길이만큼만 탐색하면 된다.

 

위의 그림으로 다시 예를 들어, Do를 탐색하려고 한다면, 루트 노드에서 D로 이동하고, 그 뒤에 나오는 O로 이동한 후 O의 자녀 노드 중 단어의 완성을 뜻하는 true를 가지는 자녀가 있기 때문에 Do를 탐색하는데 성공한다.

 

💋 참고자료

  • https://www.youtube.com/watch?v=-urNrIAQnNo (킹왕짱 설명)
  • https://www.youtube.com/watch?v=zIjfhVPRZCg

 

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형

'Computer Science > Data Structure' 카테고리의 다른 글

[자료구조] HashMap에서 Treeify를 도입한 Java 8의 성능 개선기 (feat. TREEIFY_THRESHOLD)  (2) 2023.12.28
[자료구조] B+Tree: 개념, 특징, B-Tree와의 차이점 정리  (2) 2023.12.21
[자료구조] Graph: 개념, Vertices/Edges, 종류, 트리구조와 비교, 표현 (Adjacency Matrix vs Adjacency List)  (4) 2023.12.20
[자료구조] Set과 HashSet: 개념, List vs Set (메모리와 iteration 속도 관점에서)  (0) 2023.12.20
[자료구조] Map과 Hash Table: 해시 함수와 해시 충돌의 해결, 해시 테이블 리사이징  (3) 2023.12.19
  1. 💋 Trie란?
  2. ✔️ 개념
  3. ✔️ 특징
  4. 💋 Trie의 연산
  5. ✔️ insert
  6. ✔️ search
  7. 💋 참고자료
'Computer Science/Data Structure' 카테고리의 다른 글
  • [자료구조] HashMap에서 Treeify를 도입한 Java 8의 성능 개선기 (feat. TREEIFY_THRESHOLD)
  • [자료구조] B+Tree: 개념, 특징, B-Tree와의 차이점 정리
  • [자료구조] Graph: 개념, Vertices/Edges, 종류, 트리구조와 비교, 표현 (Adjacency Matrix vs Adjacency List)
  • [자료구조] Set과 HashSet: 개념, List vs Set (메모리와 iteration 속도 관점에서)
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 함수형프로그래밍
  • 우아한테크코스5기
  • 람다
  • 상속과조합
  • OOP
  • 스트림
  • 예외
  • 람다와스트림
  • 레벨로그
  • Stream
  • 컴포지션
  • TDD
  • 우아한테크코스
  • 우테코
  • 조합
  • 우테코5기
  • Composition
  • 상속
  • lamda
  • Java
hELLO · Designed By 정상우.v4.2.0
깃짱
[자료구조] Trie 자료구조로 문자열을 빠르게 탐색해 보자! (feat. 검색창 자동 완성)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.