자료구조
[파이썬] Trie(트라이) 알고리즘
DeveloperJason
2023. 2. 19. 22:07
참고한 블로그
[Python / 파이썬] Trie 알고리즘
안녕하세요 코딩하는 지미에요!! 오늘은 Trie 알고리즘의 기본 개념과 예제에 대해서 알아볼게요 ㅎ 생소...
blog.naver.com
Trie 알고리즘
-- 문자열 탐색 시 실행속도가 빠른 알고리즘. 하지만 저장 공간의 크기가 크다는 단점.
구현
데이터를 저장할 노드
class Node(object):
def __init__(self,key,data = None):
self.key = key
self.data = data
self.children = {}
Trie 구현
class Trie:
def __init__(self):
self.head = Node(None)
def insert(self,string):
current_node = self.head
for char in string:
if char not in current_node.children:
current_node.children[char] = Node(char)
current_node = current_node.children[char]
current_node.data = string
def search(self,string):
current_node = self.head
for char in string:
if char not in current_node.children:
return False
current_node = current_node.children[char]
if current_node.data:
return True
return False
def starts_with(self,prefix):
current_node = self.head
words = []
for p in prefix:
if p not in current_node.children:
return False
current_node = current_node.children[p]
current_node = [current_node]
next_node = []
while True:
for node in current_node:
if node.data:
words.append(node.data)
next_node.extend(list(node.children.values()))
if len(next_node) != 0:
current_node = next_node
next_node = []
else:
break
return words
실행 예시
###example###
trie = Trie()
words = ["frodo","firefox","fire","friedchicken"]
for word in words:
trie.insert(word)
print(trie.search("frodo"))
print(trie.starts_with("f"))
실행 결과
True
['fire', 'frodo', 'firefox', 'friedchicken']