PUC-Rio
Departamento de Informática
Prof. Marcus Vinicius S. Poggi de Aragão
Horário: 2as-feiras 13-16hs - Sala 522L
25 de agosto de 2008
Data da Entrega: 22 de setembro de 2008
Período: 2008.2
PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

1o Trabalho de Implementação

Descrição

Este trabalho prático consiste em desenvolver códigos para diferentes algoritmos e estruturas de dados para resolver os problemas descritos abaixo e, principalmente, analisar o desempenho das implementações destes algoritmos com respeito ao tempo de CPU. O desenvolvimento destes códigos e a análise devem seguir os seguintes roteiros: A corretude código será testada sobre um conjunto de instâncias que será distribuido. O trabalho entregue deve conter:
0. Estruturas de Dados
Os algoritmos a serem implementados neste trabalho utilizam apenas vetores e matrizes (de acesso direto, i.e. tempo constante) para todas as suas operações.

1. Multiplicação de Polinômios

O grupo deve implementar 3 algoritmos para calcular o polinômio produto de outros dois polinômios. A entrada será dada pelos n+1 coeficientes de cada polinômio de grau n. A saída deverá ser os 2n+1 coeficientes do polinômio produto. O algoritmos seguem:
  1. Algoritmo que consiste da multiplicação direta dos polinômios de entrada (O(n2)).
  2. Algoritmo utilizando divisão-e-conquista (O(nlog2 3)).
  3. Algoritmo utilizando a DFT e a FFT (Fast Fourier Transform) (O(n log n)).
Deve-se determinar qual o algoritmo mais eficiente para todos os valores de n testados. Os valores obrigatórios são 32, 64, 128, 256, 512, 1024, 2048. É recomendável o uso de mais valores para n.

2. Problema de Programação Hiperbólica 0-1 Irrestrito (PPH)

Considere o seguinte lema.


Lemma 1   Seja R* o valor da razão máxima obtida para o (PPH) e S* um subconjunto de N tal que R(S*) = R*. Então, um par t pertence a qualquer S* se e somente se at / bt > R*.


Por que o lema acima é verdadeiro ?

Utilize este lema para projetar 3 algoritmos para encontrar R* e S*.

  1. O primeiro algoritmo inicia com R= a0/b0 e testa repetidamente se existe algum par (ak,bk) que satisfaz às condições do lema. No caso afirmativo, inclui o par no conjunto S, atualiza o valor de R e repete o teste. Observe que se existir um elemento em S que não satisfaz às condições do lema, este elemento deve ser removido.

    Este primeiro algoritmo deve executar em O(n2).

  2. Que relação tem o PPH com o problema de ordenação ? Utilize esta observação para projetar um algoritmo de complexidade O(n log n)

  3. Observe novamente a relação do PPH com o problema de ordenação. O que caracteriza o conjunto S* ? Esta caracterização permite projetar um algoritmo de complexidade O(n). Apresente este algoritmo.
Novamente implemente os algoritmos acima e determine qual o mais eficiente para cada instância executada. Indique para que faixas de valores de n cada algoritmo é o mais eficiente. Instâncias para este problema serão disponibilizadas na página do curso.


This document was translated from LATEX by HEVEA.