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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.2. Resolver recorrências<br />

Para colocá-la na forma acima, vamos dividir primeiro por n para obter<br />

T (n)/n = 1 + T (n/2)/(n/2)<br />

e <strong>de</strong>pois substituir A(n) = T (n)/n, que leva à recorrência<br />

A(n) = 1 + A(n/2)<br />

cuja solução é <br />

0≤i≤log 2 n 1 = log 2 n. Portanto temos a solução T (n) =<br />

n log 2 n.<br />

Observe que a análise não consi<strong>de</strong>ra constantes: qualquer função cn log 2 n<br />

também satisfaz a recorrência. A solução exata é <strong>de</strong>terminada pela base; uma<br />

alternativa é concluir que T (n) = Θ(n log 2 n). ♦<br />

Também po<strong>de</strong>mos generalizar isso. Para<br />

é simples <strong>de</strong> ver que<br />

f(n) = 2f(n/2)<br />

f(n) = 2f(n/2) = 2 2 f(n/4) = · · · = 2 log 2 n n = n<br />

(observe que toda função f(n) = cn satisfaz a recorrência).<br />

Generalizando obtemos<br />

f(n) = cf(n/2) = · · · = c log 2 n = n log2c<br />

f(n) = c1f(n/c2) = · · · = c log c 2 n<br />

1<br />

O caso mais complicado é o caso combinado<br />

T (n) = c1T (n/c2) + f(n).<br />

= n logc 2 c1<br />

O nosso objetivo é nos livrar da constante c1. Se dividimos por c log c 2 n<br />

1<br />

T (n)<br />

c log c 2 n<br />

1<br />

= T (n/c2)<br />

e substituindo A(n) = T (n)/c log c 2 n<br />

1<br />

c log c 2 n/c2<br />

1<br />

temos<br />

+ f(n)<br />

c log c 2 n<br />

1<br />

A(n) = A(n/c2) + f(n)<br />

c log c 2 n<br />

1<br />

obtemos<br />

129

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

Saved successfully!

Ooh no, something went wrong!