Loading...
2021. 9. 30. 23:19

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

# 문자열을 찾을때 사용하는 알고리즘이 여러가지 있는데, 대표적으로 KMP, 라빈카프, 보이어-무어, BruteForce, Trie등이 있다. 전체 문자열 길이를 N, 찾고자하는 패턴길이를 M이라 하면 BruteForce는 O(NM) / KMP는 O(N) + 전처리 / 보이어-무어는 O(N/M), 최악 O(N) / 라빈카프는 O(N)이다. # 이번에 소개할 자료구조는 Trie(트라이)라고 하는 자료구조인데, 우선 Trie라는 말은 retrieval(탐색)에서 따온 말이라고 한다. 트라이는 트리구조를 사용해서 문자열을 저장하는데, 시간복잡도가 가장 긴 문자열의 길이를 L이라 했을때 O(L)밖에 걸리지 않는다. # 우선 'fire', 'firefox', 'frodo', 'frost', 'fry'를 저장했을 ..

[Python] BOJ 5052 - 전화번호 목록(Phone List)

https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net # Trie(트라이) 자료구조를 사용해서 푸는 문제이다. (물론 그냥 내장함수 startswith을 사용해도 풀리긴 한다) * insert함수: string 문자열의 한 글자씩 트리의 children에 저장해주고 마지막 노드에는 전체 문자열인 string을 저장해준다. * search함수: string 문자열을 하나씩 돌며 트리의 children을 계속 방문한다. 문자열을 ..