Trabalho Prático de Algoritmos e Estruturas de Dados

2
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.

Transcript of Trabalho Prático de Algoritmos e Estruturas de Dados

Page 1: 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.

Page 2: 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 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)