Trabalho Prático de Algoritmos e Estruturas de Dados
-
Upload
bruno-araujo -
Category
Documents
-
view
216 -
download
0
Transcript of Trabalho Prático de Algoritmos e Estruturas de Dados
7/23/2019 Trabalho Prático de Algoritmos e Estruturas de Dados
http://slidepdf.com/reader/full/trabalho-pratico-de-algoritmos-e-estruturas-de-dados 1/2
Curso de Engenharia de Computação
Laboratório de AEDS1 – 2014/1
Trabalho Prático 1
Complexidade de Tempo: Análise e Medições
O TP é individual. Trabalhos iguais terão notas também iguais a zero.
Este trabalho consiste de dois exercí cios.
1. O objetivo desse exercí cio é fazer experimentos com medições de tempos de execução de
programas. Considere o seguinte programa que mostra como medir o tempo dentro do código:
//programa exemplo para medição de tempo
#include <stdio.h>#include <time.h>#define N 1000ULL
int main(){
unsigned long long int i, j, k; double contador = 0.0; clock_t tempo_inicial, tempo_final;
tempo_inicial = clock (); for (i=0; i < N ; i++)
for (j=0; j < N; j++) //comentar para testes for (k = 0; k < N; k++) //comentar para testes contador++;
tempo_final = clock ();
printf ("N = %llu contador = %.0f\n", N, contador); printf ("tempo decorrido = %.3e Seconds\n", ((double)tempo_final-(double)tempo_inicial)/
(double)CLOCKS_PER_SEC);}
O que você deve fazer: implementar esse programa. Simular a execução de um algoritmo linear
usando apenas o primeiro laço for (comente os demais). Varie o valor de N e anote os tempos para
cada valor de N testado. Aumente N até o máximo que conseguir (tenha paciência!). Despreze todos os
experimentos cujo valor de tempo seja zero. Repita o experimento usando dois laços for. Repita
novamente usando os três laços. Faça um gráfico do tempo medido em função de N. Esse gráfico deve
ter 3 curvas, uma para cada teste realizado (1, 2 e 3 laços). Analise os resultados e escreva suas
conclusões, bem como o que você aprendeu no experimento.
7/23/2019 Trabalho Prático de Algoritmos e Estruturas de Dados
http://slidepdf.com/reader/full/trabalho-pratico-de-algoritmos-e-estruturas-de-dados 2/2
2. Considere o seguinte problema: dado um vetor de números inteiros, positivos e negativos,
encontrar a sequência de números deste vetor que produz o maior valor. Por exemplo, a
sequência [-3, 11, -4, 13, -6, 2] contém uma subsequência máxima de valor 20, que consiste na
soma do segundo ao quarto elementos, e a sequência [23, -52, 59, 26, -53, 58, 97, -92, -32, 54]
contém uma subsequência máxima de valor 187, contados do terceiro ao sétimo elementos.
Neste exercí cio, você deve fazer o seguinte:
• Projete um algoritmo para resolver esse problema. Use o método dos refinamentos
sucessivos e anote todas as etapas de projeto para o relatório.
• Implemente e teste exaustivamente seu algoritmo. Use um gerador de números aleatórios
para preencher o vetor. Use vetores e números pequenos para conferir manualmente o
resultado.
• Escolha 5 testes com valores gerados aleatoriamente e vetores de tamanho 20 a 50 para
colocar no relatório.
• Faça a análise de complexidade do seu algoritmo.
• Finalmente, faça testes de tempo de execução do algoritmo com vetores bem grandes e
compare os resultados com sua análise de complexidade.
• Faça um relatório mostrando os passos acima, sua análise e conclusão.
RELATÓRIOS DE TRABALHOS PR Á TICOS
Para cada exercí cio faça um pequeno relatório do experimento, com seus resultados, sua conclusão e
imprima o código em anexo. Os relatórios devem ser entregues grampeados em um único documento.
Não colocar capa. Os relatórios devem conter os seguinte itens:
• sua descrição do experimento: apresente aqui o que foi feito, as limitações e dificuldades
encontradas bem como as decisões tomadas durante a realização do experimento;
• apresentação dos resultados: apresente de forma clara e distinta as tabelas e os gráficos
gerados;
• apresente sua análise dos resultados;
• apresente sua conclusão do experimento.
Eu ou ç o e esque ç o; eu vejo e lembro; eu fa ç o e compreendo.
Conf ú cio, fil ó sofo chin ê s (551-479 BC)