Algoritmos e Estruturas de Dados II Trabalho Prático 3
Algoritmos e Estruturas de Dados II Trabalho Prático 3
Algoritmos e Estruturas de Dados II Trabalho Prático 3
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
• Quicksort Insercao(m): esta variação modifica o Quicksort Recursivo para<br />
utilizar o algoritmo <strong>de</strong> Inserção para or<strong>de</strong>nar partições (isto é, pedaços do<br />
vetor) com tamanho menor ou igual a m. Experimente com diferentes<br />
valores <strong>de</strong> m para avaliar o melhor compromisso nesta escolha. Discuta<br />
os resultados no seu relatório.<br />
• Quicksort Iterativo: esta variação escolhe o pivô como o elemento do meio<br />
(como apresentado em sala <strong>de</strong> aula), mas não é recursiva. Em outras<br />
palavras, esta é uma versão iterativa do Quicksort apresentado em sala <strong>de</strong><br />
aula.<br />
• Quicksort Empilha Inteligente(): esta variação otimizada do Quicksort<br />
processa primeiro o lado menor da partição. Voce <strong>de</strong>ve aplicar esta otimizacao<br />
à versao iterativa do Quicksort.<br />
Você <strong>de</strong>verá instrumentar os algoritmos para contabilizar o número <strong>de</strong> comparações<br />
<strong>de</strong> chaves, o número <strong>de</strong> cópias <strong>de</strong> registros e o tempo total (tempo <strong>de</strong><br />
processamento) gasto na or<strong>de</strong>nação. Estes números <strong>de</strong>verão ser impressos ao<br />
final <strong>de</strong> cada or<strong>de</strong>nação para posterior análise.<br />
Você ainda <strong>de</strong>verá implementar funções para criação dos conjuntos <strong>de</strong> elementos<br />
aleatórios. Estas funções <strong>de</strong>vem ser chamadas uma vez para cada um dos N elementos<br />
a serem or<strong>de</strong>nados. Note que dois elementos po<strong>de</strong>m ter a mesma chave.<br />
Cada variação do algoritmo Quicksort <strong>de</strong>verá ser aplicado a entradas aleatórias<br />
com diferentes tamanhos (parâmetro N). Experimente, no mínimo, com valores<br />
<strong>de</strong> N = 1000, 5000, 10000, 50000, 10 0000, 500000 e 1000000. Para cada<br />
valor <strong>de</strong> N, você <strong>de</strong>verá gerar 5 (cinco) conjuntos <strong>de</strong> elementos diferentes, utilizando<br />
sementes diferentes para o gerador <strong>de</strong> números aleatórios. Faz parte do<br />
trabalho <strong>de</strong>scobrir como gerar números aleatórios a partir <strong>de</strong> uma semente. Os<br />
algoritmos serão avaliados comparando os valores médios das 5 execuções para<br />
cada uma das três métricas consi<strong>de</strong>radas (tempo <strong>de</strong> execução, número <strong>de</strong> comparações<br />
<strong>de</strong> chaves e númro <strong>de</strong> cópias <strong>de</strong> registros, para cada valor <strong>de</strong> N testado.<br />
Para o caso particular das variações Quicksort Insercao(m) e Quicksort Mediana(k),<br />
você <strong>de</strong>verá primeiramente variar os parâmetros m e k amplamente, fixando N<br />
(ex: N=1000000), e apresentando gráficos e/ou tabelas para mostrar os valores<br />
respectivos que atingem o melhor compromisso <strong>de</strong> <strong>de</strong>sempenho. A comparação<br />
<strong>de</strong>stas variações com as <strong>de</strong>mais <strong>de</strong>verá levar em consi<strong>de</strong>ração o melhor valor <strong>de</strong><br />
m e <strong>de</strong> k escolhidos conforme <strong>de</strong>scrito acima.<br />
Uma sugestão <strong>de</strong> organização para seu programa principal é:<br />
• Recebe a semente do gerador <strong>de</strong> números aleatórios bem como os nomes<br />
dos arquivos <strong>de</strong> entrada <strong>de</strong> saída. Estes parâmetros <strong>de</strong>vem ser passados<br />
pela linha <strong>de</strong> comando (argc e argv em C). Por exemplo:<br />
2