19.04.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!