Computer/자료구조

트라이_Trie

에린_1 2024. 1. 21. 00:00
728x90

트라이(Trie)

  • 문자열을 저장하고 효율적으로 탐색하기 위한 트리형태의 자료구조
  • 우리가 검색할 때 볼 수 있는 자동완성 기능, 사전 검색등 문자열을 탐색하는데 특화 되어있는 자료구조
  • 래딕스 트리(radix tree) or 접두사 트리
  • (prefix tree) or 탐색 트리(retrieval tree) 라고도 한다. 트라이는 retrieval 에서 나온 단어다.

트라이 장단점

  • 장점
    • 트라이는 문자열 검색을 빠르게 한다.
    • 문자열을 탐색할 때, 하나하나씩 전부 비교하면서 탐색을 하는 것보다 시간복잡도 측면에서 더 효율적이다.
  • 단점
    • 각 노드에서 자식들에 대한 포인터들을 배열로 모두 저장하고 있다는 점에서 저장공간의 크기가 크다는 단점도 있다.
  • 트라이의 생성 시간복잡도는 O(MxL): 탐색 시간복잡도 O(L)
    • 가장 긴 문자열 길이 L
    • 총 문자열의 수 M
class Node(Object):
	def __init__(self,key,data = None):
		self.key = key
		self.data = data
		self.children = {}

class Trie(Object):
	def __init__(self):	
		self.head = node(None)
	# 문자열 삽입
	def insert(self,string):
		curr_node = self.head
		for char in string:
			if char not in curr_node.children:
				curr_node.children[char]
			curr_node = curr_node.children[char]
		curr_node.data = string

	def search(self, string):
		curr_node = self.head
		for char in string:
			if char in curr_node.children:
				curr_node = curr_node.children[char]
			else:
				return False
		if curr_node.data is not None:
			return True

 

728x90

'Computer > 자료구조' 카테고리의 다른 글

신장트리_SpanningTree, MST  (0) 2024.01.21
비트리_B-Tree  (0) 2024.01.19
그래프_Graph  (0) 2024.01.19
연결리스트_LinkedList  (0) 2024.01.15
리스트_List  (1) 2024.01.15