Você está na página 1de 12

MC458 Projeto e Analise de Algoritmos I

C.C. de Souza C.N. da Silva O. Lee P.J. de Rezende


Recorrencias

2o . Semestre de 2012

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

de Recorrencias
Resolucao Mergesort

M ERGESORT(A, p, r )
de recorrencia
Relacoes expressam a complexidade de 1 se p < r
algoritmos recursivos como, por exemplo, os algoritmos de 2 q (p + r )/2
entao
e conquista.
divisao 3 M ERGESORT(A, p, q)
E preciso saber resolver as recorrencias
para que 4 M ERGESORT(A, q + 1, r )
possamos efetivamente determinar a complexidade dos 5 I NTERCALA(A, p, q, r )
algoritmos recursivos.
Qual e a complexidade de M ERGESORT?
Seja T (n) := o consumo de tempo maximo
(pior caso) em
de n = r p + 1
funcao

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
Complexidade do Mergesort Complexidade do Mergesort

M ERGESORT(A, p, r ) M ERGESORT(A, p, r )
1 se p < r 1 se p < r
2 q (p + r )/2
entao 2 q (p + r )/2
entao
3 M ERGESORT(A, p, q) 3 M ERGESORT(A, p, q)
4 M ERGESORT(A, q + 1, r ) 4 M ERGESORT(A, q + 1, r )
5 I NTERCALA(A, p, q, r ) 5 I NTERCALA(A, p, q, r )

linha consumo de tempo linha consumo de tempo


1 ? 1 b0
2 ? 2 b1
3 ? 3 T (n/2)
4 ? 4 T (n/2)
5 ? 5 an
T (n) =? T (n) = T (n/2) + T (n/2) + an + (b0 + b1 )

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

de recorrencias
Resolucao de recorrencias
Resolucao


Queremos resolver a recorrencia


Alguns metodos de recorrencias:
para resolucao
T (1) = 1
substituicao
T (n) = T (n/2) + T (n/2) + an + b para n 2.

iteracao

arvore
de recorrencia

Resolver uma recorrencia significa encontrar uma

formula fechada para T (n). Veremos tambem um resultado bem geral que permite resolver

varias
recorrencias: Master theorem.
e necessario
Nao exata.
achar uma solucao
f (n) tal que
Basta encontrar uma funcao
T (n) (f (n)).

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Metodo
da substituicao Exemplo


Considere a recorrencia:
basica:
Ideia adivinhe qual e a solucao
e T (1) = 1
que ela funciona!
prove por inducao T (n) = T (n/2) + T (n/2) + n para n 2.

Metodo poderoso mas nem sempre aplicavel
(obviamente).
Chuto que T (n) O(n lg n).

Com pratica
e experiencia de usar!
fica mais facil
Mais precisamente, chuto que T (n) 3n lg n.
(Lembre que lg n = log2 n.)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Exemplo Exemplo

Mas espere um pouco!


T (n) = T (n/2) + T (n/2) + n
lnm lnm jnk jnk T (1) = 1 e 3.1. lg 1 = 0 e a base da inducao
nao
funciona!
3 lg +3 lg +n Certo, mas lembre-se da definicao da classe O( ).
ln2m 2 j k2 2
n So preciso provar que T (n) 3n lg n para n n0 onde n0
3 lg n + 3 (lg n 1) + n
l2 n m j n k2 jnk e alguma constante.
=3 + lg n 3 +n Vamos tentar com n0 = 2. Nesse caso
2 j2n k 2
= 3n lg n 3 +n T (2) = T (1) + T (1) + 2 = 4 3.2. lg 2 = 6,
2
3n lg n.
e estamos feitos.
(Yeeeeeeessssss!)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
Exemplo Como achar as constantes?

Certo, funcionou para T (1) = 1.


