Dificuldade ★★☆
4 minutos de Leitura 🕒
Uma Trie, também conhecida como árvore digital ou árvore de prefixos, é uma estrutura de dados não-linear especializada, que é utilizada para armazenar um conjunto de palavras ou sequências de caracteres. Essa estrutura foi inventada por Edward Fredkin e Donald Knuth em meados da década de 1950.
Uma Trie é possui uma estrutura de árvore, em que cada nó representa um caractere ou um prefixo de uma palavra. A raiz da árvore representa o caractere vazio ou o prefixo vazio. Cada caminho da raiz até um nó folha representa uma palavra completa. Os nós internos podem ter vários filhos, correspondendo aos caracteres possíveis que podem seguir o prefixo representado pelo nó pai.
Essa estrutura é particularmente útil quando se deseja realizar operações eficientes de busca de palavras ou prefixos em um conjunto grande de dados. Ela permite uma rápida verificação da existência de palavras, bem como a recuperação de todas as palavras que compartilham um determinado prefixo. Isso ocorre porque a Trie mantém a informação de forma hierárquica, explorando as relações de prefixo entre as palavras.
A eficiência da Trie vem do fato de que a complexidade de busca é diretamente proporcional ao tamanho da palavra ou do prefixo sendo buscado, e não ao tamanho total do conjunto de palavras armazenadas. No entanto, uma desvantagem das Tries é que elas podem ocupar um espaço considerável de memória, especialmente quando o conjunto de palavras possui muitos prefixos comuns.
As Tries são frequentemente utilizadas em problemas relacionados a processamento de linguagem natural, correção ortográfica, sugestão de palavras, autocompletar, indexação de palavras-chave em motores de busca e outras aplicações que envolvem manipulação eficiente de palavras e prefixos.
Correção Ortográfica - Tries poser ser usadas em sistemas de correção ortográfica para verificar se uma palavra está correta ou sugerir palavras alternativas com base em erros de digitação comuns.
Autocompletar e Sugestão de Palavras - Tries podem ser usadas em recursos de autocompletar e sugestão de palavras em teclados de smartphones, mecanismos de busca e aplicativos de processamento de texto. Elas ajudam a prever a palavra que o usuário deseja digitar com base no contexto e nas palavras já digitadas.
Indexação de Palavras-Chave - Tries podem ser usadas em motores de busca para indexar palavras-chave de forma eficiente. Isso permite uma recuperação rápida de documentos ou páginas da web que contenham palavras específicas.
Sistemas de Busca de Texto Completo - Tries podem ser usadas em sistemas que realizam buscas em grandes volumes de texto, como mecanismos de busca na web ou bancos de dados de documentos. Elas permitem uma busca eficiente de palavras ou frases específicas.
Compressão de Dados - Tries podem ser usadas em algoritmos de compressão de dados, como o algoritmo de compressão de texto Lempel-Ziv-Welch (LZW), que é usado no formato de compressão de arquivo GIF.
Análise Léxica - Tries podem ser usadas na análise léxica de compiladores e interpretadores de linguagens de programação. Elas ajudam a identificar palavras-chave, identificadores e outros elementos léxicos em um programa.
Uma Trie t
pode ser construída recursivamente com os seguintes componentes:
t.caractere
: uma célula que armazena o caractere em um nó da trie.t.filhos
: um ponteiro os nós filhos da trie.inserir()
adiciona uma nova palavra à Trie.buscar()
verifica se uma palavra está presente na trie.remover()
remove uma palavra da trie.Veja o código completo no GitHub.