PUC-Rio
Departamento de Informática
Profs. Marcus Vinicius S. Poggi de Aragão
Período: 2008.2
Horário: 2as-feiras e 4as-feiras de 17-19
29 de agosto de 2008
Data da Entrega: 26 de setembro de 2008
ESTRUTURAS DISCRETAS (INF 1631)
1o Trabalho de Implementação
Descrição
Este trabalho prático consiste em desenvolver códigos de algoritmos correspondentes
a provas por indução matemática de teoremas associados a problemas sobre estruturas
discretas.
Problema 1
Dada uma sequência de n números inteiros, determinar a subsequência crescente
de tamanho máximo (com mais números inteiros).
Uma subsequência nesse problema não é necessariamente consecutiva. I.e., seja
a seguinte sequência de números inteiros: 4,7,6,12,3,5,23. A subsequência
crescente máxima é 4,6,12,23 com 4 inteiros.
Sejam os seguintes teoremas onde ik denota o k-ésimo inteiro da sequência In de n inteiros:
Teorema 1
Sabe-se determinar as subsequências crescentes de Ik = { i1, i2, ..., ik } com 1,2,...,k
inteiros, quando existirem, que terminam com o menor inteiro.
Teorema 2
Sabe-se determinar a subsequência crescente máxima que termina no elemento ik de uma sequência de
k inteiros Ik = { i1, i2, ..., ik }.
Responda às questões que se seguem.
-
Prove os Teoremas 1 e 2 por indução matemática simples.
- Explique como conhecer as subsequências de tamanho 1,2,...,n que terminam com o menor inteiro resolve o problema 1.
- Mostre como conhecer a maior subsequência crescente que termina em cada elemento
da sequência de inteiros permite encontrar a maior subsequência máxima.
- Descreva um algoritmo associado à sua prova do Teorema 1 em palavras. Em seguida apresente um
pseudo-código para o algoritmo que você descreveu.
- Descreva um algoritmo associado à sua prova do Teorema 2 em palavras. Em seguida apresente um
pseudo-código para o algoritmo que você descreveu.
Experimentação:
-
Implemente os seus algoritmos em uma linguagem de programação.
- Execute os algoritmos para obter as maiores subsequências crescentes dos conjuntos de inteiros nos arquivos de
teste (disponíveis na página web do curso). A especificação dos arquivo de entrada e as saídas desejadas
encontram-se mais abaixo.
- Determine o tempo de CPU gasto para obter as subsequências crescentes máximas pelos algoritmos (utilize uma
função oferecida no ambiente de desenvolvimento).
Como haverá casos onde o tempo de CPU será muito pequeno, para uma maior precisão, execute o algoritmos
tantas vezes quantas sejam necessárias para que o tempo de CPU ultrapasse 5 segundos. Registre o tempo em que
o algoritmo terminou sua primeira execução após os 5 segundos de CPU e divida este tempo pelo número de execuções.
O valor obtido será o tempo de CPU para ordenar o caso em teste.
NÃO INCLUA O TEMPO PARA A LEITURA DO ARQUIVO NO TEMPO DE CPU, CONSIDERE SOMENTE O TEMPO PARA A OBTENÇÃO DAS SUBSEQUÊNCIAS MÁXIMAS !!
- Prepare uma tabela com os tempos de CPU obtidos para cada tamanho de sequência.
Conclusões
Escreva suas conclusões analisando as provas do teorema apresentadas, os algoritmos codificados e os resultados
dos experimentos. Você considera que o algoritmo obtido é eficiente ?
ENTREGA DO TRABALHO
O trabalho pode ser feito em grupos de até 2 (dois) alunos.
O trabalho entregue deve conter:
-
Um documento contendo as respostas para as questões acima. Apresente comentários e análises
sobre a implementação e os testes realizados (PAPEL).
- A impressão do código fonte (papel).
- Um e-mail para poggi@inf.puc-rio.br contendo um arquivo ZIP (renomeado para .zzz) contendo o código fonte
e o executável (por isso o .zzz) correspondente. (É obrigatório o uso do assunto (ou subject) ED082T1). O NÃO CUMPRIMENTO DESTE REQUISITO IMPLICA NA NOTA ZERO.
Descrição do Arquivo de Entrada
A primeira linha contém um inteiro T contendo o número de inteiros na sequência. Cada um dos T conjuntos inicia com
uma identificação I do conjunto na primeira linha, na linha seguinte está o número N de elementos no conjunto, enquanto que
as N linhas seguintes contém os inteiros da sequência.
Descrição do Arquivo de Saída
O arquivo de saída contém as informações para a tabela pedida acima. Ou seja, ele possui T linhas, onde
cada linha apresenta a identificação I do conjunto, o número N de inteiros no conjuntos e os tempos de CPU
para os dois algoritmos.
This document was translated from LATEX by HEVEA.