UNIVERSIDADE
FEDERAL DE MINAS GERAIS
INSTITUTO
DE CIÊNCIAS EXATAS
DEPARTAMENTO
DE CIÊNCIA DA COMPUTAÇÃO
ALGORITMOS
E ESTRUTURAS DE DADOS II
Prof.
Raquel O. Prates 01
de junho de 2006
Data de entrega: 26 de junho de 2006 (SEM possibilidade de
adiamento)
Penalidade por atraso: 10% do total do trabalho por dia
de atraso
Objetivo do trabalho: O objetivo deste trabalho é
permitir aos alunos implementar alguns dos algoritmos de pesquisa.
Descrição do Trabalho:
O trabalho
consiste em implementar e 2 algoritmos de pesquisa vistos em sala: Árvore Binária de
Pesquisa e Hash com listas encadeadas. A árvore deve ter como chave números
inteiros, e a tabela hash deve ter como chave strings. Os usuários deverão ser capazes de inserir, retirar, reinicializar e
pesquisar uma chave. A árvore ou tabela não precisa estar visível durante todo
o tempo, mas deve ter disponível uma função para visualizá-la. A visualização
pode ser feita por meio de texto, mas deve ficar claro para o usuário a
estrutura da árvore ou hash. Pontos extras serão dados para a visualização
gráfica da árvore (veja abaixo). Além de executar as funções, o programa deve
narrar para o usuário de forma didática os passos necessários para se atingir o
objetivo. Não interessa narrar questões específicas sobre a implementação, mas
sobre a idéia geral do algoritmo. A idéia é que o sistema possa auxiliar um
aluno que esteja aprendendo sobre estas estruturas.
Por exemplo, se o usuário escolher insere (7)
na árvore, poderia se ter:
|
Visualização antes |
Narrativa dos passos |
Visualização depois |
|
5 / \
3 8
/ \
1 4 |
Insere (7) Compara com o nó de chave 5 Vai para a sub-árvore da direita Compara com o nó de chave 8 Vai para a sub-árvore da esquerda Encontra posição Insere nó com chave 7 |
5 / \ 3
8 / \
/ 1 4
7 |
Além disso, o sistema deve oferecer as
seguintes facilidades:
·
Inicializar árvore ou tabela
com valores aleatórios iniciais. A quantidade de chaves da inicialização deve
ser fornecida pelo usuário. (As strings para inicializar a tabela hash, não
precisam ser palavras).
·
Opção de executar a função
de uma vez ou passo a passo (em ambos os casos a narrativa é mostrada). No
passo a passo o usuário controla quando passar para o próximo passo. Na
execução direta o usuário deve ser capaz de ler a narrativa, se necessário
pode-se incluir um atraso entre os passos.
Incrementando o trabalho:
O aluno poderá incrementar o trabalho para
ganhar pontos extras. O que pode ser feito é:
·
Mostrar na tela sempre a
estrutura da árvore e hash (textual), além da narrativa e o menu, de forma que
a visualização seja atualizada
automaticamente sempre (pelo menos no fim da execução da ação
solicitada). Vale 10%.
·
Interface gráfica, na qual a
estrutura é desenhada (não textual) e deve estar disponível, além da narrativa
e menu. Vale 20%.
·
Interface gráfica, mostrando
a animação, ou seja a narrativa é acompanhada por uma indicação na
visualização. Menu, narrativa e visualização devem estar sempre presentes. Vale
40%.
Observações:
·
As opções de interface
gráfica devem garantir a não sobreposição de nós da árvore até o nível 4 ou 5.
·
Os pontos extras de cada
opção não são cumulativos.
Exemplo e inspiração:
Animações
de algoritmos que acompanham o livro "Data Structures and Algorithms in Java," Second Edition. Robert Lafore,
2002 podem ser usadas
Considerações sobre o
trabalho:
·
O trabalho deverá
ser feito individualmente.
·
O trabalho poderá ser feito em C ou PASCAL
·
O aluno deve se preocupar com a qualidade do código
sendo gerado, assim, o programa deve estar dividido em subrotinas, deve-se usar
constantes sempre que apropriado, selecionar nomes mnemônicos para variáveis, o
programa não deve fazer uso de variáveis globais ou de comandos GOTO.
O que deve ser entregue:
1. O código do programa (eletrônico e
impresso)
2. O programa executável
3. A documentação do programa, contendo:
a) Introdução:
descrição do problema a ser resolvido e visão geral sobre o funcionamento do
programa, explicando aspectos relacionados ao uso e apresentação das estruturas
solicitadas.
b) Plataforma: Deve
estar descrito a linguagem e compilador usados, assim como a justificativa da
escolha pela linguagem. Caso uso algum toolkit para interface, deve
apresentá-lo também.
c) Implementação:
descrição sobre a implementação do programa. Deve ser detalhada a estrutura de
dados utilizada (diagramas ilustrativos podem auxiliar a explicação da
estrutura), o funcionamento das principais funções e procedimentos utilizados,
o formato de entrada e saída de dados, bem como decisões tomadas relativas aos
casos e detalhes de especificação que porventura estejam omissos no enunciado.
d) Estudo de
Complexidade: estudo da ordem de complexidade do tempo de execução dos
procedimentos implementados e do programa como um todo (notação O).
e) Conclusão:
comentários gerais sobre o trabalho e as principais dificuldades encontradas em
sua implementação.
f) Bibliografia:
bibliografia que porventura tenha sido utilizada para o desenvolvimento do
trabalho, incluindo sites da Internet se for o caso
Será marcada uma entrevista com cada aluno para apresentação dos
trabalhos. O aluno deverá saber responder a todas as perguntas, sob pena de ser
descontados nos itens em que não souber responder, ou mesmo no trabalho como um
todo.