Escolar Documentos
Profissional Documentos
Cultura Documentos
www.icmc.usp.br/~moacir
Instituto de Cincias Matemticas e de Computao USP
2010/2
2010/2
1/1
Sumrio
2010/2
2/1
ab
int exp1(int a, int b) { int res = 1; while (b > 0) { res *= a; b -= 1; } return res; }
2010/2
3/1
ab
de maneira
Qual a complexidade dessa funo? Apesar de funcionar como uma repetio, a resoluo no to trivial assim!
2010/2
4/1
Sumrio
2010/2
5/1
Recorrncias
Para analisar o consumo de tempo de um algoritmo recursivo necessrio resolver uma recorrncia. Uma recorrncia uma expresso que d o valor de uma funo em termos dos valores anteriores da mesma funo. Exemplo:
F (n) = F (n 1) + 3n + 2
uma recorrncia que d o valor de
(1)
Uma recorrncia pode ser vista como um algoritmo recursivo que calcula uma funo a partir de um valor inicial Mais quais os valores de
n? n = 2, 3, 4, 5, , e que F (1) = 1
2010/2
6/1
Recorrncias
Uma recorrncia satisfeita por muitas funes diferentes uma para cada valor inicial. As funes no entanto so, em geral, do mesmo tipo. Interessam geralmente funes denidas nos nmeros naturais, mas podem ser denidas em outros conjuntos: naturais maiores que 99, as 1 potncias inteiras de 2, potncias inteiras de 1 , etc. 2
Resolver uma recorrncia ...
...encontrar uma frmula fechada que d o valor diretamente em termos de seu parmetro.
(FEOFILOFF, 2010)
Recorrncias
Considere:
F (n) = F (n 1) + 3n + 2
(2)
n {2, 3, 4, } H uma innidade de funes F que satisfazem a recorrncia com valor inicial F (1) diferentes (F (1) = 1, F (1) = 10 , etc.).
E suponha que
De modo mais geral, evidente que para cada nmero i existe uma (e apenas uma) funo F denida sobre {1, 2, 3, 4, } que tem valor inicial F (1) = i e satisfaz a recorrncia acima.
2010/2
8/1
ab
1 2 3
Seja
o nmero de vezes
O custo das linhas 1 e 2 O (1). Quantas vezes a linha 3 ser executada? quantas chamadas recursivas sero necessrias?
05Anlise de Algoritmos (p4) 2010/2 9/1
1 2 3
T (b):
temos 1
T (b) = 4 + T (b 1)
Isso signica que temos 3 operaes mais uma chamada recursiva que dever processar uma entrada de tamanho
Moacir Ponti Jr. (ICMCUSP) 05Anlise de Algoritmos (p4)
(3)
b 1.
2010/2
10 / 1
T (b) = 4k + T (b k )
Quando termina? Quando alcano o caso base, ou seja
b k = 1, ou k = b 1
1 2 3
T (b) = 4b 2, podemos dizer que O (b), ou seja, linear. Observao: aqui usamos b para facilitar o entendimento, mas quer
dizer tambm o tamanho da entrada, nesse caso relativo ao tamanho do expoente.
2010/2
12 / 1
ab
Se
b b
perceba que se b for par, reduzi o problema pela metade (b/2). perceba que mesmo no caso mpar, no prximo passo teremos b par, e podemos utilizar a mesma propriedade acima.
for mpar, ento
ab = (a a)b/2
Se
ab = a (ab1 )
2010/2
13 / 1
1 2 3 4 5
exp3?
comparao, 1 multiplicao, 1 diviso e o retorno = 6 operaes, mais a quantidade de operaes necessrias para resolver Ento no caso em que
Moacir Ponti Jr. (ICMCUSP)
par:
T (b) = 6 + T (b/2)
T (b/2).
2010/2
14 / 1
1 2 3 4 5
Para
comparao, 1 multiplicao, 1 subtrao e o retorno = 6 operaes, mais a quantidade de operaes necessrias para resolver Ento no caso em que
T (b 1).
mpar:
T (b) = 6 + T (b 1)
2010/2 15 / 1
exp3:
b b b
mas como no prximo passo do caso mpar, estaremos no caso par, ento: mpar:
T (b) = 6 + (6 + T
b 1 2
podemos aproximar
b1
2
b
2
2010/2 16 / 1
T (b) = 12 + T
b
2
= 12 + 12 + T
b
4
= 12 + 12 + 12 + T = 12k + T
o caso base ocorre quando: ou seja: 2k
b
8
b /2 k = 1 b = 2k k = log2 b
2010/2
17 / 1
1 2 3 4 5
exp3,
desconsiderando constantes,
O (log b)
exp1 exp3
exp2,
um sinal de que eram lineares. Em o problema dividido por um fator (2) a cada etapa
Sumrio
2010/2
19 / 1
Torres de Hani
Problema que consiste em trs postes e um nmero de discos de diferentes tamanhos que podem deslizar pelos postes. preciso mover os discos de um poste a outro seguindo as seguintes regras: a) mover um disco de cada vez e b) um disco maior no pode car sobre um disco menor.
2010/2
20 / 1
Torres de Hani
Tentar resolver esse problema um bom exerccio de como pensar recursivamente preciso entender o caso base e como reduzir o problema a uma instncia menor. A estratgia bsica :
1 2 3
Mover n 1 discos do poste origem para o intermedirio Mover 1 disco (disco base) do poste origem para o destino Mover n 1 discos do poste intermedirio para o destino
05Anlise de Algoritmos (p4) 2010/2 21 / 1
Torres de Hani
void Hanoi(int tam, char ori, char des, char interm) { if (tam == 1) printf("Mova disco de %c para %c\n", ori, des); else { 3 Hanoi(tam-1, ori, interm, des); 4 Hanoi(1, ori, des, interm); 5 Hanoi(tam-1, interm, des, ori); } }
Qual a ordem de crescimento para esse algoritmo? (
1 2
T (1) = 2)
Para encontrar uma frmula temos: uma comparao, uma movimentao de 1 disco e duas movimentaes de
T (n) = 1 + T (1) + 2 T (n 1)
Moacir Ponti Jr. (ICMCUSP) 05Anlise de Algoritmos (p4)
n 1 discos.
2010/2 22 / 1
Torres de Hani
Frmula bsica
T (n) = 1 + T (1) + 2 T (n 1) = 3 + 2 T (n 1)
expandindo...
T (n) = 3 + 2 3 + 4 T (n 2) = 3 + 2 3 + 4 3 + 8 T (n 3)
T (n) = 3(1 + 2 + + 2k 1 ) + 2k T (n k )
2010/2
23 / 1
Torres de Hani
2010/2
24 / 1
Torres de Hani
T (n) = 3(1 + 2 + + 2k 1 ) + 2k T (n k ). Veja que, para n = 5, e desconsiderando o primero termo (soma
Considere constante), teremos:
T (5) = 2k (5 k )
= 24 (5 4) = 24
Podemos dizer que
T (n) 2n1 .
O (2n ).
Ao olharmos de forma supercial, pareceria linear. No entanto, a cada passo o problema dividido em duas partes menores, o que fez grande diferena.
2010/2
25 / 1
Torres de Hani
Problema inventado por douard Lucas em 1883, com base em uma lenda (inventada por ele ou que o inspirou?). O criador do universo, no incio dos tempos criou em Hanoi uma grande sala com trs postes. Num dos postes colocou 64 discos dourados de tamanhos diferentes, do maior para o menor. Os sacerdotes de Hani, criados na mesma poca, de acordo com a lenda, realizam movimentos com os discos de um poste para outro seguindo as duas regras do problema. Segundo a estria, quando o ltimo movimento do quebra-cabeas for feito, o mundo chegara ao m.
2010/2
26 / 1
Sumrio
2010/2
27 / 1
Mtodo de substituio
Existem muitos mtodos para se obter uma frmula fechada para recorrncias. Um dos mais utilizados o mtodo de substituio. tambm conhecido como expandir, conjecturar e vericar. Consiste em duas etapas:
1 2
Pressupor a formula da soluo (expandir e conjecturar), Usar induo matemtica para mostrar que a soluo funciona.
O nome vem da substituio do palpite pela funo resposta. Pode-se ajustar o palpite para encontrar funes mais exatas. Pode ser usado para estabelecer limites superiores ou inferiores sobre uma recorrncia. As anlises que zemos at agora contemplam as partes de expandir e conjecturar. No entanto, ainda precisamos vericar por induo se o palpite est correto.
2010/2
28 / 1
Mtodo de substituio
T (n) verdadeiro para n 1. Utilizamos para a induo o caso base, T (1), supomos T (n ) e provamos por hiptese que T (n 1) verdadeiro. Exemplo (exp2): tnhamos a frmula T (n ) = 4 + T (n 1) e chegamos frmula fechada T (n ) = 4n 2.
Queremos provar que um dado
Para n = 1 fcil ver que a frmula est correta, pois T (1) = 2. Agora, tome n > 1 e suponha que a frmula fechada acima vale com n 1 no lugar de n. T (n) = 4 + T (n 1) = 4 + [4(n 1) 2] = 4 + [4n 6] = 4n 2 dessa forma, provamos por induo que nosso palpite verdadeiro e, portanto, exp2 O (n).
05Anlise de Algoritmos (p4) 2010/2 29 / 1
Bibliograa
ZIVIANI, N. Projeto de algoritmos: com implementaes em Pascal e C. (seo 1.4). 2.ed. Thomson, 2004. CORMEN, T.H. et al. Algoritmos: Teoria e Prtica (Captulo 4). Campus. 2002. FEOFILOFF, P. Recorrncias. Disponvel em:
http://www.ime. usp.br/~pf/analise_de_algoritmos/aulas/recorrencias.html.
2010/2
30 / 1