13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

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.

5. Programação dinâmica<br />

5.1. Introdução<br />

Temos um par <strong>de</strong> coelhos recém-nascidos. Um par recém-nascido se torna fértil<br />

<strong>de</strong>pois um mês. Depois ele gera um outro par a cada mês seguinte. Logo, os<br />

primeiros <strong>de</strong>scen<strong>de</strong>ntes nascem em dois meses. Supondo que os coelhos nunca<br />

morrem, quantos pares temos <strong>de</strong>pois <strong>de</strong> n meses?<br />

n 0 1 2 3 4 5 6 · · ·<br />

# 1 1 2 3 5 8 13 · · ·<br />

Como os pares somente produzem filhos <strong>de</strong>pois <strong>de</strong> dois meses, temos<br />

Fn = Fn−1<br />

<br />

+ Fn−2<br />

<br />

população antiga <strong>de</strong>scen<strong>de</strong>ntes<br />

com a recorrência completa<br />

<br />

Fn−1 + Fn−2 caso n ≥ 2<br />

Fn =<br />

1 caso n ∈ {0, 1}<br />

Os números <strong>de</strong>finidos por essa recorrência são conhecidos como so números<br />

Fibonacci. Uma implementação recursiva simples para calcular um número<br />

<strong>de</strong> Fibonacci é<br />

1 f i b (n) :=<br />

2 i f n ≤ 1 then<br />

3 return 1<br />

4 else<br />

5 return f i b (n − 1)+ f i b (n − 2)<br />

6 end i f<br />

7 end<br />

Qual a <strong>complexida<strong>de</strong></strong> <strong>de</strong>ssa implementação? Temos a recorrência <strong>de</strong> tempo<br />

<br />

T (n) =<br />

T (n − 1) + T (n − 2) + Θ(1)<br />

Θ(1)<br />

caso n ≥ 2<br />

caso contrário.<br />

95

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

Saved successfully!

Ooh no, something went wrong!