Sunteți pe pagina 1din 10

1

Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG


Anlise e Tcnicas de Algoritmos
Jorge Figueiredo
Anlise de Algoritmos
Anlise de Algoritmos
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Agenda
Motivao para anlise de algoritmos
Anlise assinttica
Alguns exemplos simples
Motivao para anlise de algoritmos
Anlise assinttica
Alguns exemplos simples
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
Dois aspectos importantes:
Um problema pode, geralmente, ser resolvido por
diferentes algoritmos.
A existncia de um algoritmo no implica, necessariamente,
que este problema possa ser resolvido na prtica.
A anlise de algoritmos pode ser definida como o estudo da
estimativa de tempo de execuo de algoritmos.
O tempo de execuo determinado pelos seguintes
aspectos:
Tempo para executar uma instruo ou passo.
A natureza do algoritmo.
O tamanho do conjunto de dados que constitui o problema.
Dois aspectos importantes:
Um problema pode, geralmente, ser resolvido por
diferentes algoritmos.
A existncia de um algoritmo no implica, necessariamente,
que este problema possa ser resolvido na prtica.
A anlise de algoritmos pode ser definida como o estudo da
estimativa de tempo de execuo de algoritmos.
O tempo de execuo determinado pelos seguintes
aspectos:
Tempo para executar uma instruo ou passo.
A natureza do algoritmo.
O tamanho do conjunto de dados que constitui o problema.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
necessrio ter uma forma de criar medidas de comparao
entre algoritmos que resolvem um mesmo problema. Desta
forma, possvel determinar:
A viabilidade de um algoritmo.
Qual o melhor algoritmo para a soluo de um
problema.
O interessante ter uma comparao relativa entre
algoritmos.
Assumir que a execuo de qualquer passo de um
algoritmo leva uma um tempo fixo e igual.
O tempo de execuo de um computador particular no
interessante.
necessrio ter uma forma de criar medidas de comparao
entre algoritmos que resolvem um mesmo problema. Desta
forma, possvel determinar:
A viabilidade de um algoritmo.
Qual o melhor algoritmo para a soluo de um
problema.
O interessante ter uma comparao relativa entre
algoritmos.
Assumir que a execuo de qualquer passo de um
algoritmo leva uma um tempo fixo e igual.
O tempo de execuo de um computador particular no
interessante.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
Qual a quantidade de recursos utilizados para resolver um
problema?
Tempo
Espao
Expressar como uma funo do tamanho do problema.
Como os requisitos crescem com o aumento do problema?
Tamanho do problema:
Nmero de elementos a ser tratado
Tamanho dos elementos
Qual a quantidade de recursos utilizados para resolver um
problema?
Tempo
Espao
Expressar como uma funo do tamanho do problema.
Como os requisitos crescem com o aumento do problema?
Tamanho do problema:
Nmero de elementos a ser tratado
Tamanho dos elementos
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Eficincia de Algoritmo
Considerar eficincia de tempo:
Nmero de operaes expresso em termos do tamanho da
entrada.
Se dobramos o tamanho da entrada, qual o tempo de
resposta?
Por que eficincia importante?
Velocidade de computao aumentou (hardware)
Crescimento de aplicaes com o aumento do poder
computacional
Maior demanda por aumento na velocidade de computao.
Considerar eficincia de tempo:
Nmero de operaes expresso em termos do tamanho da
entrada.
Se dobramos o tamanho da entrada, qual o tempo de
resposta?
Por que eficincia importante?
Velocidade de computao aumentou (hardware)
Crescimento de aplicaes com o aumento do poder
computacional
Maior demanda por aumento na velocidade de computao.
2
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Eficincia de Algoritmo
Quando a velocidade de computao aumenta, podemos
tratar mais dados?
Suponha que:
Um algoritmo toma n
2
comparaes para ordenar n
nmeros.
Necessitamos de 1 segundo para ordenar 5 nmeros (25
comparaes)
Velocidade de computao aumenta de um fator de 100
Usando 1 segundo, podemos executar 100x25
comparaes, i.e., ordenar 50 nmeros
Com 100 vezes de ganho em velocidade, ordenamos apenas 10
vezes mais nmeros!
Quando a velocidade de computao aumenta, podemos
tratar mais dados?
Suponha que:
Um algoritmo toma n
2
comparaes para ordenar n
nmeros.
Necessitamos de 1 segundo para ordenar 5 nmeros (25
comparaes)
Velocidade de computao aumenta de um fator de 100
Usando 1 segundo, podemos executar 100x25
comparaes, i.e., ordenar 50 nmeros
Com 100 vezes de ganho em velocidade, ordenamos apenas 10
vezes mais nmeros!
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Eficincia de Algoritmo
4 x 10
13
anos 1 ms 10 s 0.66 s 0.1 s 100
13 dias 125 s 2.5 s 0.28 s 0.05 s 50
1 ms 8 s 0.4 s 0.09 s 0.02 s 20
1 s 1 s 0.1 s 0.03 s 0.01 s 10
0.03 s 0.13 s 0.03 s 0.01 s 0.005 s 5
Tn = 2
n
T(n) = n
3
T(n) = n
2
T(n) = nlgn T(n) = n N
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Como Medir Eficincia de Algoritmo?
Medindo eficincia:
Estudo experimental e/ou Benchmarking.
Anlise assinttica.
Medindo eficincia:
Estudo experimental e/ou Benchmarking.
Anlise assinttica.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Abordagem Experimental
Abordagem experimental:
Escrever um programa que implementa o algoritmo
Executar o programa com diferentes cenrios
Usar um mtodo como System.currentTimeMillis() para
obter medidas acuradas do tempo de execuo real.
Abordagem experimental:
Escrever um programa que implementa o algoritmo
Executar o programa com diferentes cenrios
Usar um mtodo como System.currentTimeMillis() para
obter medidas acuradas do tempo de execuo real.
50 100 0
t (ms)
n
10
20
30
40
50
60
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Abordagem Experimental
Limitaes dos estudos experimentais:
Necessidade de se implementar e testar o algoritmo.
Experimentos podem ser feitos apenas em um nmero
limitado de cenrios. Pode, portanto, no indicar tempo de
execuo em cenrios que no foram considerados no
experimento.
Para comparar dois algoritmos: garantir os mesmos
hardware e ambiente de software.
Limitaes dos estudos experimentais:
Necessidade de se implementar e testar o algoritmo.
Experimentos podem ser feitos apenas em um nmero
limitado de cenrios. Pode, portanto, no indicar tempo de
execuo em cenrios que no foram considerados no
experimento.
Para comparar dois algoritmos: garantir os mesmos
hardware e ambiente de software.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise Assinttica
Metodologia para analisar tempo de execuo de
algoritmos.
Ao contrrio da abordagem experimental:
Usa uma descrio de alto nvel dos algoritmos em vez de
testar uma de suas implementaes.
Leva em considerao todas as possveis entradas.
Permite a avaliao de eficincia de algoritmos de uma
forma que independente do hardware e ambiente de
software utilizado.
Metodologia para analisar tempo de execuo de
algoritmos.
Ao contrrio da abordagem experimental:
Usa uma descrio de alto nvel dos algoritmos em vez de
testar uma de suas implementaes.
Leva em considerao todas as possveis entradas.
Permite a avaliao de eficincia de algoritmos de uma
forma que independente do hardware e ambiente de
software utilizado.
3
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Notao Assinttica
Objetivo: simplificar a anlise descartando informaes
desnecessrias:
arredondamento 1,000,0011,000,000
Dizer que 3n
2
n
2
Objetivo: simplificar a anlise descartando informaes
desnecessrias:
arredondamento 1,000,0011,000,000
Dizer que 3n
2
n
2
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Big-Oh
Sejam duas funes f(n) e g(n).
f(n) O(g(n)) se existem constantes positivas c e n
0
tais que
f(n) cg(n) para n n
0
Exemplo: 2n + 10 O(n)
2n + 10 cn
(c 2) n 10
n 10/(c 2)
Escolher c = 3 e n
0
= 10
Sejam duas funes f(n) e g(n).
f(n) O(g(n)) se existem constantes positivas c e n
0
tais que
f(n) cg(n) para n n
0
Exemplo: 2n + 10 O(n)
2n + 10 cn
(c 2) n 10
n 10/(c 2)
Escolher c = 3 e n
0
= 10
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Big-Oh
1
10
100
1.000
10.000
1 10 100 1.000
n
3n
2n+10
n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Big-Oh
Exemplo: n
2
no O(n)
n
2
cn
n c
A desigualdade no pode ser
satisfeita pois c deve ser uma
constante.
Exemplo: n
2
no O(n)
n
2
cn
n c
A desigualdade no pode ser
satisfeita pois c deve ser uma
constante.
1
10
100
1.000
10.000
100.000
1.000.000
1 10 100 1.000
n
n^2
100n
10n
n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Big-Omega
Sejam duas funes f(n) e g(n).
f(n) (g(n)) se g(n) O(f(n))
Existe uma constante real c >0 e n
0
1 tal que f(n) c g(n)
para n n
0
Sejam duas funes f(n) e g(n).
f(n) (g(n)) se g(n) O(f(n))
Existe uma constante real c >0 e n
0
1 tal que f(n) c g(n)
para n n
0
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Big-Theta
Sejam duas funes f(n) e g(n)
f(n) (g(n)) se f(n) O(g(n)) e f(n) (g(n))
existem constantes reais a>0 e b>0, e uma
constante inteira n
0
1 tal que a g(n) f(n) b g(n)
para n n
0
Sejam duas funes f(n) e g(n)
f(n) (g(n)) se f(n) O(g(n)) e f(n) (g(n))
existem constantes reais a>0 e b>0, e uma
constante inteira n
0
1 tal que a g(n) f(n) b g(n)
para n n
0
4
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Taxas de Crescimento Mais Comum
n
2
n
2
n
n
log n
c
1 log n n n
2
n
3
... n
k
... 2
n
constante logartmica polinomial exponencial
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise Assinttica
A anlise assinttica baseada nessas definies e
estabelece uma ordem relativa entre funes.
A notao Big-Oh usada para expressar o nmero de
operaes primitivas executadas como funo do tamanho da
entrada.
um algoritmo que executa em tempo O(n) melhor do que um que
executa em tempo O(n
2
)
de forma semelhante, O(log n) melhor do que O(n)
Cuidado! Preste ateno a constantes muito altas. Um
algoritmo que executa em tempo 1,000,000.n O(n), mas
menos eficiente do que um que executa em tempo 2n
2
, que
O(n
2
).
A anlise assinttica baseada nessas definies e
estabelece uma ordem relativa entre funes.
A notao Big-Oh usada para expressar o nmero de
operaes primitivas executadas como funo do tamanho da
entrada.
um algoritmo que executa em tempo O(n) melhor do que um que
executa em tempo O(n
2
)
de forma semelhante, O(log n) melhor do que O(n)
Cuidado! Preste ateno a constantes muito altas. Um
algoritmo que executa em tempo 1,000,000.n O(n), mas
menos eficiente do que um que executa em tempo 2n
2
, que
O(n
2
).
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Complexidade de Tempo
Para determinar o tempo de execuo de um determinado
algoritmo
descobrir a forma geral da curva que caracteriza seu tempo
de execuo em funo do tamanho do problema.
Para simplificarmos a anlise de complexidade de tempo:
adotamos a no existncia de unidades de tempo
particulares.
no consideramos tambm os termos de ordem inferior,
isto , usamos Big-Oh.
A complexidade de tempo para diferentes algoritmos pode
indicar diferentes classes de complexidade. Cada classe
caracterizada por uma famlia diferente de curva.
Para determinar o tempo de execuo de um determinado
algoritmo
descobrir a forma geral da curva que caracteriza seu tempo
de execuo em funo do tamanho do problema.
Para simplificarmos a anlise de complexidade de tempo:
adotamos a no existncia de unidades de tempo
particulares.
no consideramos tambm os termos de ordem inferior,
isto , usamos Big-Oh.
A complexidade de tempo para diferentes algoritmos pode
indicar diferentes classes de complexidade. Cada classe
caracterizada por uma famlia diferente de curva.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Complexidade de Tempo
Informalmente, para se determinar a ordem de complexidade
de uma determinada funo f(n):
1. Separar f(n) em duas partes: termo dominante e termos
de ordem inferior.
2. ignorar os termos de ordem inferior.
3. ignorar as constantes de proporcionalidade.
Informalmente, para se determinar a ordem de complexidade
de uma determinada funo f(n):
1. Separar f(n) em duas partes: termo dominante e termos
de ordem inferior.
2. ignorar os termos de ordem inferior.
3. ignorar as constantes de proporcionalidade.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise de Algoritmos Simples
Em nosso modelo de anlise, consideramos que as
instrues so executadas sequencialmente e que o conjunto
de instrues simples (adio, comparao, atribuio, etc)
tomam exatamente uma unidade de tempo para serem
executadas.
Tipos de anlise:
Pior caso: indica o maior tempo obtido, levando em
considerao todas as entradas possveis.
Melhor caso: indica o menor tempo obtido, levando em
considerao todas as entradas possveis.
Mdia: indica o tempo mdio obtido, considerando todas as
entradas possveis.
Em nosso modelo de anlise, consideramos que as
instrues so executadas sequencialmente e que o conjunto
de instrues simples (adio, comparao, atribuio, etc)
tomam exatamente uma unidade de tempo para serem
executadas.
Tipos de anlise:
Pior caso: indica o maior tempo obtido, levando em
considerao todas as entradas possveis.
Melhor caso: indica o menor tempo obtido, levando em
considerao todas as entradas possveis.
Mdia: indica o tempo mdio obtido, considerando todas as
entradas possveis.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise de Algoritmos Simples
Como o objetivo determinar a forma da curva que caracteriza o
algoritmo, vamos definir algumas regras que podem ser utilizadas:
Laos: O tempo de execuo de um lao no mximo o tempo de
execuo das instrues dentro do lao (incluindo os testes) vezes o
nmero de iteraes.
Aninhamento de Laos: Analisar os mais internos. O tempo total de
execuo de uma instruo dentro de um grupo de laos aninhados
o tempo de execuo da instruo multiplicado pelo produto dos
tamanhos de todos os laos.
Instrues Consecutivas: Apenas efetuar a soma.
If/Else: o tempo de execuo de uma instruo if/else nunca maior do
que o tempo de execuo do teste mais o maior dos tempos de
execuo de S1 e S2. S1 e S2 representam as instrues do then e
else, respectivamente.
Como o objetivo determinar a forma da curva que caracteriza o
algoritmo, vamos definir algumas regras que podem ser utilizadas:
Laos: O tempo de execuo de um lao no mximo o tempo de
execuo das instrues dentro do lao (incluindo os testes) vezes o
nmero de iteraes.
Aninhamento de Laos: Analisar os mais internos. O tempo total de
execuo de uma instruo dentro de um grupo de laos aninhados
o tempo de execuo da instruo multiplicado pelo produto dos
tamanhos de todos os laos.
Instrues Consecutivas: Apenas efetuar a soma.
If/Else: o tempo de execuo de uma instruo if/else nunca maior do
que o tempo de execuo do teste mais o maior dos tempos de
execuo de S1 e S2. S1 e S2 representam as instrues do then e
else, respectivamente.
5
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise de Algoritmos Simples
Chamada de Funes: A anlise feita como no caso de
laos aninhados. Para calcular a complexidade de um
programa com vrias funes, determina-se primeiro a
complexidade de cada uma das funes. Desta forma, na
anlise, cada uma das funes vista como uma
instruo com a complexidade que foi calculada.
Recurso: a parte mais difcil da anlise de complexidade.
Em muitos casos, pode-se fazer a linearizao atravs da
substituio da chamada recursiva por alguns laos
aninhados, por exemplo. Entretanto, existem algoritmos
que no possibilitam a linearizao. Nestes caso,
necessrio usar uma relao de recorrncia que tem que
ser resolvida.
Chamada de Funes: A anlise feita como no caso de
laos aninhados. Para calcular a complexidade de um
programa com vrias funes, determina-se primeiro a
complexidade de cada uma das funes. Desta forma, na
anlise, cada uma das funes vista como uma
instruo com a complexidade que foi calculada.
Recurso: a parte mais difcil da anlise de complexidade.
Em muitos casos, pode-se fazer a linearizao atravs da
substituio da chamada recursiva por alguns laos
aninhados, por exemplo. Entretanto, existem algoritmos
que no possibilitam a linearizao. Nestes caso,
necessrio usar uma relao de recorrncia que tem que
ser resolvida.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Algumas Dicas
Identificar a operao fundamental usada no algoritmo. A anlise dessa
operao fundamental identifica o tempo de execuo. Isso pode evitar a
anlise linha-por-linha do algoritmo.
Quando um algoritmo, em uma passada de uma iterao, divide o
conjunto de dados de entrada em uma ou mais partes, tomado cada uma
dessas partes e processando separada e recursivamente, e depois
juntando os resultados, este algoritmo possivelmente O(n.log n)
Um algoritmo O(log n) se ele leva tempo constante para reduzir o
tamanho do problema, geralmente pela metade. Por exemplo, a pesquisa
binria.
Se o algoritmo leva tempo constante para reduzir o tamanho do problema
em um tamanho constante, ele ser O(n).
Algoritmos combinatoriais so exponenciais. Por exemplo, o problema do
caixeiro viajante.
Identificar a operao fundamental usada no algoritmo. A anlise dessa
operao fundamental identifica o tempo de execuo. Isso pode evitar a
anlise linha-por-linha do algoritmo.
Quando um algoritmo, em uma passada de uma iterao, divide o
conjunto de dados de entrada em uma ou mais partes, tomado cada uma
dessas partes e processando separada e recursivamente, e depois
juntando os resultados, este algoritmo possivelmente O(n.log n)
Um algoritmo O(log n) se ele leva tempo constante para reduzir o
tamanho do problema, geralmente pela metade. Por exemplo, a pesquisa
binria.
Se o algoritmo leva tempo constante para reduzir o tamanho do problema
em um tamanho constante, ele ser O(n).
Algoritmos combinatoriais so exponenciais. Por exemplo, o problema do
caixeiro viajante.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Exerccio
Potencia(x, n)
p 1
i 0
while i <n do
p p.x
i i +1
returnp
Qual a complexidade do algoritmo abaixo?
Qual a complexidade do algoritmo abaixo?
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise e Tcnicas de Algoritmos
Jorge Figueiredo
Anlise de Algoritmos Recursivos
Anlise de Algoritmos Recursivos
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Agenda
Relao de Recorrncia
Derivando recorrncia
Resolvendo recorrncia
Anlise de algoritmos recursivos
Relao de Recorrncia
Derivando recorrncia
Resolvendo recorrncia
Anlise de algoritmos recursivos
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
A anlise de um algoritmo recursivo requer a resoluo de
uma recorrncia.
Uma recorrncia um algoritmo recursivo que calcula o valor
de uma funo em um ponto dado.
Uma recorrncia define T(n) em termos de T(n-1), T(n-2), etc.
Exemplo:
T(1) = 1
T(n) = T(n 1) + 3n + 2 , para n2
A anlise de um algoritmo recursivo requer a resoluo de
uma recorrncia.
Uma recorrncia um algoritmo recursivo que calcula o valor
de uma funo em um ponto dado.
Uma recorrncia define T(n) em termos de T(n-1), T(n-2), etc.
Exemplo:
T(1) = 1
T(n) = T(n 1) + 3n + 2 , para n2
6
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
Exemplo 2: Quantos pedaos com n cortes?
Exemplo 2: Quantos pedaos com n cortes?
Cortes: 1
Pedaos: 2
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
Exemplo 2: Quantos pedaos com n cortes?
Exemplo 2: Quantos pedaos com n cortes?
Cortes: 1
Pedaos: 2
Cortes: 2
Pedaos: 4
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
Exemplo 2: Quantos pedaos com n cortes?
Exemplo 2: Quantos pedaos com n cortes?
Cortes: 1
Pedaos: 2
Cortes: 2
Pedaos: 4
Cortes: 3
Pedaos: 7
Cortes: 4
Pedaos: 11
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Introduo
possvel observar que o n-simo corte cria n novos pedaos.
Logo, o nmero total de pedaos obtido com n cortes,
denotado por P(n), dado pela seguinte relao de
recorrncia:
P(1) = 2
P(n) = P(n 1) + n, para n2
possvel observar que o n-simo corte cria n novos pedaos.
Logo, o nmero total de pedaos obtido com n cortes,
denotado por P(n), dado pela seguinte relao de
recorrncia:
P(1) = 2
P(n) = P(n 1) + n, para n2
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Deri vando Relaes de Recorrncias
Como proceder para derivar uma relao de recorrncia para a
anlise do tempo de execuo de um algoritmo:
Determinar qual o tamanho n do problema.
Verificar que valor de n usado como base da recurso. Em
geral um valor nico (n=1, por exemplo), mas pode ser
valores mltiplos. Vamos considerar esse valor como n
0
.
Determinar T(n
0
). Pode-se usar uma constante c, mas, em
muitos, casos um nmero especfico necessrio.
Como proceder para derivar uma relao de recorrncia para a
anlise do tempo de execuo de um algoritmo:
Determinar qual o tamanho n do problema.
Verificar que valor de n usado como base da recurso. Em
geral um valor nico (n=1, por exemplo), mas pode ser
valores mltiplos. Vamos considerar esse valor como n
0
.
Determinar T(n
0
). Pode-se usar uma constante c, mas, em
muitos, casos um nmero especfico necessrio.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Deri vando Relaes de Recorrncias
T(n) definido como uma soma de vrias ocorrncias de T(m)
(chamadas recursivas), mais a soma de outras instrues
efetuadas. Em geral, as chamadas recursivas esto
relacionadas com a subproblemas do mesmo tamanho f(n),
definindo um termo a.T(f(n)) na relao de recorrncia.
A relao de recorrncia definida por:
T(n) = c, se n = n
0
T(n) = a.T(f(n)) + g(n), caso contrrio
T(n) definido como uma soma de vrias ocorrncias de T(m)
(chamadas recursivas), mais a soma de outras instrues
efetuadas. Em geral, as chamadas recursivas esto
relacionadas com a subproblemas do mesmo tamanho f(n),
definindo um termo a.T(f(n)) na relao de recorrncia.
A relao de recorrncia definida por:
T(n) = c, se n = n
0
T(n) = a.T(f(n)) + g(n), caso contrrio
7
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Deri vando Relaes de Recorrncias
Exemplo: Torre de Hanoi
Objetivo: transferir os n discos de A para C
Regras:
Mover um disco por vez.
Nunca colocar um disco maior em cima de um menor.
Soluo Recursiva:
Transferir n-1 discos de A para B
Mover o maior disco de A para C
Transferir n-1 discos de B para C
Exemplo: Torre de Hanoi
Objetivo: transferir os n discos de A para C
Regras:
Mover um disco por vez.
Nunca colocar um disco maior em cima de um menor.
Soluo Recursiva:
Transferir n-1 discos de A para B
Mover o maior disco de A para C
Transferir n-1 discos de B para C
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Deri vando Relaes de Recorrncias
Hanoi(A, C, B, n)
ifn >1
Hanoi(A, B, C, n-1)
Move(A, C)
ifn >1
Hanoi(B, C, A, n-1)
Relao de Recorrncia
T(1) =1
T(n) =2.T(n-1) +1
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Deri vando Relaes de Recorrncias
MergeSort(A, n)
ifn 1
returnA
returnmerge(MergeSort(A1, n/2), MergeSort(A2, n/2))
Relao de Recorrncia
T(1) =c
T(n) =2.T(n/2) +d.n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Resol vendo Relaes de Recorrncia
Resolver uma relao de recorrncia nem sempre fcil.
Resolvendo uma relao de recorrncia, determina-se o
tempo de execuo do algoritmo recursivo correspondente.
Relao de recorrncia: T(n) = T(n
1
) + T(n
2
) +...+ T(n
a
) + f(n)
mais fcil quando temos a subproblemas de mesmo
tamanho que uma frao de n (por exemplo, n/b):
T(n) = a.T(n/b) + f(n)
Como resolver:
Mtodo do chute
Mtodo da rvore de recurso
Mtodo do desdobramento
Mtodo master
Resolver uma relao de recorrncia nem sempre fcil.
Resolvendo uma relao de recorrncia, determina-se o
tempo de execuo do algoritmo recursivo correspondente.
Relao de recorrncia: T(n) = T(n
1
) + T(n
2
) +...+ T(n
a
) + f(n)
mais fcil quando temos a subproblemas de mesmo
tamanho que uma frao de n (por exemplo, n/b):
T(n) = a.T(n/b) + f(n)
Como resolver:
Mtodo do chute
Mtodo da rvore de recurso
Mtodo do desdobramento
Mtodo master
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo do Chute e Prova por Induo
Seja a seguinte relao de recorrncia:
T(1) = 1
T(n) = T(n 1) + 3n + 2 , para n2
A relao de recorrncia resolvida em duas partes:
1. Chute: T(n) = 3n
2
/2 + 7n/2 4
2. Prova:
1. Caso base para n=1
2. H.I.: assumir que vlido para n-1
3. Provar T(n)
Se a prova for confirmada, T(n) O(n
2
)
Seja a seguinte relao de recorrncia:
T(1) = 1
T(n) = T(n 1) + 3n + 2 , para n2
A relao de recorrncia resolvida em duas partes:
1. Chute: T(n) = 3n
2
/2 + 7n/2 4
2. Prova:
1. Caso base para n=1
2. H.I.: assumir que vlido para n-1
3. Provar T(n)
Se a prova for confirmada, T(n) O(n
2
)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo do Chute e Prova por Induo
Seja a seguinte relao de recorrncia:
T(1) = 1
T(n) = 2.T(n/2) + n , para n2
A relao de recorrncia resolvida em duas partes:
1. Chute: T(n) = n + n.logn
2. Prova:
1. Caso base: 1 + 1.log 1 = 1
2. H.I.: assumir que vlido para valores at n-1
3. Provar T(n):
=2.(n/2 + n/2.log n/2) + n
=n + n.(logn -1) + n
=n + n.logn
Logo, T(n) O(n.logn)
Seja a seguinte relao de recorrncia:
T(1) = 1
T(n) = 2.T(n/2) + n , para n2
A relao de recorrncia resolvida em duas partes:
1. Chute: T(n) = n + n.logn
2. Prova:
1. Caso base: 1 + 1.log 1 = 1
2. H.I.: assumir que vlido para valores at n-1
3. Provar T(n):
=2.(n/2 + n/2.log n/2) + n
=n + n.(logn -1) + n
=n + n.logn
Logo, T(n) O(n.logn)
8
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
Talvez o mtodo mais intuitivo.
Consiste em desenhar uma rvore cujos ns representam os
tamanhos dos correspondentes problemas.
Cada nvel i contm todos os subproblemas de profundidade i.
Dois aspectos importantes:
A altura da rvore.
O nmero de passos executados de cada nvel.
A soluo da recorrncia (tempo de execuo do algoritmo)
a soma de todos os passos de todos os nveis.
Talvez o mtodo mais intuitivo.
Consiste em desenhar uma rvore cujos ns representam os
tamanhos dos correspondentes problemas.
Cada nvel i contm todos os subproblemas de profundidade i.
Dois aspectos importantes:
A altura da rvore.
O nmero de passos executados de cada nvel.
A soluo da recorrncia (tempo de execuo do algoritmo)
a soma de todos os passos de todos os nveis.
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
Resolver T(n) = 2.T(n/2) + n
Resolver T(n) = 2.T(n/2) + n
T(n)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
T(n/2) T(n/2)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
T(n/4) T(n/4) T(n/4) T(n/4)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
T(1)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
9
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
n
2.n/2= n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
n
2.n/2= n
4.n/4= n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
n
2.n/2= n
4.n/4= n
n folhas
n.1= n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo da rvore de Recurso
n
n/2 n/2
n/4 n/4 n/4 n/4
1
h = log n
n
2.n/2= n
4.n/4= n
n folhas
n.1= n
(log n).n
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo do Desdobramento
Esse mtodo o da rvore de recurso, representado de
forma algbrica.
Consiste em:
Usar (algumas poucas) substituies repetidamente at
encontrar um padro.
Escrever uma frmula em termos de n e o nmero de
substituies i.
Escolher i de tal forma que todas as referncias a T()
sejam referncias ao caso base.
Resolver a frmula.
Esse mtodo o da rvore de recurso, representado de
forma algbrica.
Consiste em:
Usar (algumas poucas) substituies repetidamente at
encontrar um padro.
Escrever uma frmula em termos de n e o nmero de
substituies i.
Escolher i de tal forma que todas as referncias a T()
sejam referncias ao caso base.
Resolver a frmula.
10
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo do Desdobramento Exemplo 1
Soluo para o problema da pizza:
T(1) = 2
T(n) = T(n 1) + n , para n2
Desdobrando a relao de recorrncia:
T(n) = T(n-1) + n
T(n) = T(n-2) + (n-1) + n
T(n) = T(n-3) + (n-2) + (n-1) + n
...
T(n) = T(n-i) + (n-i+1) + ... + (n-1) + n
Caso base alcanado quando i=n-1
T(n) = 2 + 2 + 3 + ... + (n 1) + n
T(n) = 1 + n.(n-1)/2
Logo, T(n) = O(n
2
)
Soluo para o problema da pizza:
T(1) = 2
T(n) = T(n 1) + n , para n2
Desdobrando a relao de recorrncia:
T(n) = T(n-1) + n
T(n) = T(n-2) + (n-1) + n
T(n) = T(n-3) + (n-2) + (n-1) + n
...
T(n) = T(n-i) + (n-i+1) + ... + (n-1) + n
Caso base alcanado quando i=n-1
T(n) = 2 + 2 + 3 + ... + (n 1) + n
T(n) = 1 + n.(n-1)/2
Logo, T(n) = O(n
2
)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo do Desdobramento Exemplo 2
Soluo para o problema da Torre de Hanoi:
T(1) = 1
T(n) = 2.T(n 1) + 1 , para n2
Desdobrando a relao de recorrncia:
T(n) = 2.T(n 1) + 1
T(n) = 2.(2.T(n-2) + 1) + 1 = 4.T(n-2) + 2 + 1
T(n) = 4.(2.T(n-3) + 1) + 2 + 1 = 8.T(n-3) + 4 + 2 + 1
...
T(n) = 2
i
.T(n-i) + 2
i-1
+ 2
i-2
... + 2
1
+ 1
Caso base alcanado quando i=n-1
T(n) = 2
n-1
+ 2
n-2
+ 2
n-3
+ ... + 2
1
+ 1
Isso uma soma geomtrica
Logo, T(n) = 2
n
1 = O(2
n
)
Soluo para o problema da Torre de Hanoi:
T(1) = 1
T(n) = 2.T(n 1) + 1 , para n2
Desdobrando a relao de recorrncia:
T(n) = 2.T(n 1) + 1
T(n) = 2.(2.T(n-2) + 1) + 1 = 4.T(n-2) + 2 + 1
T(n) = 4.(2.T(n-3) + 1) + 2 + 1 = 8.T(n-3) + 4 + 2 + 1
...
T(n) = 2
i
.T(n-i) + 2
i-1
+ 2
i-2
... + 2
1
+ 1
Caso base alcanado quando i=n-1
T(n) = 2
n-1
+ 2
n-2
+ 2
n-3
+ ... + 2
1
+ 1
Isso uma soma geomtrica
Logo, T(n) = 2
n
1 = O(2
n
)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo Master
Teorema que resolve quase todas as recorrncias.
T(n) da forma a.T(n/b) + f(n), a,b > 1
Casos:
1. Se f(n) O(n
log
a
b-
), para algum > 0, temos que:
T(n) (n
log
a
b
).
2. Se f(n) (n
log
a
b
), temos que:
T(n) (n
log
a
b
.log n).
3. Se f(n) (n
log
a
b +
), para algum > 0 e se a.f(n/b)c.f(n)
para algum c > 0 e n suficientemente grande, temos que:
T(n) (f(n)).
Teorema que resolve quase todas as recorrncias.
T(n) da forma a.T(n/b) + f(n), a,b > 1
Casos:
1. Se f(n) O(n
log
a
b-
), para algum > 0, temos que:
T(n) (n
log
a
b
).
2. Se f(n) (n
log
a
b
), temos que:
T(n) (n
log
a
b
.log n).
3. Se f(n) (n
log
a
b +
), para algum > 0 e se a.f(n/b)c.f(n)
para algum c > 0 e n suficientemente grande, temos que:
T(n) (f(n)).
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo Master Exemplo 1
MergeSort:
T(n) = 2.T(n/2) + n
a = b = 2
f(n) = n
log
a
b
= 1. Cai no caso 2.
Logo, T(n) = (n.log n)
MergeSort:
T(n) = 2.T(n/2) + n
a = b = 2
f(n) = n
log
a
b
= 1. Cai no caso 2.
Logo, T(n) = (n.log n)
Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Mtodo Master Exemplo 2
T(n) = 9.T(n/3) + n
a = 9, b = 3
f(n) = n
log
a
b
= 2. Se = 1, Cai no caso 1.
Logo, T(n) = (n
2
)
T(n) = 9.T(n/3) + n
a = 9, b = 3
f(n) = n
log
a
b
= 2. Se = 1, Cai no caso 1.
Logo, T(n) = (n
2
)

S-ar putea să vă placă și