Mas e se por exemplo T (1) = 8? Tudo bem. Da ate para chutar que T (n) pertence a classe
T (2) = 8 + 8 + 2 = 18 e 3.2. lg 2 = 6.
Entao O(n lg n).
deu certo. . .
Nao Mas como descobrir que T (n) 3n lg n? Como achar a
Certo, mas a basta escolher uma constante maior. constante 3?
Mostra-se do mesmo jeito que T (n) 10n lg n e para esta
Eis um metodo
simples: suponha como hipotese de
escolha T (2) = 18 10.2. lg 2 = 20. que T (n) cn lg n para n n0 onde c e n0 sao
inducao
De modo geral, se o passo de inducao funciona constantes que vou tentar determinar.
(T (n) cn lg n), e possvel escolher c e a base da
(n0 ) de modo conveniente!
inducao

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Primeira tentativa Segunda tentativa

T (n) = T (n/2) + T (n/2) + n


lnm lnm jnk jnk
T (n) = T (n/2) + T (n/2) + n
c lg +c lg +n
lnm lnm jnk jnk 2m 2 j k2 2
c lg +c lg +n ln n
2m 2 j k2 2 c lg n + c (lg n 1) + n
l n m j n k2
2
ln n
c lg n + c lg n + n jnk
l n m j n k2
2 =c
2
+ lg n c +n
=c + lg n + n j2n k 2
2 2 = cn lg n c +n
= cn lg n + n 2
cn lg n.
deu certo. . . )
(Hummm, nao
Para garantir a ultima
desigualdade basta que cn/2 + n 0
e c = 3 funciona. (Yeeeeeeessssss!)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
Completando o exemplo Como chutar?


Mostramos que a recorrencia ha nenhuma receita generica
Nao de
para adivinhar solucoes

recorrencias.
A experiencia e o fator mais importante.
T (1) = 1 Felizmente, ha varias

ideias que podem ajudar.
T (n) = T (n/2) + T (n/2) + n para n 2.

Considere a recorrencia
satisfaz T (n) O(n lg n).
T (1) = 1
Mas quem garante que T (n) nao
e menor? T (n) = 2T (n/2) + n para n 2.
O melhor e mostrar que T (n) (n lg n).
Ela e quase identica
a` anterior e podemos chutar que
Resta entao mostrar que T (n) (n lg n). A prova e similar.
T (n) (n lg n). Isto de fato e verdade. (Exerccio ou consulte
(Exerccio!)
o CLRS)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Como chutar? Truques e sutilezas


Algumas vezes adivinhamos corretamente a solucao de uma

recorrencia, mas as contas aparentemente nao funcionam! Em
geral, o que e necessario
e fortalecer a hipotese

de inducao.

Considere agora a recorrencia

Considere a recorrencia
T (1) = 1
T (n) = 2T (n/2 + 17) + n para n 2. T (1) = 1
T (n) = T (n/2) + T (n/2) + 1 para n 2.
Ela parece bem mais difcil por causa do 17 no lado direito.
Chutamos que T (n) O(n) e tentamos mostrar que T (n) cn

Intuitivamente, porem, deveria afetar a solucao.
isto nao Para n para alguma constante c.
grande a diferenca entre T (n/2) e T (n/2 + 17) nao
e
tanta. T (n) = T (n/2) + T (n/2) + 1
cn/2 + cn/2 + 1
que T (n) (n lg n). (Exerccio!)
Chuto entao
= cn + 1.

(Humm, falhou. . . )
E agora? Sera que erramos o chute? Sera que T (n) (n2 )?
C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
Truques e sutilezas
Metodo
da iteracao

Na verdade, adivinhamos corretamente. Para provar isso, e



preciso usar uma hipotese mais forte.
de inducao
Vamos mostrar que T (n) cn b onde b > 0 e uma e necessario
Nao adivinhar a resposta!
constante. Precisa fazer mais contas!
T (n) = T (n/2) + T (n/2) + 1
Ideia:
expandir (iterar) a recorrencia
e escreve-la como

uma somatoria de termos que dependem apenas de n e
cn/2 b + cn/2 b + 1
iniciais.
das condicoes
= cn 2b + 1

Precisa conhecer limitantes para varias
somatorias.
cn b

onde a ultima
desigualdade vale se b 1.
(Yeeeessss!)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2


Metodo
da iteracao
Metodo
da iteracao


Considere a recorrencia
Como n/4i n/4i temos que
T (n) = b para n 3,
T (n) = 3T (n/4) + n para n 4. T (n) n + 3n/4 + 9n/16 + 27n/64 + + 3j b
T (n) n + 3n/4 + 9n/16 + 27n/64 + + d.3log4 n

Iterando a recorrencia obtemos
n.(1 + 3/4 + 9/16 + 27/64 + ) + dnlog4 3
T (n) = n + 3T (n/4)  i
X 3
= n + 3(n/4 + 3T (n/16)) =n + dnlog4 3
4
i=0
= n + 3(n/4 + 3(n/16 + 3T (n/64)))
= 4n + dnlog4 3
= n + 3n/4 + 9n/16 + 27T (n/64).
1
pois 3log4 n = nlog4 3 e i
P
i=0 q = 1q para 0 < q < 1.
Certo, mas quando devo parar?

O i-esimo
termo da serie e 3i n/4i . Ela termina quando Como log4 3 < 1 segue que nlog4 3 o(n) e logo, T (n) O(n).
i
n/4 3, ou seja, i log4 n.

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Metodo
de iteracao
Metodo
de iteracao

T (n) = b para n 3,
T (n) = 3T (n/4) + n para n 4.
As contas ficam mais simples se supormos que a

recorrencia esta definida apenas para potencias
de um Chuto que T (n) cn.
numero,
por exemplo, n = 4i .

Note, entretanto, que a recorrencia deve ser provada para
T (n) = 3T (n/4) + n
todo natural suficientemente grande.
3cn/4 + n
Muitas vezes, e possvel depois de iterar a recorrencia,

e usar o metodo
adivinhar a solucao
da substituicao! 3c(n/4) + n
cn

onde a ultima
desigualdade vale se c 4.
(Yeeessss!)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Arvore
de recorrencia
Arvore
de recorrencia


Considere a recorrencia
Permite visualizar melhor o que acontece quando a T (n) = (1) para n = 1, 2, 3,

recorrencia e iterada. T (n) = 3T (n/4) + cn2 para n 4,
E mais facil
organizar as contas.
para recorrencias
Util de algoritmos de onde c > 0 e uma constante.

divisao-e-conquista.
T (n) = (1) para indicar
Costuma-se (CLRS) usar a notacao
que T (n) e uma constante.

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Arvore
de recorrencia
Arvore
de recorrencia


Simplificacao


Vamos supor que a recorrencia esta definida apenas para

potencias de 4

T (n) = (1) para n = 1,


T (n) = 3T (n/4) + cn2 para n = 4, 16, . . . , 4i , . . ..

Depois
Isto permite descobrir mais facilmente a solucao.

usamos o metodo para formalizar.
da substituicao

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Arvore
de recorrencia
Arvore
de recorrencia

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Arvore
de recorrencia
Arvore
de recorrencia

Logo,
 2  3
3 2
2 3 2 3
T (n) = cn + cn + cn + cn2 + +
O numero
de nveis e log4 n + 1. 16 16 16
 log4 n1
3
No nvel i o tempo gasto (sem contar as chamadas + cn2 + (nlog4 3 )
16
recursivas) e (3/16)i cn2 .
log4 n1 
3 i 2
X 
No ultimo
nvel ha 3log4 n = nlog4 3 folhas. Como = cn + (nlog4 3 )
16
T (1) = (1) o tempo gasto e (nlog4 3 ). i=0

3 i 2
 
X 3 2
cn + (nlog4 3 ) = cn + (nlog4 3 ),
16 16
i=0

e T (n) O(n2 ).

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Arvore
de recorrencia
Arvore
de recorrencia

Mas T (n) O(n2 ) e realmente a solucao


da recorrencia

original?
Resumo

Com base na arvore
de recorrencia, chutamos que T (n) dn2
para alguma constante d > 0. O numero
em cada nvel da arvore
de nos e o numero
de
chamadas recursivas.
T (n) = 3T (n/4) + cn2
Em cada no indicamos o tempo ou trabalho gasto
3dn/42 + cn2
naquele no que nao corresponde a chamadas recursivas.
3d(n/4)2 + cn2 Na coluna mais a` direita indicamos o tempo total naquele
3 corresponde a chamadas recursivas.
nvel que nao
= dn2 + cn2
16 Somando ao longo da coluna determina-se a solucao da
dn2
recorrencia.
onde a ultima
desigualdade vale se d (16/13)c.
(Yeeesssss!)

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
Vamos tentar juntos?
Recorrencias com O a` direita (CLRS)

Uma recorrencia

T (n) = (1) para n = 1, 2,


Eis um exemplo um pouco mais complicado. 2
T (n) = 3T (n/4) + (n ) para n 3

Vamos resolver a recorrencia

representa todas as recorrencias da forma
T (n) = 1 para n = 1, 2,
T (n) = T (n/3) + T (2n/3) + n para n 3. T (n) = a para n = 1, 2,
2
T (n) = 3T (n/4) + bn para n 3
Qual e a solucao
da recorrencia?

onde a e b > 0 sao
constantes.
Resposta: T (n) O(n lg n). (Resolvido em aula)
exatas dependem dos valores de a e b, mas estao
As solucoes
todas na mesma classe .
e T (n) = (n2 ), ou seja, T (n) (n2 ).
A solucao
valem para as classes O, , o, .
As mesmas observacoes
C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2


Recorrencia do Mergesort assintotica
Cuidados com a notacao


Podemos escrever a recorrencia de tempo do Mergesort da assintotica
A notacao e muito versatil
e expressiva. Entretanto,
seguinte forma deve-se tomar alguns cuidados.

Considere a recorrencia
T (1) = (1)
T (n) = T (n/2) + T (n/2) + (n) para n 2. T (1) = 1
T (n) = 2T (n/2) + n para n 2.
da recorrencia
A solucao e T (n) = (n lg n).
A prova e essencialmente a mesma do primeiro exemplo. similar a recorrencia
E do Mergesort!
(Exerccio!) Mas eu vou provar que T (n) = O(n)!

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2
assintotica
Cuidados com a notacao Teorema Master

Vou mostrar que T (n) cn para alguma constante c > 0.


para
Veremos agora um resultado que descreve solucoes

recorrencias da forma

T (n) = 2T (n/2) + n T (n) = aT (n/b) + f (n),


2cn/2 + n
onde a 1 e b > 1 sao
constantes.
cn + n
O caso base e omitido na definicao
e convenciona-se que
= O(n) = ERRADO!!!
e uma constante para valores pequenos.

Por que? n/b pode indicar tanto n/b quanto n/b.
A expressao
foi feito o passo indutivo, ou seja, nao
Nao foi mostrado que O Teorema Master nao fornece a resposta para todas as
T (n) cn.
recorrencias da forma acima.

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Teorema Master
Exemplos de Recorrencias

Teorema (Teorema Master (CLRS))

Sejam a 1 e b > 1 constantes, seja f (n) uma funcao e seja


Exemplos onde o Teorema Master se aplica:
T (n) definida para os inteiros nao-negativos
de
pela relacao

recorrencia Caso 1:
T (n) = aT (n/b) + f (n). T (n) = 9T (n/3) + n
T (n) = 4T (n/2) + n log n
T (n) pode ser limitada assintoticamente da seguinte
Entao
Caso 2:
maneira:
T (n) = T (2n/3) + 1
1 Se f (n) O(nlogb a ) para alguma constante > 0, entao
T (n) = 2T (n/2) + (n + log n)
T (n) (nlogb a )
Caso 3:
2 Se f (n) (nlogb a ), entao
T (n) (nlogb a log n) T (n) = T (3n/4) + n log n
3 Se f (n) (nlogb a+ ), para alguma constante > 0 e se
af (n/b) cf (n), para alguma constante c < 1 e para n
suficientemente grande, entao T (n) (f (n))

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2 C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende
MC458 Projeto e Analise de Algoritmos I v. 2.2

Exemplos de Recorrencias

se aplica:
Exemplos onde o Teorema Master nao
T (n) = T (n 1) + n
T (n) = T (n a) + T (a) + n, (a 1 inteiro)
T (n) = T (n) + T ((1 )n) + n, (0 < < 1)
T (n) = T (n 1) + log n
T (n) = 2T ( n2 ) + n log n

C.C. de Souza, C.N. da Silva, O. Lee, P.J. de Rezende


MC458 Projeto e Analise de Algoritmos I v. 2.2

Você também pode gostar