You are on page 1of 43

Recorrncia

Prof. Andr Lins


alla@ic.ufal.br
Instituto de Computao
Universidade Federal de Alagoas
Algoritmo exponencial vs.
Algoritmos polinomiais
Funes de complexidade:
Um algoritmo cuja funo de complexidade O(c
n
), c > 1, chamado
de algoritmo exponencial no tempo de execuo.
Um algoritmo cuja funo de complexidade O(p(n)), onde p(n) um
polinmio de grau n, chamado de algoritmo polinomial no tempo de
execuo.
A distino entre estes dois tipos de algoritmos torna-se
significativa quando o tamanho do problema a ser resolvido
cresce.
Esta a razo porque algoritmos polinomiais so muito mais
teis na prtica do que algoritmos exponenciais.
Geralmente, algoritmos exponenciais so simples variaes de
pesquisa exaustiva.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 2
Algoritmo exponencial vs.
Algoritmos polinomiais
Os algoritmos polinomiais so geralmente obtidos
atravs de um entendimento mais profundo da
estrutura do problema.
Tratabilidade dos problemas:
Um problema considerado intratvel se ele to difcil
que no se conhece um algoritmo polinomial para resolv-
lo.
Um problema considerado tratvel (bem resolvido) se
existe um algoritmo polinomial para resolv-lo.
Aspecto importante no projeto de algoritmos.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 3
Algoritmo exponencial vs.
Algoritmos polinomiais
A distino entre algoritmos polinomiais eficientes e
algoritmos exponenciais ineficientes possui vrias excees.
Exemplo: um algoritmo com funo de complexidade f(n) = 2
n
mais rpido que um algoritmo g(n) = n
5
para valores de n
menores ou iguais a 20.
Tambm existem algoritmos exponenciais que so muito teis
na prtica.
Exemplo: o algoritmo Simplex para programao linear possui
complexidade de tempo exponencial para o pior caso mas executa
muito rpido na prtica.
Tais exemplos no ocorrem com freqncia na prtica, e
muitos algoritmos exponenciais conhecidos no so muito
teis.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 4
Algoritmos exponenciais
O problema do caixeiro viajante
Um caixeiro viajante deseja visitar n cidades de tal forma que sua viagem
inicie e termine em uma mesma cidade, e cada cidade deve ser visitada
uma nica vez.
Supondo que sempre h uma estrada entre duas cidades quaisquer, o
problema encontrar a menor rota para a viagem.
Seja a figura que ilustra o exemplo para quatro cidades c
1
, c
2
, c
3
, c
4
, em
que os nmeros nas arestas indicam a distncia entre duas cidades.
O percurso <c
1
, c
3
, c
4
, c
2
, c
1
> uma soluo para o
problema, cujo percurso total tem distncia 24.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 5
Exemplo de algoritmo exponencial
Um algoritmo simples seria verificar todas as rotas e escolher a menor
delas.
H (n-1)! rotas possveis e a distncia total percorrida em cada rota
envolve n adies, logo o nmero total de adies n!.
No exemplo anterior teramos 24 adies.
Suponha agora 50 cidades: o nmero de adies seria 50! ~ 10
64
.
Em um computador que executa 109 adies por segundo, o tempo total
para resolver o problema com 50 cidades seria maior do que 1045 sculos
s para executar as adies.
O problema do caixeiro viajante aparece com freqncia em problemas
relacionados com transporte, mas tambm aplicaes importantes
relacionadas com otimizao de caminho percorrido.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 6
Tcnicas de anlise de algoritmos
Determinar o tempo de execuo de um programa pode ser um problema
matemtico complexo.
Determinar a ordem do tempo de execuo, sem preocupao com o valor
da constante envolvida, pode ser uma tarefa mais simples.
A anlise utiliza tcnicas de matemtica discreta, envolvendo contagem ou
enumerao dos elementos de um conjunto:
manipulao de somas;
produtos;
permutaes;
fatoriais;
coeficientes binomiais;
soluo de equaes de recorrncia.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 7
Anlise do tempo de execuo
Comando de atribuio, de leitura ou de escrita: O(1).
Seqncia de comandos: determinado pelo maior tempo de
execuo de qualquer comando da seqncia.
Comando de deciso: tempo dos comandos dentro do
comando condicional, mais tempo para avaliar a condio,
que O(1).
Anel: soma do tempo de execuo do corpo do anel mais o
tempo de avaliar a condio para terminao (geralmente
O(1)), multiplicado pelo nmero de iteraes.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 8
Anlise do tempo de execuo
Procedimentos no recursivos:
Cada um deve ser computado separadamente um a um,
iniciando com os que no chamam outros procedimentos.
Avalia-se ento os que so chamam os j avaliados
(utilizando os tempos desses).
O processo repetido at chegar no programa principal.
Procedimentos recursivos:
associada uma funo de complexidade f(n)
desconhecida, onde n mede o tamanho dos argumentos.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 9
Procedimento no recursivo
Algoritmo para ordenar os n elementos de um
conjunto A em ordem ascendente.
- Seleciona o menor elemento do
conjunto.
- Troca este elemento com A[1].
- Repete as duas operaes acima
com os n - 1 elementos restantes,
depois com os n - 2, at que reste
apenas um.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 10
Anlise do procedimento no
recursivo - Anel interno
Contm um comando de deciso, com um comando apenas de atribuio.
Ambos levam tempo constante para serem executados.
Quanto ao corpo do comando de deciso, devemos considerar o pior caso,
assumindo que ser sempre executado.
O tempo para incrementar o ndice do anel e avaliar sua condio de
terminao O(1).
O tempo combinado para executar uma vez o anel O(max(1, 1, 1))=
O(1), conforme regra da soma para a notao O.
Como o nmero de iteraes n - i, o tempo gasto no anel O(n-i)1) =
O(n - 1 ), conforme regra do produto para a notao O.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 11
Anlise do procedimento no
recursivo - Anel externo
Contm, alm do anel interno, quatro comandos de atribuio:
O(max(1, (n-i), 1, 1, 1)) = O(n - i)
A linha (1) executada n-1 vezes, e o tempo total para executar o
programa est limitado ao produto de uma constante pelo somatrio de
n-i:
Considerarmos o nmero de comparaes como a medida de custo
relevante, o programa faz n
2
/2 n/2 comparaes para ordenar n
elementos.
Considerarmos o nmero de trocas, o programa realiza exatamente n-1
trocas.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 12
) (
2 2 2
) 1 (
) (
2
2
1
1
n O
n n n n
i n
n
= =

Algoritmos recursivos
Um objeto recursivo quando definido
parcialmente em termos de si mesmo
Exemplo 1: Nmeros naturais
1 um nmero natural
o sucessor de um nmero natural um nmero
natural
Exemplo 2: Funo fatorial
0!=1
Se n>0 ento n!=n(n-1)!
PAA - Adaptado de Prof. Loureiro dcc/ufmg 13
Algoritmos recursivos
Exemplo 3: rvores
A rvore vazia uma rvore
Se T
1
e T
2
so rvores ento T um rvore
PAA - Adaptado de Prof. Loureiro dcc/ufmg 14
Poder da recurso
Definir um conjunto infinito de objetos atravs
de um comando finito
Um problema recursivo P pode ser expresso
como
onde P a composio de comandos S
i
e do
prprio P.
Importante: constantes e variveis locais a P
so duplicadas a cada chamada recursiva
PAA - Adaptado de Prof. Loureiro dcc/ufmg 15
] , [ P S P
i
P
Problema de terminao
Definir uma condio de terminao
Idia:
Associar um parmetro, por exemplo n, com P e
chamar P recursivamente com n-1 como parmetro
A condio n > 0 garante a terminao
Exemplo:
Importante: na prtica necessrio:
mostrar que o nvel de recurso finito, e tem que ser
mantido pequeno! Por que?
PAA - Adaptado de Prof. Loureiro dcc/ufmg 16
)] 1 ( ; [ 0 ) ( P > n P S ento n se n P
i
Razes para limitar a recurso
Memria necessria para acomodar variveis a cada
chamada
O estado corrente da computao tem que ser
armazenado para permitir a volta da chamada
recursiva.
Exemplo:
PAA - Adaptado de Prof. Loureiro dcc/ufmg 17
Quando no usar recursividade
Algoritmos recursivos so apropriados quando o
problema definido em termos recursivos
Entretanto, uma definio recursiva no implica
necessariamente que a implementao recursiva a
melhor soluo!
Casos onde evitar recursividade:
Exemplo:
PAA - Adaptado de Prof. Loureiro dcc/ufmg 18
) ; ( ) ( P S ento condio se n P
i

) : : ; 1 : ( ) ( P F i F i i ento n i se n P = + = <
Eliminando a recursividade de cauda
(Tail recursion)
Logo,
Deve ser transformado em
PAA - Adaptado de Prof. Loureiro dcc/ufmg 19
) ; ( ) ( P S ento B se n P
S faa B enquanto x x n P ; ) (
0
=
Outro exemplo
Observao: para cada chamada a Fib(n), Fib
ativada 2 vezes
PAA - Adaptado de Prof. Loureiro dcc/ufmg 20
Soluo bvia
Complexidade de tempo: T(n)=n-1
Complexidade de espao: E(n)=O(1)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 21
Procedimento recursivo
Para cada procedimento recursivo associada uma funo de
complexidade f(n) desconhecida, onde n mede o tamanho dos
argumentos para o procedimento.
Obtemos uma equao de recorrncia para f(n).
Equao de recorrncia: maneira de definir uma funo por
uma expresso envolvendo a mesma funo
PAA - Adaptado de Prof. Loureiro dcc/ufmg 22
Anlise do procedimento recursivo
Seja T(n) uma funo de complexidade que represente o nmero de
inspees nos n elementos do conjunto.
O custo de execuo das linhas (1) e (2) O(1) e da linha (3) O(n).
Usa-se uma equao de recorrncia para determinar o no de chamadas
Recursivas.
O termo T(n) especificado em funo dos termos anteriores T(1), T(2),
..., T(n-1).
T(n)=n+T(n/3), T(1)=1 (para n=1 fazemos uma inspeo).
Por exemplo, T(3)=T(3/3)+3=4, T(9)=T(9/3)+9=13, e assim por diante.
Para calcular o valor da funo seguindo a definio so necessrios k-1
passos para computar o valor de T(3
k
).
PAA - Adaptado de Prof. Loureiro dcc/ufmg 23
Exemplo de resoluo de
equao de recorrncia
Substitui-se os termos T(k), k < n, at que todos os termos T(k),
k > 1, tenham sido substitudos por frmulas contendo apenas T(1)
Adicionando lado a lado, temos
T(n) = n + n (1/3) + n (1/3
2
) + n (1/3
3
)+ ... +(n/3/3.../3)
que representa a soma de uma srie geomtrica de razo 1/3,
multiplicada por n, e adicionada de T(n/3/3.../3), que menor ou
igual a 1
PAA - Adaptado de Prof. Loureiro dcc/ufmg 24
T(n) = n + n (1/3) + n (1/3
2
) + n (1/3
3
)+ ... +(n/3/3.../3)
Se desprezarmos o termo T(n/3/3.../3), quando n tende
para infinito, ento
Se considerarmos o termo T(n/3/3.../3) e
denominarmos x o nmero de subdivises por 3 do
tamanho do problema, ento n/3
x
= 1, e n = 3
x
. Logo, x
= log
3
n.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 25
2 / 3
3 / 1 1
1
) 3 / 1 ( ) (
0
n n n n T
i
i
=
|
.
|

\
|

= =

=
Lembrando que T(1) = 1 temos
Logo, o programa do exemplo O(n).
PAA - Adaptado de Prof. Loureiro dcc/ufmg 26
2 / 1 2 / 3
1
3 / 1 1
) ) 3 / 1 ( 1 (
1
3
1
)
3
(
3
) (
1
0
1
0
=
+

=
+ =
+ =

=
n
n
n
n
T
n
n n T
x
x
i
i
x
i
x i
Comentrios sobre a recursividade
Evitar o uso de recursividade quando existe
uma soluo bvia por iterao!
Exemplos:
Fatorial
Srie de Fibonacci
PAA - Adaptado de Prof. Loureiro dcc/ufmg 27
Anlise de algoritmos recursivos
Comportamento descrito por uma equao
de recorrncia
Enfoque possvel:
Usar a prpria recorrncia para substituir para
T(m), m < n at que todos os termos tenham sido
substitudos por frmulas envolvendo apenas T(0)
ou o caso base
PAA - Adaptado de Prof. Loureiro dcc/ufmg 28
Anlise da funo FAT
Seja a seguinte funo para calcular o fatorial de n:
Seja a seguinte equao de recorrncia para esta funo:
Esta equao diz que quando n = 1 o custo para executar
FAT igual a d. Para valores de n maiores que 1, o custo
para executar FAT c mais o custo para executar T(n - 1)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 29

> +
=
=
1 ) 1 (
1
) (
n n T c
n d
n T
Resolvendo a equao de recorrncia
Esta equao de recorrncia pode
ser expressa da seguinte forma:
Em cada passo, o valor do termo
T substitudo pela sua definio
(ou seja, esta recorrncia est
sendo resolvida pelo mtodo da
expanso). A ltima equao
mostra que depois da expanso
existem n - 1 cs, correspondentes
aos valores de 2 at n. Desta
forma, a recorrncia pode ser
expressa como:
T(n) = c(n - 1) + d = O(n)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 30
d c c c
T c c c
n T c c c
n T c c
n T c n T
n
+ + + + =
+ + + + =
=
+ + + =
+ + =
+ =


1
...
)) 1 ( ( ...
...
)) 3 ( (
)) 2 ( (
) 1 ( ) (
Alguns somatrios teis
PAA - Adaptado de Prof. Loureiro dcc/ufmg 31
Algumas recorrncias bsicas (1)
Vamos supor que:
Resolvendo por expanso
temos:
PAA - Adaptado de Prof. Loureiro dcc/ufmg 32
k
T
T
T
T
T T
k
k
k
k k
=
+ + + =
+ + + + =
+ + + + =
=
+ + + =
+ + =
+ =


1 ... 1 0
1 ... 1 ) 1 ) 1 ( (
1 ... 1 ) 1 ) 2 ( (
...
1 1 ) 1 ) 2 ( (
1 ) 1 ) 2 ( (
1 ) 2 ( ) 2 (
3
2
1
) 1 ( , 0 ) 1 (
) 2 ( , 1 ) 2 / ( ) (
= =
> + =
n T
n n T n T
n k n
k
log 2 = =
) (log ) (
log ) (
n O n T
n n T
=
=
Algumas recorrncias bsicas (2)
Vamos supor que n = 2
k
=> k = logn. Resolvendo por expanso temos:
PAA - Adaptado de Prof. Loureiro dcc/ufmg 33
) 1 ( , 0 ) 1 (
) 2 ( , ) 2 / ( 2 ) (
= =
> + =
n T
n n n T n T
k
k k
k k
k k k k
k k k
k k k
k
k
T
T
T
T T
2
2 2 ) 1 (
2 ) 2 ...) ) 2 ) 2 ) 1 ( 2 ( 2 (...( 2 ( 2
...
2 ) 2 ) 2 ) 2 ( 2 ( 2 ( 2
2 ) 2 ) 2 ( 2 ( 2
2 ) 2 ( 2 ) 2 (
1 3 2
1 2 3
1 2
1
=
+ =
+ + + + + =
=
+ + + =
+ + =
+ =

) log ( ) (
log ) (
n n O n T
n n n T
=
=
Teorema mestre
Recorrncias da forma
T(n) = aT(n/b)+f(n),
onde a 1 e b > 1 so constantes e f(n) uma
funo assintoticamente positiva podem ser
resolvidas usando o Teorema Mestre. Note
que neste caso no estamos achando a forma
fechada da recorrncia mas sim seu
comportamento assinttico.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 34
Sejam as constantes a 1 e b > 1 e f(n) uma funo definida
nos inteiros no-negativos pela recorrncia
T(n) = aT(n/b)+f(n),
onde a frao n/b pode significar piso ou teto de n/b. A
equao de recorrncia T(n) pode ser limitada
assintoticamente da seguinte forma:
PAA - Adaptado de Prof. Loureiro dcc/ufmg 35
Comentrios sobre o teorema mestre
Nos trs casos estamos comparando a funo f(n) com
a funo n
log
b
a
. Intuitivamente, a soluo da recorrncia
determinada pela maior das duas funes.
Por exemplo:
No primeiro caso a funo n
log
b
a
a maior e a soluo para
a recorrncia T(n) = (n
log
b
a
).
No terceiro caso, a funo f(n) a maior e a soluo para a
recorrncia T(n) = (f(n)).
No segundo caso, as duas funes so do mesmo
tamanho. Neste caso, a soluo fica multiplicada por um
fator logartmico e fica da forma T(n) = (n
log
b
a
log n) = (f(n)
log n).
PAA - Adaptado de Prof. Loureiro dcc/ufmg 36
Tecnicalidades sobre o teorema
mestre
No primeiro caso, a funo f(n) deve ser no
somente menor que n
log
b
a
mas ser
polinomialmente menor. Ou seja, f(n) deve ser
assintoticamente menor que n
log
b
a
por um fator
de n, para alguma constante > 0.
No terceiro caso, a funo f(n) deve ser no
somente maior que n
log
b
a
mas ser
polinomialmente maior e satisfazer a condio de
regularidade que af(n/b) cf(n). Esta condio
satisfeita pela maior parte das funes
polinomiais encontradas neste curso.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 37
Teorema no cobre todas as possibilidades para f(n):
Entre os casos 1 e 3 existem funes f(n) que so menores
que n
log
b
a
mas no so polinomialmente menores.
Entre os casos 2 e 3 existem funes f(n) que so maiores
que n
log
b
a
mas no so polinomialmente maiores.
Se a funo f(n) cai numa dessas condies ou a
condio de regularidade do caso 3 falsa, ento no
se pode aplicar este teorema para resolver a
recorrncia.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 38
Uso do teorema Exemplo 1
T(n) = 9T(n/3)+n
Temos que,
a=9, b=3, f(n)=n
Desta forma,
n
log
b
a
=n
log
3
9
=(n
2
)
Como f(n)=O(n
log
3
9-
), onde =1,podemos aplicar o
caso 1 do teorema e concluir que a soluo da
recorrncia
T(n)=(n
2
)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 39
Uso do teorema Exemplo 2
T(n) = T(2n/3)+1
Temos que,
a=1, b=3/2, f(n)=1
Desta forma,
n
log
b
a
=n
log
3/2
1
=n
0
=1
O caso 2 se aplica j que f(n)= (n
log
b
a
)= (1).
Temos, ento, que a soluo da recorrncia
T(n)=(log n)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 40
Uso do teorema Exemplo 3
T(n) = 3T(n/4)+n log n
Temos que,
a=3, b=4, f(n)= n log n
Desta forma,
n
log
b
a
=n
log
4
3
=O(n
0.793
)
Como f(n)= (n
log
4
3+
), onde 0.2, o caso 3 se aplica se mostrarmos que
a condio de regularidade verdadeira para f(n)
Para um valor suficientemente grande de n
af(n/b)=3(n/4)log(n/4)(3/4)n log n=cf(n)
para c=3/4. Consequentemente, usando o caso 3, a soluo para a
recorrncia
T(n) = (n log n)
PAA - Adaptado de Prof. Loureiro dcc/ufmg 41
Uso do teorema Exemplo 4
T(n) = 2T(n/2)+n log n
Temos que,
a=2, b=2, f(n)= n log n
Desta forma,
n
log
b
a
=n
Aparentemente, o caso 3 deveria se aplicar, j que f(n)= n
log n assintoticamente maior que n
log
b
a
=n. Mas, no
entanto, no polinomialmente maior. A frao f(n)/n
log
b
a
=(n log n)/n que assintoticamente menor que n

para
toda constante positiva . Consequentemente, a
recorrncia cai na situao entre os casos 2 e 3 onde o
teorema no pode ser aplicado.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 42
Short question!
1. Qual a complexidade das seguintes recorrncias:
T(n) = 4T(n/2)+n
T(n) = 4T(n/2)+n
2
T(n) = 4T(n/2)+n
3
2. O tempo de execuo de um algoritmo A descrito pela
recorrncia
T(n) = 7T(n/2)+n
2
Um outro algoritmo A tem um tempo de execuo
descrito pela recorrncia
T(n) = aT(n/4)+n
2
Qual o maior valor inteiro de a tal que A
assintoticamente mais rpido que A?
PAA - Adaptado de Prof. Loureiro dcc/ufmg 43