[자료구조] 트라이(Trie)

2023. 1. 19. 15:49·Python 활용하기
728x90
반응형

트라이(Trie)란?

  • 문자열을 빠르게 탐색할 수 있는 자료구조
  • 길이가 L인 문자열을 이진탐색하면 O(LlogN)이지만, 트라이 구조를 활용하면 O(M)로 더 효율적이다.

trie 구조 - 위키백과


트라이(Trie) 구현

Node 구현

  • key : 입력될 값
  • data : 문자열의 종료 표시 (문자열 전체)
  • child : 자식 노드
class Node(object):
    def __init__(self, key, data=None):
        self.key = key
        self.data = data
        self.child = {}

Trie 구현

  • class 초기화
    • 비어있는 node 생성
class Trie:
    def __init__(self):
        self.head = Node(None)

 

  • 삽입(insert) 구현
    • 문자열을 한 글자씩 child에 저장하고, 마지막에는 해당 문자열 전체를 저장한다.
    def insert(self, string):
        cur_node = self.head
        for char in string:
            if char not in cur_node.child:
                cur_node.child[char] = Node(char)
            cur_node = cur_node.child[char]
        cur_node.data = string

 

  • 검색(search) 구현
    • 문자열의 한 글자씩 node의 child에 존재하는지 확인하고, 마지막에 해당 문자열이 저장되어 있다면 True를 반환한다.
    def search(self, string):
        cur_node = self.head
        for char in string:
            if char in cur_node.child:
                cur_node = cur_node.child[char]
            else:
                return False
        if cur_node.data != None:
            return True
        else:
            return False

Trie 삽입 및 삭제

trie = Trie()
trie.insert('apple')
trie.insert('app')

print(trie.search('apple'))
print(trie.search('appp'))

# True
# False
저작자표시 (새창열림)

'Python 활용하기' 카테고리의 다른 글

변수의 범위  (0) 2023.10.24
2차원 리스트 생성  (0) 2023.07.31
[Algorithm] LIS(Longest Increase Sequence)  (0) 2023.01.12
시간복잡도 생각하기 (지속 업데이트)  (0) 2022.11.27
소수 (Prime Number)  (0) 2022.09.27
'Python 활용하기' 카테고리의 다른 글
  • 변수의 범위
  • 2차원 리스트 생성
  • [Algorithm] LIS(Longest Increase Sequence)
  • 시간복잡도 생각하기 (지속 업데이트)
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • ML_DL (39)
        • MUJAKJUNG (무작정 시리즈) (18)
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[자료구조] 트라이(Trie)
상단으로

티스토리툴바