Análise e Técnicas de Algoritmos Agenda Introdução Introdução

Propaganda
Agenda
Análise e Técnicas de Algoritmos
••
••
••
Motivação
Motivaçãopara
paraanálise
análise de
dealgoritmos
algoritmos
Análise
Análiseassintótica
assintótica
Alguns
Algunsexemplos
exemplos simples
simples
Jorge Figueiredo
Análise
Análisede
deAlgoritmos
Algoritmos
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Introdução
Introdução
•• Dois
Dois aspectos
aspectosimportantes:
importantes:
–– Um
Um problema
problemapode,
pode, geralmente,
geralmente,ser
ser resolvido
resolvidopor
por
diferentes
diferentesalgoritmos.
algoritmos.
–– AA existência
existênciade
deum
umalgoritmo
algoritmonão
não implica,
implica,necessariamente,
necessariamente,
que
queeste
esteproblema
problemapossa
possa ser
ser resolvido
resolvidona
naprática.
prática.
•• AA análise
análisede
dealgoritmos
algoritmos pode
pode ser
serdefinida
definida como
comoooestudo
estudoda
da
estimativa
estimativade
detempo
tempo de
deexecução
execuçãode
dealgoritmos.
algoritmos.
•• O
Otempo
tempode
deexecução
execuçãoéédeterminado
determinadopelos
pelos seguintes
seguintes
aspectos:
aspectos:
–– Tempo
Tempo para
paraexecutar
executar uma
uma instrução
instruçãoou
ou passo.
passo.
–– AA natureza
naturezado
doalgoritmo.
algoritmo.
–– O
Otamanho
tamanhodo
doconjunto
conjuntode
dedados
dados que
queconstitui
constituiooproblema.
problema.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
•• ÉÉ necessário
necessárioter
ter uma
uma forma
formade
decriar
criarmedidas
medidasde
decomparação
comparação
entre
entrealgoritmos
algoritmosque
que resolvem
resolvemum
um mesmo
mesmo problema.
problema.Desta
Desta
forma,
forma,éé possível
possíveldeterminar:
determinar:
–– AA viabilidade
viabilidadede
deum
um algoritmo.
algoritmo.
–– Qual
Qual ééoomelhor
melhoralgoritmo
algoritmopara
paraaa solução
soluçãode
deum
um
problema.
problema.
•• O
O interessante
interessante ééter
ter uma
umacomparação
comparaçãorelativa
relativaentre
entre
algoritmos.
algoritmos.
–– Assumir
Assumirque
queaaexecução
execuçãode
dequalquer
qualquerpasso
passode
deum
um
algoritmo
algoritmoleva
levauma
umaum
umtempo
tempofixo
fixo eeigual.
igual.
–– O
Otempo
tempode
deexecução
execuçãode
deum
umcomputador
computadorparticular
particular não
nãoéé
interessante.
interessante.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Introdução
Eficiência de Algoritmo
•• Qual
Qual aaquantidade
quantidadede
de recursos
recursosutilizados
utilizadospara
pararesolver
resolver um
um
problema?
problema?
–– Tempo
Tempo
–– Espaço
Espaço
•• Expressar
Expressarcomo
comouma
uma função
funçãodo
dotamanho
tamanhodo
doproblema.
problema.
–– Como
Comoos
os requisitos
requisitoscrescem
crescem com
comooaumento
aumentodo
doproblema?
problema?
•• Tamanho
Tamanhodo
doproblema:
problema:
–– Número
Númerode
deelementos
elementosaaser
sertratado
tratado
–– Tamanho
Tamanhodos
doselementos
elementos
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
•• Considerar
Considerar eficiência
eficiência de
detempo:
tempo:
–– Número
Númerode
deoperações
operaçõesexpresso
expresso em
emtermos
termosdo
dotamanho
tamanhoda
da
entrada.
entrada.
–– Se
dobramos
o
tamanho
da
entrada,
qual
o
tempo
de
Se dobramos o tamanho da entrada, qual o tempo de
resposta?
resposta?
•• Por
Porque
que eficiência
eficiênciaéé importante?
importante?
–– Velocidade
Velocidadede
decomputação
computação aumentou
aumentou(hardware)
(hardware)
–– Crescimento
Crescimentode
deaplicações
aplicaçõescom
comooaumento
aumentodo
dopoder
poder
computacional
computacional
–– Maior
Maior demanda
demandapor
por aumento
aumentona
navelocidade
velocidadede
decomputação.
computação.
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
1
Eficiência de Algoritmo
Eficiência de Algoritmo
•• Quando
Quandoaa velocidade
velocidadede
decomputação
computaçãoaumenta,
aumenta,podemos
podemos
tratar
tratar mais
maisdados?
dados?
•• Suponha
Suponhaque:
que:
2
–– Um
Um algoritmo
algoritmotoma
tomann2 comparações
comparaçõespara
paraordenar
ordenarnn
números.
números.
–– Necessitamos
Necessitamosde
de11segundo
segundopara
paraordenar
ordenar55números
números (25
(25
comparações)
comparações)
–– Velocidade
Velocidadede
decomputação
computaçãoaumenta
aumentade
de um
umfator
fator de
de100
100
–– Usando
Usando11 segundo,
segundo,podemos
podemosexecutar
executar100x25
100x25
comparações,
comparações,i.e.,
i.e.,ordenar
ordenar50
50números
números
N
T(n) = n
T(n) = nlgn
T(n) = n2
T(n) = n3
Tn = 2n
5
0.005 µs
0.01 µs
0.03 µs
0.13 µs
0.03 µs
10
0.01 µs
0.03 µs
0.1 µs
1 µs
1 µs
20
0.02 µs
0.09 µs
0.4 µs
8 µs
1 ms
50
0.05 µs
0.28 µs
2.5 µs
125 µs
13 dias
100
0.1 µs
0.66 µs
10 µs
1 ms
4 x 1013 anos
Com
Com 100
100vezes
vezesde
deganho
ganhoem
emvelocidade,
velocidade,ordenamos
ordenamosapenas
apenas10
10
vezes
vezesmais
maisnúmeros!
números!
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Como Medir Eficiência de Algoritmo?
•• Medindo
Medindoeficiência:
eficiência:
–– Estudo
Estudo experimental
experimental e/ou
e/ouBenchmarking.
Benchmarking.
–– Análise
Análiseassintótica.
assintótica.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Abordagem Experimental
•Abordagem
•Abordagemexperimental:
experimental:
–Escrever
–Escrever um
umprograma
programa que
que implementa
implementa oo algoritmo
algoritmo
–Executar
–Executar ooprograma
programa com
comdiferentes
diferentescenários
cenários
–Usar
–Usar um
ummétodo
método como
como System.currentTimeMillis()
System.currentTimeMillis()para
para
obter
obter medidas
medidas acuradas
acuradasdo
dotempo
tempode
deexecução
execução real.
real.
t (ms)
60
50
40
30
20
10
0
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Abordagem Experimental
100
n
© Jorge Figueiredo, DSC/UFCG
Análise Assintótica
•• Limitações
Limitações dos
dos estudos
estudos experimentais:
experimentais:
–– Necessidade
Necessidade de
dese
seimplementar
implementareetestar
testar ooalgoritmo.
algoritmo.
–– Experimentos
Experimentospodem
podem ser
serfeitos
feitosapenas
apenas em
emum
umnúmero
número
limitado
limitadode
decenários.
cenários.Pode,
Pode, portanto,
portanto,não
nãoindicar
indicar tempo
tempode
de
execução
em
cenários
que
não
foram
considerados
execução em cenários que não foram consideradosno
no
experimento.
experimento.
–– Para
Paracomparar
comparardois
dois algoritmos:
algoritmos:garantir
garantir os
osmesmos
mesmos
hardware
hardwareeeambiente
ambientede
desoftware.
software.
Análise e Técnicas de Algoritmos – 2007.2
50
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
•• Metodologia
Metodologia para
para analisar
analisar tempo
tempo de
de execução
execução de
de
algoritmos.
algoritmos.
•• Ao
Ao contrário
contrário da
da abordagem
abordagem experimental:
experimental:
–– Usa
Usa uma
umadescrição
descriçãode
dealto
altonível
níveldos
dosalgoritmos
algoritmosem
emvez
vezde
de
testar
testaruma
umade
de suas
suasimplementações.
implementações.
–– Leva
Levaem
emconsideração
consideração todas
todasas
aspossíveis
possíveis entradas.
entradas.
–– Permite
Permiteaaavaliação
avaliação de
deeficiência
eficiênciade
dealgoritmos
algoritmosde
deuma
uma
forma
forma que
que éé independente
independentedo
dohardware
hardware eeambiente
ambientede
de
software
softwareutilizado.
utilizado.
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
2
Notação Assintótica
Big-Oh
•Objetivo:
•Objetivo: simplificar
simplificar aaanálise
análise descartando
descartando informações
informações
desnecessárias:
desnecessárias:
–“arredondamento”
–“arredondamento”1,000,001≈1,000,000
1,000,001≈1,000,000
2
2
–Dizer
–Dizer que
que3n
3n2≈≈nn2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
•• Sejam
Sejamduas
duasfunções
funções f(n)
f(n)eeg(n).
g(n).
–– f(n)
f(n)éé O(g(n))
O(g(n)) se
seexistem
existemconstantes
constantespositivas
positivas cceenn00tais
taisque
que
f(n)
f(n) ≤≤ cg(n)
cg(n) para
parann≥≥nn00
•• Exemplo:
Exemplo:2n
2n++10
10ééO(n)
O(n)
–– 2n
2n++10
10≤≤ cn
cn
–– (c
(c−−2)
2)nn≥≥10
10
–– nn≥≥10/(c
10/(c−−2)
2)
–– Escolher
Escolher cc==33eenn00==10
10
Big-Oh
Big-Oh
2
•Exemplo:
•Exemplo:nn2não
nãoééO(n)
O(n)
2
–n
cn
–n2≤≤cn
–n
≤
c
–n ≤ c
––AAdesigualdade
desigualdadenão
nãopode
podeser
ser
satisfeita
satisfeitapois
poisccdeve
deveser
seruma
uma
constante.
constante.
10.000
3n
2n+10
1.000
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
n
100
1.000.000
n^2
100n
100.000
10n
n
10.000
1.000
100
10
10
1
1
10
n
100
1.000
1
1
10
100
1.000
n
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Big-Omega
Big-Theta
•• Sejam
Sejamduas
duasfunções
funções f(n)
f(n)eeg(n).
g(n).
–– f(n)
f(n)ééΩ
Ω(g(n))
(g(n)) se
seg(n)
g(n) ééO(f(n))
O(f(n))
–– Existe
≥1 tal
tal que
quef(n)
f(n)≥≥ ccg(n)
g(n)
Existe uma
uma constante
constantereal
real cc>0
>0eenn00≥1
para
parann≥≥nn00
•• Sejam
Sejam duas
duas funções
funções f(n)
f(n) ee g(n)
g(n)
Θ
(g(n))
se
f(n)
–– f(n)
é
O(g(n)) ee f(n)
f(n) éé ΩΩ(g(n))
(g(n))
f(n) é Θ(g(n)) se f(n) éé O(g(n))
–– existem
constantes
reais
a>0
e
existem constantes reais a>0 e b>0,
b>0, ee uma
uma
constante
≥1 tal
tal que
que aa g(n)
g(n) ≥≥ f(n)
f(n) ≥≥ bb g(n)
g(n)
constante inteira
inteira nn00≥1
para
para nn ≥≥ nn00
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
3
Taxas de Crescimento Mais Comum
1
log n
constante logarítmica
2n
n n2 n3 ... nk ...
2n
polinomial
exponencial
Análise Assintótica
•• AA análise
análiseassintótica
assintótica éébaseada
baseadanessas
nessas definições
definiçõesee
estabelece
estabeleceuma
umaordem
ordem relativa
relativaentre
entrefunções.
funções.
•• AA notação
notaçãoBig-Oh
Big-Ohéé usada
usadapara
paraexpressar
expressar oonúmero
númerode
de
operações
operaçõesprimitivas
primitivas executadas
executadascomo
comofunção
funçãodo
dotamanho
tamanho da
da
entrada.
entrada.
–– um
umalgoritmo
algoritmoque
queexecuta
executaem
emtempo
tempoO(n)
O(n)éémelhor
melhordo
doque
queum
umque
que
2
executa
executaem
emtempo
tempoO(n
O(n2))
–– de
deforma
formasemelhante,
semelhante,O(log
O(logn)
n)éémelhor
melhordo
doque
queO(n)
O(n)
n2
•• Cuidado!
Cuidado! Preste
Presteatenção
atençãoaa constantes
constantesmuito
muitoaltas.
altas. Um
Um
algoritmo
algoritmoque
queexecuta
executaem
emtempo
tempo 1,000,000.n
1,000,000.nééO(n),
O(n), mas
mas
2
menos
menoseficiente
eficientedo
doque
queum
umque
queexecuta
executa em
emtempo
tempo2n
2n2,,que
queéé
2
O(n
O(n2).).
n
log n
c
n
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Complexidade de Tempo
Complexidade de Tempo
•• Para
Paradeterminar
determinarootempo
tempode
deexecução
execuçãode
deum
umdeterminado
determinado
algoritmo
algoritmo
–– descobrir
descobrir aaforma
formageral
geral da
da curva
curvaque
quecaracteriza
caracteriza seu
seutempo
tempo
de
deexecução
execuçãoem
emfunção
funçãodo
dotamanho
tamanhodo
do problema.
problema.
•• Para
Parasimplificarmos
simplificarmos aaanálise
análisede
decomplexidade
complexidadede
detempo:
tempo:
–– adotamos
adotamosaanão
nãoexistência
existênciade
deunidades
unidades de
detempo
tempo
particulares.
particulares.
–– não
nãoconsideramos
consideramostambém
tambémos
ostermos
termosde
deordem
ordeminferior,
inferior,
isto
istoé,
é,usamos
usamos Big-Oh.
Big-Oh.
•• AA complexidade
complexidadede
detempo
tempopara
paradiferentes
diferentesalgoritmos
algoritmospode
pode
indicar
indicar diferentes
diferentes classes
classesde
de complexidade.
complexidade.Cada
Cadaclasse
classeéé
caracterizada
caracterizadapor
poruma
uma família
famíliadiferente
diferente de
de curva.
curva.
•• Informalmente,
Informalmente,para
para se
se determinar
determinaraaordem
ordemde
decomplexidade
complexidade
de
deuma
umadeterminada
determinada função
funçãof(n):
f(n):
1.
1. Separar
Separarf(n)
f(n)em
emduas
duaspartes:
partes:termo
termodominante
dominanteeetermos
termos
de
deordem
ordeminferior.
inferior.
2.
2. ignorar
ignoraros
ostermos
termosde
de ordem
ordem inferior.
inferior.
3.
3. ignorar
ignoraras
asconstantes
constantesde
deproporcionalidade.
proporcionalidade.
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Análise de Algoritmos Simples
Análise de Algoritmos Simples
•• Em
Em nosso
nosso modelo
modelode
deanálise,
análise,consideramos
consideramosque
que as
as
instruções
instruçõessão
sãoexecutadas
executadas sequencialmente
sequencialmenteeeque
queooconjunto
conjunto
de
de instruções
instruções simples
simples (adição,
(adição,comparação,
comparação,atribuição,
atribuição,etc)
etc)
tomam
tomamexatamente
exatamenteuma
umaunidade
unidadede
detempo
tempopara
paraserem
serem
executadas.
executadas.
•• Tipos
Tiposde
deanálise:
análise:
Pior
Piorcaso:
caso: indica
indica oomaior
maiortempo
tempoobtido,
obtido, levando
levandoem
em
consideração
consideraçãotodas
todasas
asentradas
entradaspossíveis.
possíveis.
Melhor
Melhor caso:
caso: indica
indica oomenor
menortempo
tempoobtido,
obtido, levando
levandoem
em
consideração
consideraçãotodas
todasas
asentradas
entradaspossíveis.
possíveis.
Média:
Média: indica
indicaootempo
tempo médio
médioobtido,
obtido,considerando
considerandotodas
todas as
as
entradas
entradaspossíveis.
possíveis.
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
© Jorge Figueiredo, DSC/UFCG
••
Como
Comoooobjetivo
objetivoéédeterminar
determinaraaforma
formada
dacurva
curvaque
quecaracteriza
caracterizaoo
algoritmo,
algoritmo,vamos
vamosdefinir
definiralgumas
algumasregras
regrasque
quepodem
podemser
serutilizadas:
utilizadas:
Laços:
O
tempo
de
execução
de
um
laço
é
no
máximo
Laços: O tempo de execução de um laço é no máximoootempo
tempode
de
execução
das
instruções
dentro
do
laço
(incluindo
os
execução das instruções dentro do laço (incluindo ostestes)
testes)vezes
vezesoo
número
númerode
deiterações.
iterações.
Aninhamento
Aninhamentode
deLaços:
Laços:Analisar
Analisaros
osmais
maisinternos.
internos.OOtempo
tempototal
totalde
de
execução
execuçãode
deuma
umainstrução
instruçãodentro
dentrode
deum
umgrupo
grupode
delaços
laçosaninhados
aninhadoséé
ootempo
tempode
deexecução
execuçãoda
dainstrução
instruçãomultiplicado
multiplicadopelo
peloproduto
produtodos
dos
tamanhos
tamanhosde
detodos
todosos
oslaços.
laços.
Instruções
InstruçõesConsecutivas:
Consecutivas:Apenas
Apenasefetuar
efetuaraasoma.
soma.
If/Else:
If/Else:ootempo
tempode
deexecução
execuçãode
deuma
umainstrução
instruçãoif/else
if/elsenunca
nuncaéémaior
maiordo
do
que
o
tempo
de
execução
do
teste
mais
o
maior
que o tempo de execução do teste mais o maiordos
dostempos
temposde
de
execução
de
S1
e
S2.
S1
e
S2
representam
as
instruções
do
then
execução de S1 e S2. S1 e S2 representam as instruções do thenee
else,
else,respectivamente.
respectivamente.
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
4
Análise de Algoritmos Simples
Algumas Dicas
Chamada
Chamadade
de Funções:
Funções:AAanálise
análiseééfeita
feitacomo
comono
no caso
casode
de
laços
laçosaninhados.
aninhados.Para
Para calcular
calcularaa complexidade
complexidadede
deum
um
programa
programa com
com várias
váriasfunções,
funções,determina-se
determina-seprimeiro
primeiro aa
complexidade
complexidade de
decada
cadauma
umadas
dasfunções.
funções.Desta
Destaforma,
forma,na
na
análise,
análise, cada
cadauma
umadas
dasfunções
funçõeséévista
vistacomo
comouma
uma
instrução
instruçãocom
comaacomplexidade
complexidadeque
quefoi
foicalculada.
calculada.
Recursão:
Recursão: ÉÉaaparte
parte mais
maisdifícil
difícil da
daanálise
análise de
de complexidade.
complexidade.
Em
Em muitos
muitoscasos,
casos,pode-se
pode-sefazer
fazeraa linearização
linearizaçãoatravés
atravésda
da
substituição
substituiçãoda
dachamada
chamadarecursiva
recursivapor
poralguns
algunslaços
laços
aninhados,
por
exemplo.
Entretanto,
existem
algoritmos
aninhados, por exemplo. Entretanto, existem algoritmos
que
que não
não possibilitam
possibilitam aa linearização.
linearização. Nestes
Nestes caso,
caso,éé
necessário
necessáriousar
usar uma
uma relação
relaçãode
de recorrência
recorrênciaque
quetem
temque
que
ser
ser resolvida.
resolvida.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
••
••
••
••
••
Identificar
Identificaraaoperação
operaçãofundamental
fundamentalusada
usadano
noalgoritmo.
algoritmo.AAanálise
análisedessa
dessa
operação
operaçãofundamental
fundamentalidentifica
identificaootempo
tempode
deexecução.
execução.Isso
Issopode
podeevitar
evitaraa
análise
linha-por-linha
do
algoritmo.
análise linha-por-linha do algoritmo.
Quando
Quandoum
umalgoritmo,
algoritmo,em
emuma
umapassada
passadade
deuma
umaiteração,
iteração,divide
divideoo
conjunto
conjuntode
dedados
dadosde
deentrada
entradaem
emuma
umaou
oumais
maispartes,
partes,tomado
tomadocada
cadauma
uma
dessas
dessaspartes
parteseeprocessando
processandoseparada
separadaeerecursivamente,
recursivamente,eedepois
depois
juntando
juntandoos
osresultados,
resultados,este
estealgoritmo
algoritmoéépossivelmente
possivelmenteO(n.log
O(n.logn)
n)
Um
Umalgoritmo
algoritmoééO(log
O(logn)
n)se
seele
eleleva
levatempo
tempoconstante
constantepara
parareduzir
reduziroo
tamanho
tamanhodo
doproblema,
problema,geralmente
geralmentepela
pelametade.
metade.Por
Porexemplo,
exemplo,aapesquisa
pesquisa
binária.
binária.
Se
o
algoritmo
leva
tempo
constante
para
reduzir
o
tamanho
do
problema
Se o algoritmo leva tempo constante para reduzir o tamanho do problema
em
emum
umtamanho
tamanhoconstante,
constante,ele
eleserá
seráO(n).
O(n).
Algoritmos
Algoritmoscombinatoriais
combinatoriaissão
sãoexponenciais.
exponenciais.Por
Porexemplo,
exemplo,ooproblema
problemado
do
caixeiro
caixeiroviajante.
viajante.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Exercício
Qual
Qual aacomplexidade
complexidadedo
doalgoritmo
algoritmoabaixo?
abaixo?
Análise e Técnicas de Algoritmos
Potencia(x, n)
p←1
i←0
while i < n do
p ← p.x
i←i+1
return p
Jorge Figueiredo
Análise
Análisede
deAlgoritmos
Algoritmos Recursivos
Recursivos
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Agenda
Introdução
•• Relação
Relaçãode
de Recorrência
Recorrência
–– Derivando
Derivando recorrência
recorrência
–– Resolvendo
Resolvendorecorrência
recorrência
•• Análise
Análisede
dealgoritmos
algoritmos recursivos
recursivos
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
•• AA análise
análisede
deum
um algoritmo
algoritmorecursivo
recursivo requer
requer aaresolução
resoluçãode
de
uma
uma recorrência.
recorrência.
•• Uma
Uma recorrência
recorrência ééum
um algoritmo
algoritmo recursivo
recursivo que
que calcula
calculaoovalor
valor
de
deuma
umafunção
funçãoem
emum
um ponto
pontodado.
dado.
•• Uma
Uma recorrência
recorrênciadefine
defineT(n)
T(n)em
emtermos
termosde
deT(n-1),
T(n-1),T(n-2),
T(n-2), etc.
etc.
•• Exemplo:
Exemplo:
–– T(1)
T(1)==11
–– T(n)
T(n)==T(n
T(n––1)
1)++3n
3n ++22,,para
paran≥2
n≥2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
5
Introdução
Introdução
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
Cortes: 1
Pedaços: 2
Cortes: 1
Pedaços: 2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Introdução
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
Análise e Técnicas de Algoritmos – 2007.2
Cortes: 2
Pedaços: 4
Cortes: 3
Pedaços: 7
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Introdução
Cortes: 1
Pedaços: 2
Cortes: 2
Pedaços: 4
•• ÉÉ possível
possívelobservar
observar que
que oo n-ésimo
n-ésimo corte
corte cria
cria nn novos
novos pedaços.
pedaços.
•• Logo,
Logo,oonúmero
númerototal
total de
de pedaços
pedaços obtido
obtido com
com nn cortes,
cortes,
denotado
denotado por
porP(n),
P(n),éé dado
dado pela
pela seguinte
seguinte relação
relaçãode
de
recorrência:
recorrência:
–– P(1)
P(1) ==22
–– P(n)
P(n) ==P(n
P(n––1)
1) ++n,
n, para
paran≥2
n≥2
Cortes: 4
Pedaços: 11
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Derivando Relações de Recorrências
Derivando Relações de Recorrências
Como
Comoproceder
procederpara
para derivar
derivaruma
uma relação
relaçãode
derecorrência
recorrênciapara
paraaa
análise
análisedo
dotempo
tempode
de execução
execuçãode
deum
umalgoritmo:
algoritmo:
•• Determinar
Determinarqual
qualootamanho
tamanhonndo
doproblema.
problema.
•• Verificar
Verificarque
que valor
valorde
dennééusado
usadocomo
comobase
baseda
darecursão.
recursão.Em
Em
geral
geralééum
umvalor
valorúnico
único (n=1,
(n=1,por
porexemplo),
exemplo), mas
maspode
podeser
ser
valores
valoresmúltiplos.
múltiplos.Vamos
Vamosconsiderar
consideraresse
esse valor
valor como
comonn00..
•• Determinar
Determinar T(n
T(n00).).Pode-se
Pode-seusar
usar uma
uma constante
constante c,
c, mas,
mas,em
em
muitos,
muitos, casos
casos um
umnúmero
númeroespecífico
específicoéénecessário.
necessário.
•• T(n)
T(n)éédefinido
definido como
como uma
uma soma
somade
de várias
várias ocorrências
ocorrênciasde
deT(m)
T(m)
(chamadas
(chamadasrecursivas),
recursivas),mais
maisaa soma
somade
deoutras
outrasinstruções
instruções
efetuadas.
efetuadas.Em
Emgeral,
geral,as
as chamadas
chamadas recursivas
recursivasestão
estão
relacionadas
relacionadascom
comaa subproblemas
subproblemasdo
domesmo
mesmotamanho
tamanhof(n),
f(n),
definindo
definindo um
umtermo
termo a.T(f(n))
a.T(f(n)) na
na relação
relação de
de recorrência.
recorrência.
•• AA relação
relação de
de recorrência
recorrência éédefinida
definida por:
por:
–– T(n)
T(n)==c,
c,se
senn==nn00
–– T(n)
T(n)==a.T(f(n))
a.T(f(n))++g(n),
g(n), caso
casocontrário
contrário
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
6
Derivando Relações de Recorrências
•• Exemplo:
Exemplo:Torre
Torrede
deHanoi
Hanoi
–– Objetivo:
Objetivo:transferir
transferiros
osnn discos
discosde
deAApara
para CC
–– Regras:
Regras:
•• Mover
Moverum
umdisco
discopor
por vez.
vez.
•• Nunca
Nuncacolocar
colocarum
umdisco
disco maior
maiorem
em cima
cima de
deum
um menor.
menor.
–– Solução
SoluçãoRecursiva:
Recursiva:
•• Transferir
Transferir n-1
n-1discos
discos de
deAApara
paraBB
•• Mover
Moveroo maior
maior disco
disco de
deAApara
paraCC
•• Transferir
Transferir n-1
n-1discos
discos de
deBBpara
paraCC
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Derivando Relações de Recorrências
MergeSort(A, n)
if n ≤ 1
return A
return merge(MergeSort(A1, n/2), MergeSort(A2, n/2))
Relação de Recorrência
T(1) = c
T(n) = 2.T(n/2) + d.n
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Método do Chute e Prova por Indução
•• Seja
Sejaaaseguinte
seguinterelação
relaçãode
derecorrência:
recorrência:
–– T(1)
T(1)==11
–– T(n)
T(n)==T(n
T(n––1)
1)++3n
3n++22,,para
paran≥2
n≥2
•• AArelação
relaçãode
derecorrência
recorrênciaééresolvida
resolvidaem
emduas
duaspartes:
partes:
2
1.
/2++7n/2
7n/2––44
1. Chute:
Chute:T(n)
T(n)==3n
3n2/2
2.
2. Prova:
Prova:
1.
1. Caso
Casobase
baseéépara
paran=1
n=1
2.
2. H.I.:
H.I.:assumir
assumirque
queééválido
válidopara
paran-1
n-1
3.
Provar
T(n)
3. Provar T(n)
2
Se
Seaaprova
provafor
forconfirmada,
confirmada,T(n)
T(n)ééO(n
O(n2))
Análise e Técnicas de Algoritmos – 2007.2
Derivando Relações de Recorrências
Hanoi(A, C, B, n)
if n > 1
Hanoi(A, B, C, n-1)
Move(A, C)
if n > 1
Hanoi(B, C, A, n-1)
Relação de Recorrência
T(1) = 1
T(n) = 2.T(n-1) + 1
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Resolvendo Relações de Recorrência
•• Resolver
Resolveruma
umarelação
relaçãode
derecorrência
recorrêncianem
nem sempre
sempreééfácil.
fácil.
•• Resolvendo
Resolvendouma
uma relação
relaçãode
derecorrência,
recorrência,determina-se
determina-seoo
tempo
tempode
deexecução
execução do
doalgoritmo
algoritmo recursivo
recursivo correspondente.
correspondente.
•• Relação
Relaçãode
de recorrência:
recorrência:T(n)
T(n)==T(n
T(n11)) ++T(n
T(n22))+...+
+...+T(n
T(naa)) ++f(n)
f(n)
•• ÉÉ mais
maisfácil
fácil quando
quando temos
temosaasubproblemas
subproblemasde
demesmo
mesmo
tamanho
tamanhoque
queééuma
uma fração
fraçãode
denn(por
(porexemplo,
exemplo,n/b):
n/b):
–– T(n)
T(n)==a.T(n/b)
a.T(n/b)++f(n)
f(n)
•• Como
Como resolver:
resolver:
–– Método
Métododo
do chute
chute
–– Método
Métododa
da árvore
árvorede
de recursão
recursão
–– Método
Métododo
do desdobramento
desdobramento
–– Método
Métodomaster
master
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Método do Chute e Prova por Indução
•• Seja
Sejaaaseguinte
seguinterelação
relaçãode
derecorrência:
recorrência:
–– T(1)
T(1)==11
–– T(n)
T(n)==2.T(n/2)
2.T(n/2)++nn,,para
paran≥2
n≥2
•• AArelação
relaçãode
derecorrência
recorrênciaééresolvida
resolvidaem
emduas
duaspartes:
partes:
1.
1. Chute:
Chute:T(n)
T(n)==nn++n.logn
n.logn
2.
2. Prova:
Prova:
1.
1. Caso
Casobase:
base:11++1.log
1.log11==11
2.
2. H.I.:
H.I.:assumir
assumirque
queééválido
válidopara
paravalores
valoresaté
atén-1
n-1
3.
3. Provar
ProvarT(n):
T(n):
•• =2.(n/2
=2.(n/2++n/2.log
n/2.logn/2)
n/2)++nn
•• =n
=n++n.(logn
n.(logn-1)
-1)++nn
•• =n
=n++n.logn
n.logn
Logo,
Logo,T(n)
T(n)ééO(n.logn)
O(n.logn)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
7
Método da Árvore de Recursão
Método da Árvore de Recursão
•• Talvez
Talvezoométodo
método mais
mais intuitivo.
intuitivo.
•• Consiste
Consisteem
em desenhar
desenharuma
umaárvore
árvorecujos
cujosnós
nósrepresentam
representam os
os
tamanhos
tamanhosdos
doscorrespondentes
correspondentesproblemas.
problemas.
•• Cada
Cadanível
nível iicontém
contém todos
todosos
os subproblemas
subproblemasde
de profundidade
profundidade i.i.
•• Dois
Dois aspectos
aspectosimportantes:
importantes:
–– AA altura
alturada
daárvore.
árvore.
–– O
Onúmero
númerode
depassos
passosexecutados
executadosde
decada
cadanível.
nível.
•• AA solução
soluçãoda
darecorrência
recorrência(tempo
(tempode
deexecução
execuçãodo
doalgoritmo)
algoritmo) éé
aa soma
somade
detodos
todosos
os passos
passosde
detodos
todosos
osníveis.
níveis.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
•• Resolver
ResolverT(n)
T(n)== 2.T(n/2)
2.T(n/2)++nn
T(n)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Método da Árvore de Recursão
Método da Árvore de Recursão
n
T(n/2)
n
T(n/2)
n/2
T(n/4)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
n/2
T(n/4) T(n/4)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Método da Árvore de Recursão
Método da Árvore de Recursão
n
n
n/2
n/4
n/2
n/4
n/4
n/2
h = log n
n/4
T(1)
Análise e Técnicas de Algoritmos – 2007.2
T(n/4)
n/4
n/2
n/4
n/4
n/4
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
8
Método da Árvore de Recursão
n
n
n/2
h = log n
n/4
Método da Árvore de Recursão
n/2
n/4
n/4
n/2
h = log n
n/4
1
n/4
© Jorge Figueiredo, DSC/UFCG
n/4
n/4
n/4
Método da Árvore de Recursão
n/4
n/4
4.n/4= n
1
n/2
h = log n
n/4
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
n/4
2.n/2= n
n/2
n/4
n/4
n folhas
n/4
n/4
n/4
n/4
n folhas
4.n/4= n
n.1= n
© Jorge Figueiredo, DSC/UFCG
Método do Desdobramento
n
n/2
2.n/2= n
n/2
Análise e Técnicas de Algoritmos – 2007.2
Método da Árvore de Recursão
n
n
n
2.n/2= n
n/2
n/4
© Jorge Figueiredo, DSC/UFCG
n
n
n/2
1
n/4
Análise e Técnicas de Algoritmos – 2007.2
Método da Árvore de Recursão
h = log n
2.n/2= n
n/2
1
Análise e Técnicas de Algoritmos – 2007.2
h = log n
n
n
4.n/4= n
n.1= n
•• Esse
Essemétodo
métodoééooda
da árvore
árvorede
derecursão,
recursão, representado
representadode
de
forma
formaalgébrica.
algébrica.
•• Consiste
Consisteem:
em:
–– Usar
Usar (algumas
(algumaspoucas)
poucas) substituições
substituiçõesrepetidamente
repetidamenteaté
até
encontrar
encontrar um
umpadrão.
padrão.
–– Escrever
Escrever uma
umafórmula
fórmula em
emtermos
termosde
de nn eeoonúmero
númerode
de
substituições
substituições i.i.
–– Escolher
Escolher ii de
detal
talforma
forma que
quetodas
todasas
as referências
referênciasaa T()
T()
sejam
sejam referências
referênciasao
aocaso
caso base.
base.
–– Resolver
Resolveraafórmula.
fórmula.
(log n).n
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
9
Método do Desdobramento – Exemplo 1
•• Solução
Soluçãopara
paraooproblema
problemada
dapizza:
pizza:
–– T(1)
T(1)==22
–– T(n)
T(n)==T(n
T(n––1)
1)++nn,,para
paran≥2
n≥2
•• Desdobrando
Desdobrandoaarelação
relaçãode
derecorrência:
recorrência:
T(n)
T(n)==T(n-1)
T(n-1)++nn
T(n)
T(n)==T(n-2)
T(n-2)++(n-1)
(n-1)++nn
T(n)
T(n)==T(n-3)
T(n-3)++(n-2)
(n-2)++(n-1)
(n-1)++nn
...
...
T(n)
T(n)==T(n-i)
T(n-i)++(n-i+1)
(n-i+1)++...
...++(n-1)
(n-1)++nn
•• Caso
Casobase
basealcançado
alcançadoquando
quandoi=n-1
i=n-1
•• T(n)
T(n)==22++22++33++...
...++(n
(n––1)
1)++nn
•• T(n)
T(n)==11++n.(n-1)/2
n.(n-1)/2
2
•• Logo,
Logo,T(n)
T(n)==O(n
O(n2))
•• Solução
Soluçãopara
paraooproblema
problemada
daTorre
Torrede
deHanoi:
Hanoi:
–– T(1)
T(1)==11
–– T(n)
T(n)==2.T(n
2.T(n––1)
1)++11,,para
paran≥2
n≥2
•• Desdobrando
Desdobrandoaarelação
relaçãode
derecorrência:
recorrência:
T(n)
T(n)==2.T(n
2.T(n––1)
1)++11
T(n)
T(n)==2.(2.T(n-2)
2.(2.T(n-2)++1)
1)++11==4.T(n-2)
4.T(n-2)++22++11
T(n)
T(n)==4.(2.T(n-3)
4.(2.T(n-3)++1)
1)++22++11==8.T(n-3)
8.T(n-3)++44++22++11
...
...
ii
i-1
i-2
1
T(n)
.T(n-i)++22i-1++22i-2...
...++221++11
T(n)==22.T(n-i)
•• Caso
Casobase
basealcançado
alcançadoquando
quandoi=n-1
i=n-1
n-1
n-2
n-3
1
•• T(n)
...++221++11
T(n)==22n-1++22n-2++22n-3++...
•• Isso
Issoééuma
umasoma
somageométrica
geométrica
n
n
•• Logo,
O(2n))
Logo,T(n)
T(n)==22n––11==O(2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
Método do Desdobramento – Exemplo 2
Método Master
Método Master – Exemplo 1
•• Teorema
Teoremaque
que resolve
resolvequase
quasetodas
todasas
asrecorrências.
recorrências.
•• T(n)
T(n)da
daforma
forma a.T(n/b)
a.T(n/b)++f(n),
f(n),a,b
a,b>>11
•• Casos:
Casos:
logaab- ε
1.
paraalgum
algumεε >>0,
0,temos
temosque:
que:
1. Se
Sef(n)
f(n)∈∈O(n
O(nlog b- ε),), para
logaab
•• T(n)
T(n)∈∈ Θ(n
Θ(nlog b).).
logaab
2.
2. Se
Sef(n)
f(n)∈∈ Θ(n
Θ(nlog b),), temos
temosque:
que:
logaab
•• T(n)
T(n)∈∈ Θ(n
Θ(nlog b.log
.logn).
n).
a
log ab + ε
3.
3. Se
Sef(n)
f(n)∈∈Ω(n
Ω(nlog b + ε),), para
paraalgum
algumεε>>00ee se
se a.f(n/b)≤c.f(n)
a.f(n/b)≤c.f(n)
para
paraalgum
algumcc>>00eenn suficientemente
suficientementegrande,
grande,temos
temosque:
que:
•• T(n)
T(n)∈∈ Θ(f(n)).
Θ(f(n)).
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.2
•• MergeSort:
MergeSort:
–– T(n)
T(n)==2.T(n/2)
2.T(n/2)++nn
–– aa ==bb==22
–– f(n)
f(n) ==nn
a
•• log
logabb == 1.
1. Cai
Cai no
no caso
caso2.
2.
•• Logo,
Logo,T(n)
T(n)== Θ(n.log
Θ(n.log n)
n)
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
Método Master – Exemplo 2
•• T(n)
T(n)==9.T(n/3)
9.T(n/3)++nn
–– aa ==9,
9, bb==33
–– f(n)
f(n) ==nn
a
•• log
2.Se
Seεε==1,
1,Cai
Cai no
nocaso
caso1.
1.
logabb == 2.
2
•• Logo,
Logo,T(n)
T(n)== Θ(n
Θ(n2))
Análise e Técnicas de Algoritmos – 2007.2
© Jorge Figueiredo, DSC/UFCG
10
Download