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