Professional Documents
Culture Documents
1. Introdução
Este trabalho consiste na elaboração de programa que consiga implementar uma
árvore trie a partir de um conjunto de palavras que consistirão no dicionário do programa.
Em seguida, dada uma certa quantidade de palavras que formarão o texto, o pro-
grama deverá verificar se as referidas palavras se encontram na presentes na árvore.
Além disso, o programa deverá, também, contar a frequência que cada palavra do
dicionário aparece no texto, devendo essa contagem ser interna à estrutura da árvore.
Em uma árvore trie, cada vértice armazena um caracter da palavra e um termi-
nador nulo define o fim da palavra. Cada vértice pode ser um prefixo para outra palavra
que possua início com a letra armazenada naquele vértice.
2. Modelagem
O trabalho foi modelado utilizando uma estrutura que possui três variáveis em sua
composição:
• node: um arranjo de ponteiros do tamanho do alfabeto e do mesmo tipo da estru-
tura;
• index: um ponteiro do tipo inteiro que será usado para contar os casamentos das
palavras;
• cont: um inteiro que será usado para fazer contagens durante a passagem pelos
nós da árvore.
• leaf: um inteiro que servirá de flag para sinalizar quando um nó é uma folha;
Estrutura. A estrutura foi nomeada para nodeTrie (renomeada nodeT) e é alo-
cada dinâmicamente.
Além disso, o código possui três funções que executarão as operações básicas:
criar, inserir e buscar as palavras na árvore. A contagem de palavras em comum no texto
e no dicionário deverá ocorrer na árvore.
1
Edward Fredkin (Los Angeles, 1 de janeiro de 1934) é um físico estadunidense.
3. Solução
3.1. Explicação
A solução encontrada, foi utilizar a estrutura citada na Seção 2 para realizar as
operações de criar a árvore , inserir as palavras do dicionário na árvore , buscar as palavras
do texto na árvore e contar as palavras em comum ao texto e dicionário.
Para tanto, lê-se de um arquivo de entrada para o programa. Cada arquivo tem
quatro linhas que trazem as seguintes informações:
• a primeira linha traz um valor N, N < 105 , que informa o número de palavras do
dicionário.
• a segunda linha contém N palavras que são todas as palavras do dicionário. Es-
sas palavras fazem parte do alfabeto latino, padrão ISO e contém as 26 letras do
alfabeto, de a à z, todas minúsculas e com no máximo 15 caracteres.
• a terceira linha tem um número M, M < 1016 , que informa a quantidade de
palavras do texto.
• a quarta linha possui M palavras, todas pertencentes ao texto, que seguem os
mesmos padrões das palavras do dicionário.
Isso devido ao fato de que a função trieSearch() também executa um loop levando
em consideração o tamanho da palavra e posteriormente executa operações com custos
lineares. O segundo loop For dentro da função.
A função trieDestroy(): recebe a árvore como parâmetro e tem complexidade de
tempo O(M), M como tamanho da palavra, e a complexidade de espaço é O(N), onde
N é a altura (níveis) da árvore.
Algorithm 4 Algoritmo para liberar a árvore
1: i
2: se raiz->folha ← 0 então
3: para i ← 0 até tamanho do alfabeto faça
4: se raiz->node[i] então
5: trieDestroy(raiz->node[i])
6: raiz->node[i] ← NULL
7: Libera: raiz->node[i]
8: fim se
9: fim para
10: Libera: raiz->index
11: Libera: raiz
12: fim se
13: retorne raiz
A árvore trie tem uma complexidade de tempo geral de , enquanto que sua com-
plexidade de espaço é de O(MAX ∗ M ∗ N), onde MAX é o tamanho do alfabeto, M é
o tamanho da palavra buscada e/ou inserida e N é a quantidade de palavras na árvore.
5. Experimentos
5.1. Configuração da máquina
O computador usado para os teste possui as seguintes configurações:
6. Conclusão
Com os experimentos citados na Seção 5 fica evidente que a quantidade de ocor-
rências do dicionário no texto influencia no tempo de execução do programa. Como a
alocação de memória ocorre de forma dinâmica, quanto maior o dicionário maior também
será o espaço necessário para armazená-lo.
Por fim, o programa encontra os casamentos entre dicionário e texto, conforme
proposto na especificação, cumprindo o que se espera.
Referências
Cormen, T. H. (2002). Algoritmos: Teoria e Prática. Elsevier.
Ziviani, N. et al. (2004). Projeto de Algoritmos: com Implementações em Pascal e C,
volume 2. Thomson.