Escolar Documentos
Profissional Documentos
Cultura Documentos
1
2
n
2
3n c
2
n
2
para todo n n
o
.
Se dividirmos a expresso acima por n
2
temos:
c
1
1
2
3
n
c
2
UFMG/ICEx/DCC 85
Notao : Exemplo
A inequao mais a direita ser sempre vlida para qualquer valor de n 1 ao
escolhermos c
2
1
2
.
Da mesma forma, a inequao mais a esquerda ser sempre vlida para qual-
quer valor de n 7 ao escolhermos c
1
1
14
.
Assim, ao escolhermos c
1
= 1/14, c
2
= 1/2 e n
0
= 7, podemos vericar que
1
2
n
2
3n = (n
2
).
Note que existem outras escolhas para as constantes c
1
e c
2
, mas o fato impor-
tante que a escolha existe.
Note tambm que a escolha destas constantes depende da funo
1
2
n
2
3n.
Uma funo diferente pertencente a (n
2
) ir provavelmente requerer outras
constantes.
UFMG/ICEx/DCC 86
Notao : Exemplo
Usando a denio formal de prove que 6n
3
,= (n
2
).
UFMG/ICEx/DCC 87
Notao O
c
n
f , g
n
n
( )
( )
n
f
g
0
f(n) = O(g(n))
UFMG/ICEx/DCC 88
Notao O
A notao O dene um limite superior para a funo, por um fator constante.
Escreve-se f(n) = O(g(n)), se existirem constantes positivas c e n
0
tais
que para n n
0
, o valor de f(n) menor ou igual a cg(n). Neste caso,
pode-se dizer que g(n) um limite assinttico superior (em ingls, asymptot-
ically upper bound) para f(n).
f(n) = O(g(n)), c > 0 e n
0
[ 0 f(n) cg(n), n n
0
Escrevemos f(n) = O(g(n)) para expressar que g(n) domina assintotica-
mente f(n). L-se f(n) da ordem no mximo g(n).
UFMG/ICEx/DCC 89
Notao O: Exemplos
Seja f(n) = (n +1)
2
.
Logo f(n) O(n
2
), quando n
0
= 1 e c = 4, j que
(n +1)
2
4n
2
para n 1.
Seja f(n) = n e g(n) = n
2
. Mostre que g(n) no O(n).
Sabemos que f(n) O(n
2
), pois para n 0, n n
2
.
Suponha que existam constantes c e n
0
tais que para todo n n
0
, n
2
n)]
nlogn +kn +O(
nlogn).
UFMG/ICEx/DCC 95
Notao
c
n
f , g
n
n
( )
( )
n
g
f
0
f(n) = (g(n))
UFMG/ICEx/DCC 96
Notao
A notao dene um limite inferior para a funo, por um fator constante.
Escreve-se f(n) = (g(n)), se existirem constantes positivas c e n
0
tais
que para n n
0
, o valor de f(n) maior ou igual a cg(n).
Pode-se dizer que g(n) um limite assinttico inferior (em ingls, asymp-
totically lower bound) para f(n).
f(n) = (g(n)), c > 0 e n
0
[ 0 cg(n) f(n), n n
0
UFMG/ICEx/DCC 97
Notao
Quando a notao usada para expressar o tempo de execuo de um al-
goritmo no melhor caso, est se denindo tambm o limite (inferior) do tempo
de execuo desse algoritmo para todas as entradas.
Por exemplo, o algoritmo de ordenao por insero (n) no melhor
caso.
O tempo de execuo do algoritmo de ordenao por insero (n).
O que signica dizer que o tempo de execuo (i.e., sem especicar se
para o pior caso, melhor caso, ou caso mdio) (g(n))?
O tempo de execuo desse algoritmo pelo menos uma constante vezes
g(n) para valores sucientemente grandes de n.
UFMG/ICEx/DCC 98
Notao : Exemplos
Para mostrar que f(n) = 3n
3
+ 2n
2
(n
3
) basta fazer c = 1, e ento
3n
3
+2n
2
n
3
para n 0.
Seja f(n) = n para n mpar (n 1) e f(n) = n
2
/10 para n par (n
0).
Neste caso f(n) (n
2
), bastando considerar c = 1/10 e n =
0, 2, 4, 6, . . .
UFMG/ICEx/DCC 99
Limites do algoritmo de ordenao por insero
O tempo de execuo do algoritmo de ordenao por insero est entre
(n) e O(n
2
).
Estes limites so assintoticamente os mais rmes possveis.
Por exemplo, o tempo de execuo deste algoritmo no (n
2
), pois o
algoritmo executa em tempo (n) quando a entrada j est ordenada.
No contraditrio dizer que o tempo de execuo deste algoritmo no pior
caso (n
2
), j que existem entradas para este algoritmo que fazem com
que ele execute em tempo (n
2
).
UFMG/ICEx/DCC 100
Funes de custo (n
o
de comparaes) do
algoritmo de ordenao por Insero
UFMG/ICEx/DCC 101
Funes de custo e notaes assintticas do
algoritmo de ordenao por Insero
_
_
Pior Caso:
c
Pior Caso
(n) =
n
2
2
+
n
2
1 =
O
_
n
2
_
Caso Mdio:
c
Caso Medio
(n) =
n
2
4
+
3n
4
1 =
O
_
n
2
_
Melhor caso:
c
Melhor Caso
(n) = n 1 =
O
_
n
_
O indica a notao normalmente usada para esse caso.
UFMG/ICEx/DCC 102
Teorema
Para quaisquer funes f(n) e g(n),
f(n) = (g(n))
se e somente se,
f(n) = O(g(n)), e
f(n) = (g(n))
UFMG/ICEx/DCC 103
Mais sobre notao assinttica de funes
Existem duas outras notaes na anlise assinttica de funes:
Notao o (O pequeno)
Notao
Estas duas notaes no so usadas normalmente, mas importante saber
seus conceitos e diferenas em relao s notaes O e , respectivamente.
UFMG/ICEx/DCC 104
Notao o
O limite assinttico superior denido pela notao O pode ser assintotica-
mente rme ou no.
Por exemplo, o limite 2n
2
= O(n
2
) assintoticamente rme, mas o limite
2n = O(n
2
) no .
A notao o usada para denir um limite superior que no assintotica-
mente rme.
Formalmente a notao o denida como:
f(n) = o(g(n)), para qq c > 0 e n
0
[ 0 f(n) < cg(n), n n
0
Exemplo, 2n = o(n
2
) mas 2n
2
,= o(n
2
).
UFMG/ICEx/DCC 105
Notao o
As denies das notaes O (o grande) e o (o pequeno) so similares.
A diferena principal que em f(n) = O(g(n)), a expresso 0 f(n)
cg(n) vlida para todas constantes c > 0.
Intuitivamente, a funo f(n) tem um crescimento muito menor que g(n)
quando n tende para innito. Isto pode ser expresso da seguinte forma:
lim
n
f(n)
g(n)
= 0
Alguns autores usam este limite como a denio de o.
UFMG/ICEx/DCC 106
Notao
Por analogia, a notao est relacionada coma notao da mesma forma
que a notao o est relacionada com a notao O.
Formalmente a notao denida como:
f(n) = (g(n)), para qq c > 0 e n
0
[ 0 cg(n) < f(n), n n
0
Por exemplo,
n
2
2
= (n), mas
n
2
2
,= (n
2
).
A relao f(n) = (g(n)) implica em
lim
n
f(n)
g(n)
= ,
se o limite existir.
UFMG/ICEx/DCC 107
Comparao de programas
Podemos avaliar programas comparando as funes de complexidade, negli-
genciando as constantes de proporcionalidade.
Um programa com tempo de execuo O(n) melhor que outro com tempo
O(n
2
).
Porm, as constantes de proporcionalidade podem alterar esta consider-
ao.
Exemplo: um programa leva 100n unidades de tempo para ser executado e
outro leva 2n
2
. Qual dos dois programas melhor?
Depende do tamanho do problema.
Para n < 50, o programa com tempo 2n
2
melhor do que o que possui
tempo 100n.
Para problemas com entrada de dados pequena prefervel usar o pro-
grama cujo tempo de execuo O(n
2
).
Entretanto, quando n cresce, o programa com tempo de execuo O(n
2
)
leva muito mais tempo que o programa O(n).
UFMG/ICEx/DCC 108
Classes de Comportamento Assinttico
Complexidade Constante
f(n) = O(1)
O uso do algoritmo independe do tamanho de n.
As instrues do algoritmo so executadas um nmero xo de vezes.
O que signica um algoritmo ser O(2) ou O(5)?
UFMG/ICEx/DCC 109
Classes de Comportamento Assinttico
Complexidade Logartmica
f(n) = O(logn)
Ocorre tipicamente em algoritmos que resolvem um problema transfor-
mando-o em problemas menores.
Nestes casos, o tempo de execuo pode ser considerado como sendo
menor do que uma constante grande.
Supondo que a base do logaritmo seja 2:
Para n = 1000, log
2
10.
Para n = 1000000, log
2
20.
Exemplo:
Algoritmo de pesquisa binria.
UFMG/ICEx/DCC 110
Classes de Comportamento Assinttico
Complexidade Linear
f(n) = O(n)
Em geral, um pequeno trabalho realizado sobre cada elemento de en-
trada.
Esta a melhor situao possvel para um algoritmo que tem que proces-
sar/produzir n elementos de entrada/sada.
Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.
Exemplos:
Algoritmo de pesquisa seqencial.
Algoritmo para teste de planaridade de um grafo.
UFMG/ICEx/DCC 111
Classes de Comportamento Assinttico
Complexidade Linear Logartmica
f(n) = O(nlogn)
Este tempo de execuo ocorre tipicamente em algoritmos que resolvem
um problema quebrando-o em problemas menores, resolvendo cada um
deles independentemente e depois agrupando as solues.
Caso tpico dos algoritmos baseados no paradigma diviso-e-conquista.
Supondo que a base do logaritmo seja 2:
Para n = 1000000, log
2
20000000.
Para n = 2000000, log
2
42000000.
Exemplo:
Algoritmo de ordenao MergeSort.
UFMG/ICEx/DCC 112
Classes de Comportamento Assinttico
Complexidade Quadrtica
f(n) = O(n
2
)
Algoritmos desta ordem de complexidade ocorrem quando os itens de da-
dos so processados aos pares, muitas vezes em um anel dentro do outro
Para n = 1000, o nmero de operaes da ordem de 1000000.
Sempre que n dobra o tempo de execuo multiplicado por 4.
Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-
tivamente pequenos.
Exemplos:
Algoritmos de ordenao simples como seleo e insero.
UFMG/ICEx/DCC 113
Classes de Comportamento Assinttico
Complexidade Cbica
f(n) = O(n
3
)
Algoritmos desta ordem de complexidade geralmente so teis apenas
para resolver problemas relativamente pequenos.
Para n = 100, o nmero de operaes da ordem de 1000000
Sempre que n dobra o tempo de execuo multiplicado por 8.
Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-
tivamente pequenos.
Exemplo:
Algoritmo para multiplicao de matrizes.
UFMG/ICEx/DCC 114
Classes de Comportamento Assinttico
Complexidade Exponencial
f(n) = O(2
n
)
Algoritmos desta ordem de complexidade no so teis sob o ponto de
vista prtico.
Eles ocorrem na soluo de problemas quando se usa a fora bruta para
resolv-los.
Para n = 20, o tempo de execuo cerca de 1000000.
Sempre que n dobra o tempo de execuo ca elevado ao quadrado.
Exemplo:
Algoritmo do Caixeiro Viajante
UFMG/ICEx/DCC 115
Classes de Comportamento Assinttico
Complexidade Exponencial
f(n) = O(n!).
Um algoritmo de complexidade O(n!) dito ter complexidade exponencial,
apesar de O(n!) ter comportamento muito pior do que O(2
n
).
Geralmente ocorrem quando se usa fora bruta na soluo do problema.
Considerando:
n = 20, temos que 20! = 2432902008176640000, um nmero com 19
dgitos.
n = 40 temos um nmero com 48 dgitos.
UFMG/ICEx/DCC 116
Comparao de funes de complexidade
Funo Tamanho n
de custo 10 20 30 40 50 60
n
0,00001 0,00002 0,00003 0,00004 0,00005 0,00006
s s s s s s
n
2 0,0001 0,0004 0,0009 0,0016 0,0.35 0,0036
s s s s s s
n
3 0,001 0,008 0,027 0,64 0,125 0.316
s s s s s s
n
5 0,1 3,2 24,3 1,7 5,2 13
s s s min min min
2
n 0,001 1 17,9 12,7 35,7 366
s s min dias anos seg
3
n 0,059 58 6,5 3855 10
8
10
13
s min anos sec sec sec
Funo de Computador Computador 100 Computador 1000
custo de tempo atual vezes mais rpido vezes mais rpido
n t
1
100 t
1
1000 t
1
n
2
t
2
10 t
2
31, 6 t
2
n
3
t
3
4, 6 t
3
10 t
3
2
n
t
4
t
4
+6, 6 t
4
+10
UFMG/ICEx/DCC 117
Hierarquias de funes
A seguinte hierarquia de funes pode ser denida do ponto de vista assinttico:
1 loglogn logn n
n
c
n
logn
c
n
n
n
c
c
n
onde e c so constantes arbitrrias com 0 < < 1 < c.
UFMG/ICEx/DCC 118
Hierarquias de funes: Exerccio 1
Usando MatLab, ou um outro pacote matemtico, desenhe os grcos dessas
funes, quando n
UFMG/ICEx/DCC 119
Hierarquias de funes: Exerccio 2
Onde as seguintes funes se encaixam nessa hierarquia? (Mostre a sua
soluo)
(a) (n) =
n
lnn
. Esta funo dene o nmero de primos menor ou igual a n.
(b) e
logn
.
Dica: e
f(n)
e
g(n)
lim
n
(f(n) g(n)) =
UFMG/ICEx/DCC 120
Hierarquias de Funes
Preliminares
A hierarquia apresentada est relacionada com funes que vo para o innito.
No entanto, podemos ter o recproco dessas funes j que elas nunca so
zero. Isto ,
f(n) g(n)
1
g(n)
1
f(n)
.
Assim, todas as funes (exceto 1) tendem para zero:
1
c
c
n
1
n
n
1
c
n
1
n
logn
1
n
c
1
n
1
logn
1
loglogn
1
UFMG/ICEx/DCC 121
Hierarquias de Funes
Soluo de (a)
(n) =
n
lnn
Temos que (note que a base do logaritmo no altera a hierarquia):
1
n
1
lnn
1
Multiplicando por n, temos:
n
n
n
lnn
n,
ou seja,
n
1
(n) n
Note que o valor 1 ainda menor que 1.
UFMG/ICEx/DCC 122
Hierarquias de Funes
Soluo de (b)
e
logn
Dado a hierarquia:
1 lnlnn
lnn lnn
e elevando a e, temos que:
e
1
e
lnlnn
e
lnn
e
lnn
Simplicando temos:
e lnn e
lnn
n
UFMG/ICEx/DCC 123
Algoritmo exponencial Algoritmo polinomial
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 exe-
cuo.
A distino entre estes dois tipos de algoritmos torna-se signicativa 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.
UFMG/ICEx/DCC 124
Algoritmo exponencial Algoritmo polinomial
Os algoritmos polinomiais so geralmente obtidos atravs de um entendi-
mento mais profundo da estrutura do problema.
Tratabilidade dos problemas:
Um problema considerado intratvel se ele to difcil que no se conhe-
ce 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.
UFMG/ICEx/DCC 125
Algoritmos polinomiais Algoritmos exponenciais
A distino entre algoritmos polinomiais ecientes e algoritmos exponenciais
inecientes 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 complexi-
dade 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.
UFMG/ICEx/DCC 126
Algoritmo exponencial
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 pro-
blema encontrar a menor rota para a viagem.
Seja a gura 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.
8
5
4
8
3
c
1
c
c
c
2
3
4
9
O percurso c
1
, c
3
, c
4
, c
2
, c
1
) uma soluo
para o problema, cujo percurso total tem distn-
cia 24.
UFMG/ICEx/DCC 127
Exemplo de algoritmo exponencial
Um algoritmo simples seria vericar todas as rotas e escolher a menor delas.
H (n1)! 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 10
9
adies por segundo, o tempo total para
resolver o problema com 50 cidades seria maior do que 10
45
sculos s para
executar as adies.
O problema do caixeiro viajante aparece com freqncia em problemas rela-
cionados com transporte, mas tambm aplicaes importantes relacionadas
com otimizao de caminho percorrido.
UFMG/ICEx/DCC 128
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;
coecientes binomiais;
soluo de equaes de recorrncia.
UFMG/ICEx/DCC 129
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.
UFMG/ICEx/DCC 130
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.
UFMG/ICEx/DCC 131
Procedimento no recursivo
Algoritmo para ordenar os n elementos de um conjunto A em ordem ascen-
dente.
procedure Ordena (var A: Vetor);
var i, j, min, x: integer;
begin
(1) for i := 1 to n-1 do
begin
{min contm o ndice do
menor elemento de A[i..n]}
(2) min := i;
(3) for j := i+1 to n do
(4) if A[j] < A[min]
(5) then min := j;
{Troca A[min] e A[i]}
(6) x := A[min];
(7) A[min] := A[i];
(8) A[i] := x;
end;
end;
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.
UFMG/ICEx/DCC 132
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 termi-
nao 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 ni, o tempo gasto no anel O((ni)1) =
O(n i), conforme regra do produto para a notao O.
UFMG/ICEx/DCC 133
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 n1 vezes, e o tempo total para executar o programa
est limitado ao produto de uma constante pelo somatrio de (n i):
n1
1
(n i) =
n(n1)
2
=
n
2
2
n
2
= O(n
2
)
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.
UFMG/ICEx/DCC 134
Algoritmos recursivos
Umobjeto recursivo quando denido parcialmente emtermos de si mesmo
Exemplo 1: Nmeros naturais
(a) 1 um nmero natural
(b) o sucessor de um nmero natural um nmero natural
Exemplo 2: Funo fatorial
(a) 0! = 1
(b) se n > 0 ento n! = n (n 1)!
UFMG/ICEx/DCC 135
Algoritmos recursivos
Exemplo 3: rvores
(a) A rvore vazia uma rvore
(b) se T
1
e T
2
so rvores ento T
t
um rvore
T
t
T
1
T
2
UFMG/ICEx/DCC 136
Poder da recurso
Denir um conjunto innito de objetos atravs de um comando nito
Um problema recursivo P pode ser expresso como P 1[S
i
, P], onde 1
a composio de comandos S
i
e do prprio P
Importante: constantes e variveis locais a P so duplicadas a cada chamada
recursiva
UFMG/ICEx/DCC 137
Problema de terminao
Denir um 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:
P(n) if n > 0 then 1[S
i
; P(n 1)]
Importante: na prtica necessrio:
mostrar que o nvel de recurso nito, e
tem que ser mantido pequeno! Por que?
UFMG/ICEx/DCC 138
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:
function F(i : integer) : integer;
begin
if i > 0
then F := i
*
F(i-1)
else F := 1;
end;
F(4) 1 4F(3)
2 3F(2)
3 2F(1)
4 1F(0)
1
UFMG/ICEx/DCC 139
Quando no usar recursividade
Algoritmos recursivos so apropriados quando o problema denido em ter-
mos recursivos
Entretanto, uma denio recursiva no implica necessariamente que a im-
plementao recursiva a melhor soluo!
Casos onde evitar recursividade:
P if condio then (S
i
; P)
Exemplo: P if i < n then (
..
i := i +1; F := i F; P)
UFMG/ICEx/DCC 140
Eliminando a recursidade de cauda
(Tail recursion)
function Fat : integer;
var F, i : integer;
begin
i := 0; F := 1;
while i < n do
begin
i := i+1;
F := F
*
i;
end;
Fat := F;
end
Logo,
P if B then (S; P)
deve ser transformado em
P (x = x
0
; while B do S)
UFMG/ICEx/DCC 141
Outro exemplo
function Fib(n : integer) : integer;
begin
if n = 0
then Fib := 0
else if n = 1
then Fib := 1
else Fib := Fib(n-1) + Fib(n-2);
end; {Fib}
Observao: para cada chamada a
Fib(n), Fib ativada 2 vezes
5
s
4
s
3
s
2
s
1
s
f
f
f
f
f
ff
0
s
f
f
f
f
f
ff
1
s
t
t
t
t
t
t t
2
s
1
s
f
f
f
f
f
ff
0
s
D
D
D
D
D
D
D
Dl
l
l
l
l
l
l
l
3
s
2
s
1
s
f
f
f
f
f
ff
0
s
f
f
f
f
f
ff
1
s
UFMG/ICEx/DCC 142
Soluo bvia
function Fib : integer;
var i, Temp, F, Fant : integer;
begin
i := 1; F := 1; Fant := 0;
while i < n do
begin
Temp := F;
F := F + Fant;
Fant := Temp;
i := i+1;
end;
Fib := F;
end; {Fib}
Complexidade de tempo: T(n) = n 1
Complexidade de espao: E(n) = O(1)
UFMG/ICEx/DCC 143
Procedimento recursivo
Pesquisa(n);
(1) if n 1
(2) then "inspecione elemento" e termine
else begin
(3) para cada um dos n elementos "inspecione elemento";
(4) Pesquisa(n/3);
end;
Para cada procedimento recursivo associada uma funo de complexidade
f(n) desconhecida, onde n mede o tamanho dos argumentos para o proce-
dimento.
Obtemos uma equao de recorrncia para f(n).
Equao de recorrncia: maneira de denir uma funo por uma expresso
envolvendo a mesma funo.
UFMG/ICEx/DCC 144
Anlise do procedimento recursivo
Seja T(n) uma funo de complexidade que represente o nmero de inspe-
es 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 n
o
de chamadas
recursivas.
O termo T(n) especicado 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 denio so necessrios k 1
passos para computar o valor de T(3
k
).
UFMG/ICEx/DCC 145
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).
T(n) = n +T(n/3)
T(n/3) = n/3 +T(n/3/3)
T(n/3/3) = n/3/3 +T(n/3/3/3)
.
.
.
T(n/3/3 /3) = n/3/3 /3 +T(n/3 /3)
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.
UFMG/ICEx/DCC 146
Exemplo de resoluo de equao de recorrncia
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 innito, ento
T(n) = n
i=0
(1/3)
i
= n
_
_
1
1
1
3
_
_
=
3n
2
Se considerarmos o termo T(n/3/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.
UFMG/ICEx/DCC 147
Exemplo de resoluo de equao de recorrncia
Lembrando que T(1) = 1 temos
T(n) =
x1
i=0
n
3
i
+T(
n
3
x
)
= n
x1
i=0
(1/3)
i
+1
=
n(1 (
1
3
)
x
)
(1
1
3
)
+1
=
3n
2
1
2
Logo, o programa do exemplo O(n).
UFMG/ICEx/DCC 148
Comentrios sobre recursividade
Evitar o uso de recursividade quando existe uma soluo bvia por iterao!
Exemplos:
Fatorial
Srie de Fibonacci
UFMG/ICEx/DCC 149
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
UFMG/ICEx/DCC 150
Anlise da funo fat
Seja a seguinte funo para calcular o fatorial de n:
function fat(n : integer) : integer;
begin
if n <= 1
then fat := 1
else fat := n
*
fat(n-1);
end; {fat}
Seja a seguinte equao de recorrncia para esta funo:
T(n) =
_
d n = 1
c +T(n 1) n > 1
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)
UFMG/ICEx/DCC 151
Resolvendo a equao de recorrncia
Esta equao de recorrncia pode ser
expressa da seguinte forma:
T(n) = c +T(n 1)
= c +(c +T(n 2))
= c +c +(c +T(n 3))
.
.
. =
.
.
.
= c +c + +(c +T(1))
= c +c + +c
. .
n1
+d
Em cada passo, o valor do termo T
substitudo pela sua denio (ou
seja, esta recorrncia est sendo re-
solvida pelo mtodo da expanso). A
ltima equao mostra que depois da
expanso existem n 1 cs, corre-
spondentes aos valores de 2 at n.
Desta forma, a recorrncia pode ser
expressa como:
T(n) = c(n 1) +d = O(n)
UFMG/ICEx/DCC 152
Alguns somatrios teis
n
i=1
i =
n(n +1)
2
k
i=0
2
k
= 2
k+1
1
k
i=0
1
2
i
= 2
1
2
k
k
i=0
a
i
=
a
k+1
1
a 1
(a ,= 1)
n
i=1
i
2
=
n(n +1)(2n +1)
6
UFMG/ICEx/DCC 153
Algumas recorrncias bsicas: Caso 1
T(n) = T(
n
2
) +1 (n 2)
T(1) = 0 (n = 1)
Vamos supor que:
n = 2
k
k = logn
Resolvendo por expanso temos:
T(2
k
) = T(2
k1
) +1
= (T(2
k2
) +1) +1
= (T(2
k3
) +1) +1 +1
.
.
.
.
.
.
= (T(2) +1) +1 + +1
= (T(1) +1) +1 + +1
= 0 +1 + +1
. .
k
= k
T(n) = logn
T(n) = O(logn)
UFMG/ICEx/DCC 154
Algumas recorrncias bsicas: Caso 2
T(n) = 2T(
n
2
) +n (n 2)
T(1) = 0 (n = 1)
Vamos supor que n = 2
k
k = logn. Resolvendo por expanso temos:
T(2
k
) = 2T(2
k1
) +2
k
= 2(2T(2
k2
) +2
k1
) +2
k
= 2(2(2T(2
k3
) +2
k2
) +2
k1
) +2
k
.
.
.
.
.
.
= 2(2( (2(2T(1) +2
2
) +2
3
) + ) +2
k1
) +2
k
= (k 1)2
k
+2
k
= k2
k
T(n) = nlogn
T(n) = O(nlogn)
UFMG/ICEx/DCC 155
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 pos-
itiva podem ser resolvidas usando o Teorema Mestre. Note que neste caso no
estamos achando a forma fechada da recorrncia mas sim seu comportamento
assinttico.
UFMG/ICEx/DCC 156
Teorema Mestre
Sejam as constantes a 1 e b > 1 e f(n) uma funo denida nos inteiros
no-negativos pela recorrncia:
T(n) = aT(n/b) +f(n),
onde a frao n/b pode signicar ]n/b| ou n/b|. A equao de recorrncia
T(n) pode ser limitada assintoticamente da seguinte forma:
1. Se f(n) = O(n
log
b
a
) para alguma constante > 0,
ento T(n) = (n
log
b
a
) .
2. Se f(n) = (n
log
b
a
), ento T(n) = (n
log
b
a
logn) .
3. Se f(n) = (n
log
b
a+
) para alguma constante > 0 e se af(n/b)
cf(n) para alguma constante c < 1 e para n sucientemente grande,
ento T(n) = (f(n)) .
UFMG/ICEx/DCC 157
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 ca multiplicada por um fator logartmico e ca da forma T(n) =
(n
log
b
a
logn) = (f(n) logn).
UFMG/ICEx/DCC 158
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
k1
i=0
A[i] 2
i
.
length[A] = k.
Para somar 1 (mdulo 2
k
) ao valor do contador, pode-se usar o procedimento
Increment(A).
UFMG/ICEx/DCC 190
Contador binrio: Cdigo
Increment(A)
i 0
while (i < length[A]) (A[i] = 1) do
begin
A[i] 0
i i + 1
end
if i < length[A]
then A[i] 1
EndIncrement
Essencialmente o mesmo algoritmo implementado pelo contador Ripple-
Carry em hardware.
UFMG/ICEx/DCC 191
Mtodo agregado
Idia:
Conte o custo total para as n operaes.
Tcnica de contagem:
Ad hoc, ou seja, cada caso um caso.
UFMG/ICEx/DCC 192
Contador binrio
Custo por linha varia.
Difcil de somar.
Soluo:
Conte por coluna, ou seja, quantas vezes o i-simo bit trocado.
Some os custos.
Exemplo: arranjo de 5 bits (k = 5).
UFMG/ICEx/DCC 193
Contador binrio
Bits Custo
0 0 0 0 0
0 0 0 0 1 1
0 0 0 1 0 2
0 0 0 1 1 1
0 0 1 0 0 3
.
.
.
1 1 1 1 1 1
0 0 0 0 0 5
2 4 8 16 32
UFMG/ICEx/DCC 194
Contador binrio
Custo:
Para uma seqncia de n incrementos (2
k
), temos:
Bit de ordem
2
4
2
3
2
2
2
1
2
0
2 4 8 16 32
ou seja, o bit de ordem 2
i
trocado 2
ki
vezes. Logo, o custo total de
trocas
k
i=1
2
i
= 2
k+1
2 = 2 2
k
2 = 2n 2 = O(n)
Custo amortizado por troca = O(n)/n = O(1).
UFMG/ICEx/DCC 195
Mtodo contbil
Estrutura de dados vem com uma conta bancria.
cada operao alocado um custo xo (custo amortizado).
Custos devem ser escolhidos cuidadosamente.
Se o custo real menor que o custo alocado, deposite a diferena na conta
bancria.
Se o custo real maior que o custo alocado, retire a diferena da conta
bancria para pagar pela operao.
Prove que o saldo nunca ca negativo.
UFMG/ICEx/DCC 196
Mtodo contbil
Qual o signicado do saldo car negativo?
Para a seqncia de operaes at aquele momento, o custo amortizado
total no representa um limite superior para o custo real total.
Concluso:
Seqncia de n operaes custa no mximo n custo amortizado.
UFMG/ICEx/DCC 197
Contador binrio
Custo amortizado para trocar 0 1 = 2 crditos.
Pague 1 crdito pela operao e deposite 1 crdito na conta.
Custo amortizado para trocar 1 0 = 0 crditos
Retire da conta 1 crdito para pagar pela operao.
Invariante:
Cada bit 1 no contador gerou um crdito.
Logo, sempre existe crdito para pagar pela operao de trocar 1 0.
UFMG/ICEx/DCC 198
Anlise amortizada
Custo para resetar os bits no while pago pelos crditos dos bits que foram
setados.
No mximo um bit setado.
Custo da operao de incremento no mximo 2.
O nmero de bits 1 no contador nunca negativo.
Saldo nunca negativo.
Para n operaes de incremento, o custo amortizado total O(n), que um
limite para o custo real total.
UFMG/ICEx/DCC 199
Mtodo potencial
Associa-se uma energia potencial a cada estrutura de dados.
Energia potencial o potencial para fazer um estrago.
Custo amortizado = Custo atual +
Novo potencial
Potencial anterior
Deve-se pagar para incrementar o potencial da estrutura de dados.
Se a operao tem um custo cumulativo alto mas reduz bastante o potencial,
ento o custo amortizado baixo.
Como encontrar o potencial?
Determine o que torna uma estrutura de dados ruim.
UFMG/ICEx/DCC 200
Regras bsicas para funes potenciais
Devem ser sempre no negativas.
Devem comear de zero.
Implica uma seqncia de n operaes que custam no mximo n custo
amortizado.
UFMG/ICEx/DCC 201
Contador binrio
Estrutura de dados ruim se tem vrios 1s.
Seja (Contador)= # 1s no contador.
Potencial aumenta quando h um incremento:
= # (0 1) # (1 0)
= 1 # (1 0)
Custo amortizado do incremento:
= Custo real (atual) + Aumento do potencial
= (1 + # (1 0) + (1 # (1 0)))
= 2
Custo amortizado 2 e o custo de n incrementos no mximo 2n.
UFMG/ICEx/DCC 202