Quarto Exercício-Programa
Estudo Experimental com Algoritmos de Ordenação
Entrega: 2 de julho
O objetivo desse exercício-programa é verificar empiricamente a
complexidade computacional dos algoritmos de ordenação que
estudamos.
Para isso, você deve implementar os diversos algoritmos de ordenação
que foram apresentados nas aulas e fazer pelo menos os seguintes
testes (pode fazer outros se desejar, é claro):
- cronometar e contabilizar o número de comparações e atribuições
envolvendo elementos do vetor em diversas execuções dos
algoritmos para instâncias de diferentes tamanhos, e diferentes
características (ordenado em ordem crescente e decrescente,
parcialmente ordenado, gerado aleatoriamente, etc);
- construir tabelas e gráficos com esses dados para verificar se
as complexidades teóricas se confirmam nos testes;
- construir algoritmos de ordenação combinados, que misturem,
dependendo do tipo e tamanho da instância, execuções dos
algoritmos acima, de forma que o tempo de processamento seja o
melhor possível.
Você deve incluir no seu estudo experimental pelo menos os seguintes
algoritmos: mergesort, quicksort (versão determinística e versão
probabilística), heapsort, bubblesort e seleção direta. Se quiser,
inclua outros.
Junto com o seu EP, você deve entregar um relatório sobre seus
experimentos. Você pode incluir outros testes que julgar
interessantes. A nota do seu EP vai basear-se fortemente neste
relatório.
O seu EP será apenas usado para conferirmos que suas tabelas e dados
foram gerados adequadamente. Por isso, se você quiser, pode pegar
implementações destes algoritmos de ordenação disponíveis na
internet. Claro, escolha sempre uma fonte confiável para copiar, e dê
os créditos devidamente, incluindo no código do EP e no seu relatório
comentários dizendo de onde você obteve as implementações.
Gerador de números aleatórios em C
Dê uma olhada nas páginas do Professor Paulo sobre
números
aleatórios.
Como cronometrar os algoritmos em C
Para cronometrar rotinas em C, você pode usar alguma das funções da
biblioteca time.h do C. Dê uma olhada na descrição do Professor
Paulo:
time.h
Avisos
Last modified: Wed Jun 13 18:42:55 BRT 2007