트라이

2025. 9. 8. 18:41·알고리즘(코딩테스트)

1. 개념


문자열을 효율적으로 처리하기 위한 트리 자료구조

  • 삽입 삭제 탐색에 있어서 O(|S|) 시간이 소요
  • 그러나 메모리는 최대 4*글자의 종류 만큼 차지하므로 메모리 효율은 좋지 않다.
  • 이론적인 시간 복잡도와 달리 실제로는 트라이가 해시나 이진 검색 트리에 비해 느리다.
    • 그러나 이 특징을 사용해야하는 문제가 있다.
    • 문자열의 접두사 검색 등과 같은 느낌

 

 

2. 구현


코드

#include <iostream>
using namespace std;

const int ROOT = 1;
int unused = 2; //새로 추가할 정점
const int MX = 10000 * 500 + 5; //최대 등장 가능한 글자 수 -> 최대 500인 문자열이 10000개 들어온 경우
bool chk[MX];
int nxt[MX][26]; // 각 정점에서 자식 정점의 번호 (가능한 문자가 소문자인 경우)

int c2i(char c)
{
	return c - 'A';
}

void insert(string& s)
{
	int cur = ROOT;
	for (auto c : s)
	{
		if (nxt[cur][c2i(c)] == -1)
			nxt[cur][c2i(c)] = unused++;
		cur = nxt[cur][c2i(c)];
	}
	chk[cur] = true;
}

bool find(string& s)
{
	int cur = ROOT;
	for (auto c : s)
	{
		if (nxt[cur][c2i(c)] == -1)
			return false;
		cur = nxt[cur][c2i(c)];
	}
	return chk[cur];
}

void erase(string& s)
{
	int cur = ROOT;
	for (auto c : s)
	{
		if (nxt[cur][c2i(c)] == -1)
			return;
		cur = nxt[cur][c2i(c)];
	}
	chk[cur] = false;
}

int main()
{
	for (int i = 0; i < MX; ++i)
		fill(nxt[i], nxt[i] + 26, -1);

	///
}

 

 

3. 문제


boj 14426

 

 

참고)

https://blog.encrypted.gg/1059

 

[실전 알고리즘] 0x1F강 - 트라이

안녕하세요, 드디어 마지막 강이라니 가슴이 웅장해집니다. 마지막인만큼 난이도도 끝판왕일 수 있지만 개인적으로는 꽤 좋아하는 알고리즘 중 하나여서 같이 즐거운 마음으로 배워봅시다. 아

blog.encrypted.gg

 

'알고리즘(코딩테스트)' 카테고리의 다른 글

시간복잡도 줄이기 2) 하나 고정하기  (0) 2025.09.30
시간복잡도 줄이기 1) 중간에서 만나기 (+이분탐색)  (0) 2025.09.24
위상정렬  (0) 2025.09.07
플로이드  (2) 2025.08.08
문자열 관련  (0) 2025.05.20
'알고리즘(코딩테스트)' 카테고리의 다른 글
  • 시간복잡도 줄이기 2) 하나 고정하기
  • 시간복잡도 줄이기 1) 중간에서 만나기 (+이분탐색)
  • 위상정렬
  • 플로이드
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    character animation
    템플릿
    cin함수
    additive animation
    매크로 지정자
    motion matching
    const
    C++
    상속
    Vector
    gamestate
    BFS
    applydamage
    actor 클래스
    enhanced input system
    DP
    addonscreendebugmessage
    blend pose
    싱글턴
    map을 vector로 복사
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
트라이
상단으로

티스토리툴바