21.12.2013 Views

Enunciado para o 2o trabalho prático (PDF) - Sweet - Universidade ...

Enunciado para o 2o trabalho prático (PDF) - Sweet - Universidade ...

Enunciado para o 2o trabalho prático (PDF) - Sweet - Universidade ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Departamento de Electrónica, Telecomunicações e Informática da <strong>Universidade</strong> de Aveiro<br />

Algoritmos e Complexidade<br />

2012/2013 — 2. Semestre<br />

2. Trabalho — Programação Dinâmica<br />

— Data limite de entrega: 15 de Maio —<br />

Objectivo<br />

Os Números de Motzkin constituem uma sequência de números naturais e são definidos<br />

pela seguinte relação recorrente:<br />

⎧<br />

1 , se n = 0 ou n = 1<br />

⎪⎨<br />

n−2<br />

M(n) =<br />

∑<br />

⎪⎩ M(n − 1) + M(i) × M(n − i − 2) , se n > 1<br />

i=0<br />

Pretende-se analisar e com<strong>para</strong>r o desempenho computacional de duas estratégias distintas<br />

<strong>para</strong> o cálculo de M(n), mas ambas com base na relação recorrente dada.<br />

Devem ser desenvolvidos algoritmos eficientes: serão valorizadas soluções que procurem<br />

minimizar o número de operações efectuadas.<br />

Fases do Trabalho<br />

1) Desenvolver uma função recursiva que permita calcular M(n).<br />

2) Realizar uma sequência de testes, registar e analisar o número de adições efectuadas<br />

pelo algoritmo recursivo.<br />

3) Efectuar uma análise formal da complexidade do algoritmo recursivo.<br />

Sugestão: Comece por determinar uma equação de recorrência não homogénea <strong>para</strong> o<br />

número de adições efectuadas. Obtenha, depois, uma solução <strong>para</strong> essa equação.<br />

4) Com<strong>para</strong>r os resultados obtidos nas duas tarefas anteriores.<br />

5) Desenvolver uma função iterativa <strong>para</strong> calcular M(n).<br />

6) Realizar uma sequência de testes, registar e analisar o número de adições efectuadas<br />

pelo algoritmo iterativo.<br />

7) Efectuar uma análise formal da complexidade do algoritmo iterativo.<br />

8) Com<strong>para</strong>r os resultados obtidos nas duas tarefas anteriores.<br />

9) Com<strong>para</strong>r o número de operações efectuadas pelos algoritmos recursivo e iterativo.<br />

1


Relatório<br />

Cada grupo deverá apresentar um relatório, sucinto e objectivo, do <strong>trabalho</strong> desenvolvido<br />

(máx. 5 páginas).<br />

O relatório deverá incluir:<br />

• A listagem do código das funções desenvolvidas <strong>para</strong> calcular M(n).<br />

• Uma explicação da estratégia iterativa utilizada.<br />

• Os passos principais das análises de complexidade realizadas, bem como as expressões<br />

obtidas <strong>para</strong> o número de operações efectuadas.<br />

• Uma análise com<strong>para</strong>tiva do desempenho computacional dos dois algoritmos implementados,<br />

usando tabelas <strong>para</strong> apresentar os resultados.<br />

• A indicação das referências (livros, artigos, sites) eventualmente consultadas.<br />

Ficheiros<br />

Junto com o relatório (<strong>PDF</strong>), deverá ser também entregue o ficheiro com o código fonte.<br />

Estes ficheiros deverão ser entregues através da plataforma eLearning.<br />

J. Madeira, 18 de Abril de 2013<br />

2

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

Saved successfully!

Ooh no, something went wrong!