[c언어] 트라이 구조
트라이(Trie) 구조는 문자열 검색과 관련된 애플리케이션에서 효율적인 자료구조로 사용됩니다. 이 자료구조는 문자열을 저장하고 검색하는 데 사용됩니다. 이 포스트에서는 C언어를 사용하여 트라이 구조를 구현하는 방법에 대해 알아보겠습니다.
트라이란?
트라이는 트라이 트리(Trie Tree)라고도 불리며, 각 노드가 문자를 나타내는 트리 자료구조입니다. 각 노드는 문자와 해당 문자가 끝나는지 여부를 나타내는 플래그를 포함합니다. 트라이는 공통 접두사를 공유함으로써 문자열을 저장하고 효율적으로 검색할 수 있습니다.
C언어로 구현
아래는 C언어를 사용하여 간단한 트라이 구조를 구현하는 예제 코드입니다.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26
struct TrieNode {
struct TrieNode *children[ALPHABET_SIZE];
bool isEndOfWord;
};
struct TrieNode *createNode() {
struct TrieNode *node = (struct TrieNode *)malloc(sizeof(struct TrieNode));
node->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
node->children[i] = NULL;
}
return node;
}
void insert(struct TrieNode *root, char *key) {
struct TrieNode *current = root;
for (int level = 0; key[level] != '\0'; level++) {
int index = key[level] - 'a';
if (!current->children[index]) {
current->children[index] = createNode();
}
current = current->children[index];
}
current->isEndOfWord = true;
}
bool search(struct TrieNode *root, char *key) {
struct TrieNode *current = root;
for (int level = 0; key[level] != '\0'; level++) {
int index = key[level] - 'a';
if (!current->children[index]) {
return false;
}
current = current->children[index];
}
return (current != NULL && current->isEndOfWord);
}
int main() {
struct TrieNode *root = createNode();
char *keys[] = {"apple", "banana", "apricot", "avalanche", "ball"};
int n = sizeof(keys) / sizeof(keys[0]);
for (int i = 0; i < n; i++) {
insert(root, keys[i]);
}
printf("%s\n", search(root, "apple") ? "Found" : "Not found");
printf("%s\n", search(root, "apricot") ? "Found" : "Not found");
printf("%s\n", search(root, "orange") ? "Found" : "Not found");
return 0;
}
마무리
이것은 C언어로 간단한 트라이 구조를 구현하는 방법에 대한 간단한 예제입니다. 트라이는 문자열 검색 문제에 유용한 자료구조이며, C언어를 사용하여 효율적으로 구현할 수 있습니다.
더 많은 정보를 원하시는 경우 GeeksforGeeks 웹사이트를 방문하시기 바랍니다.