Você está na página 1de 2

Projeto e Análise de Algoritmos

PCC 104 - TP1 – 2020-1

Trabalho Prático 1
Você precisa desenvolver um sistema eficiente para autocompletar textos. Para isso, você utilizará uma
árvore de pesquisa digital ou Trie.
Árvores Digitais - Tries
Dado um conjunto de strings S, uma trie é uma árvore n-ária ordenada onde cada nó indica um prefixo (com
o caminho até a raiz) e os nós descendentes indicam as possíveis completações do dado sufixo. Ainda, cada nó
pode indicar o sufixo ou a terminação de uma palavra.
Exemplo:
Para o conjunto S = { bear, bell, bid, bull, buy, sell, stock, stop }, abaixo na esquerda temos uma árvore Trie e
na direita temos a árvore Trie comprimida. Nessa última, cadeias de nós redundantes são transformadas em
um só nó, de modo que cada nó tem ao menos 2 filhos ou nenhum.

b s

i
b s
e u e t

a l d l y l o e id u ell to

r l l l c p
ar ll ll y ck p
k

Entrada de dados:
O texto a ser processado está disponível aqui: http://www.decom.ufop.br/haroldo/baskervilles.txt . Para
experimentos de escalabilidade, com medição do tempo em função do aumento da entrada de dados, podem
ser criados arquivos maiores com repetições do arquivo.
Processamento:
Ao processar o texto, separando as palavras e ignorando caracteres que não fazem parte de palavras, como “.”
e “,”, deve ser construída uma Trie comprimida. Para cada palavra deve-se guardar também, no nó que indica
a terminação, o número de ocorrências desta palavra. Observe que, apesar da notação utilizada no exemplo
diferenciar nós de sufixo de nós de final de palavra, certos nós podem representar ambos.
Materiais a entregar:
Relatório contendo: descrição da estrutura Trie, pseudocódigos e experimentos computacionais que detalhem
o desempenho do código implementado com diferentes cargas.
Código:
O código pode ser implementado na linguagem C ou Pascal. Em ambos os casos o código deve ser portável, o
que se garante, por exemplo, seguindo padrões como ANSI. O código deve ser organizado de modo a separar a
funcionalidade da Trie especificamente do resto do código (por exemplo, do código que realiza experimentos).
O programa gerado deve poder ser executado de dois modos, o primeiro é o modo interativo, identificado pela
passagem do parâmetro -interactive:

1
./test-trie baskervilles.txt -interactive
entre com o sufixo ou digite 0 para sair: she
sugestões: Sherlock (26)
she (24)
shepard (4)
sheep-dog (4)
shelter (2)
entre com o sufixo ou digite 0 para sair: 0
(dados fictícios de ocorrências)
No programa interativo, depois de encontrar as completações de um sufixo, o programa deve imprimir uma
lista ordenada por ocorrências das completações.
No segundo modo, identificado pela passagem do parâmetro -exp, o código deve executar o conjunto de
experimentos e salvar os resultados em arquivos para o posterior processamento e análise.
./test-trie baskervilles.txt -exp
Observações:
Trabalhos individuais, cópias receberão nota zero.

Você também pode gostar