위키득계정 ↗
기술

트라이 (자료 구조)

트라이 (자료 구조)기술
영문명
Trie
주요 저장 대상
문자열과 그 키
핵심 아이디어
공통 접두사의 경로 공유
활용 예
접두사 탐색과 자동 완성
트라이는 문자열의 공통 접두사를 경로로 공유하며 저장하는 트리 형태의 자료 구조다. 문자열을 앞에서부터 따라가며 탐색할 수 있어 접두사 기반 조회 등을 구현하는 데 쓰인다.

공통된 앞부분 공유

‘가방’과 ‘가위’를 문자 단위로 저장한다면 앞의 ‘가’에 해당하는 경로를 공유하도록 구성할 수 있다. 실제 구현은 문자나 바이트 등 선택한 단위를 기준으로 경로를 나눈다. 겉으로 같은 글자처럼 보여도 인코딩 표현은 다를 수 있다.

단어의 끝을 구분하기

하나의 키가 다른 키의 접두사일 수 있다. 경로가 존재한다는 사실만으로 그 위치에서 키 하나가 끝난다고 판단해서는 안 된다. 종료 여부를 표시하는 정보 등을 통해 저장된 키와 중간 경로를 구분한다.

접두사에 따른 탐색

앞부분의 경로를 찾은 뒤 그 아래를 살피면 해당 접두사로 시작하는 키들을 구할 수 있다. 단어 전체를 각각 처음부터 비교하는 방식과 다른 구조를 활용한다. 결과를 많이 내보내야 한다면 출력 항목 수에 따른 비용도 생긴다.

공간과 구현

각 노드의 자식을 배열이나 다른 구조로 저장하는 방식에 따라 메모리와 접근 비용이 달라진다. 공통 경로를 압축하는 변형도 있다. 트라이라는 분류만으로 모든 구현이 같은 공간을 쓰거나 같은 속도로 동작한다고 볼 수는 없다.

관련 문서

트리 (자료 구조) / 자료 구조 / 문자 인코딩 / UTF-8 / 해시 테이블 / 알고리즘