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

Propaganda
Agenda
•• Introdução
IntroduçãoInformal
Informal
•• Motivação
Motivação
Análise e Técnicas de Algoritmos
Jorge Figueiredo
Visão
VisãoGeral
Geraldo
doCurso
Curso
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Introdução Informal
Problemas Computacionais
•• O
Onosso
nosso curso
cursoéésobre
sobretécnicas
técnicaseeanálise
análisede
dealgoritmos
algoritmos
(computacionais).
(computacionais).
•• O
Oque
queééum
umalgoritmo?
algoritmo?
–– Procedimento
Procedimentocomputacional
computacional que
quetoma
toma algum
algum valor
valor
(conjunto)
(conjunto)como
comoentrada
entradaee produz
produzum
umvalor
valor (conjunto)
(conjunto)como
como
saída.
saída.
•• Qual
Qual aadiferença
diferençaentre
entrealgoritmos
algoritmoseeprogramas?
programas?
–– Idéia
Idéiaxxtexto
textodescritivo
descritivo
–– humanos
humanosxxcomputadores
computadores
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Problemas Computacionais
Especifica
Especificaaarelação
relação entre
entre aaentrada
entradaeeaasaída
saídadesejada
desejada
Ordenação
Entrada: Uma seqüência de n números ‹a1, a2, ..., an›.
Saída: Uma reordenação da seqûëncia de entrada ‹a'1, a'2, ..., a'n›,
onde a'1 ≤ a'2 ≤ ... ≤ a'n.
Número Primo
Entrada: Uma número natural q.
Saída: sim ou não, dependendo se q é primo.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Como Descrever Algoritmos?
•• Um
Um instância
instância de
de um
um problema
problema computacional
computacionaléé um
um possível
possível
valor
valor para
paraaaentrada.
entrada.
–– ‹45,
‹45,7,
7,13,
13, 23,
23, 2›
2›ééuma
uma instância
instância para
para oo problema
problemada
da
ordenação.
ordenação.
–– 29
29ééuma
umainstância
instânciapara
paraooproblema
problemados
dos números
númerosprimos.
primos.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
•• Utilizar
Utilizar uma
uma linguagem.
linguagem.Qual?
Qual?
–– Linguagem
Linguagemnatural
natural(português
(portuguêsou
ouinglês).
inglês).
–– Linguagem
Linguagemde
deprogramação.
programação.
•• Problemas:
Problemas:
–– Ambiguidade
Ambiguidade
–– Estruturação
Estruturação
–– Prolixidade
Prolixidade
–– Inadequação
Inadequação para
paraprogramação
programação
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
1
Como descrever algoritmos?
Como descrever algoritmos?
Linguagem
Natural
Código
Expressividade
Flexibilidade
Controle
Concisão
Estrutura
Formal
Linguagem
Natural
Código
Expressividade
Flexibilidade
Controle
Concisão
Estrutura
Formal
Pseudo-Código
Reduzir ambiguidade
Abstrair detalhes não importantes
Fácil de ser assimilado por humanos
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Insertion Sort
j
1
Exemplo do Insertion Sort
n
45
A:
ORDENADO
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
7
13
23
2
chave
InsertionSort(A, n)
for j← 2 to n do
chave ← A[j]
► insere A[j] na parte ordenada A[1..j-1]
i←j–1
while i > 0 e A[i] > chave do
A[i + 1] ← A[i]
i←i–1
A[i + 1] ← chave
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo do Insertion Sort
45
Análise e Técnicas de Algoritmos – 2007.1
7
13
23
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo do Insertion Sort
2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
45
7
13
23
2
7
45
13
23
2
© Jorge Figueiredo, DSC/UFCG
2
Exemplo do Insertion Sort
Exemplo do Insertion Sort
45
7
13
23
2
45
7
13
23
2
7
45
13
23
2
7
45
13
23
2
7
13
45
23
2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo do Insertion Sort
Exemplo do Insertion Sort
45
7
13
23
2
45
7
13
23
2
7
45
13
23
2
7
45
13
23
2
7
13
45
23
2
7
13
45
23
2
7
13
23
45
2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo do Insertion Sort
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo do Insertion Sort
45
7
13
23
2
45
7
13
23
2
7
45
13
23
2
7
45
13
23
2
7
13
45
23
2
7
13
45
23
2
7
13
23
45
2
7
13
23
45
2
2
7
13
23
45
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
3
Avaliação de Algoritmos
Avaliação de Algoritmos
•• Propriedades:
Propriedades:
–– Corretude
Corretude
–– Simplicidade
Simplicidade
–– Eficiência
Eficiência
•• Corretude:
Corretude:
–– Um
Um algoritmo
algoritmo está
estácorreto
correto se
separa
paratoda
toda entrada
entrada(legal)
(legal) ele
ele
produz
produzaa saída
saídacorreta.
correta.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Avaliação de Algoritmos
Avaliação de Algoritmos
•• Simplicidade:
Simplicidade:
–– Benefícios
Benefíciospragmáticos:
pragmáticos:
•• Fácil
Fácilde
de ser
serentendido
entendido
•• Fácil
Fácil de
de implementar
implementar
•• Fácil
Fácil de
de manter
manter
Análise e Técnicas de Algoritmos – 2007.1
•• Eficiência
Eficiência (em
(emfunção
funçãodo
dotamanho
tamanhodo
doproblema/entrada):
problema/entrada):
–– Tempo
Tempo
•• Quanto
Quantotempo
tempoleva
levapara
paraproduzir
produzir aasaída
saídacorreta?
correta?
–– Espaço
Espaço
•• Quanto
Quantoespaço
espaçode
dememória
memóriaéé necessário?
necessário?
© Jorge Figueiredo, DSC/UFCG
Como provar a corretude de um algoritmo?
•• Não
Nãoééuma
umatarefa
tarefa simples
simples
•• Testes
Testesnão
não são
sãosuficientes:
suficientes:servem
servemapenas
apenaspara
paramostrar
mostrarque
que
um
um algoritmo
algoritmo tem
tem erros.
erros.
•• Ferramentas
Ferramentasutilizadas:
utilizadas:
–– Invariantes
Invariantesde
delaço
laço
–– Função
Funçãorecursiva
recursiva
–– Prova
Provapor
por indução
indução
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Corretude do Insertion Sort
j
1
n
A:
ORDENADO
chave
InsertionSort(A, n)
for j← 2 to n do
chave ← A[j]
► insere A[j] na parte ordenada A[1..j-1]
i←j–1
while i > 0 e A[i] > chave do
A[i + 1] ← A[i]
i←i–1
A[i + 1] ← chave
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
4
Corretude do Insertion Sort
Eficiência do Insertion Sort
•• Invariante
Invariantede
delaço:
laço:
No
No início
iníciode
decada
cada iteração
iteraçãodo
dolaço,
laço,oo subarray
subarrayA[1..j-1]
A[1..j-1]
contém
contémos
oselementos
elementosoriginais
originaisde
deA[1..j-1]
A[1..j-1] mas,
mas,ordenados.
ordenados.
•• Prova:
Prova:
Inicialização
Inicialização:: j=2,
j=2,A[1..j-1]=A[1..1]=A[1],
A[1..j-1]=A[1..1]=A[1],ordenado.
ordenado.
Manutenção:
Manutenção:cada
cadaiteração
iteraçãopreserva
preservaooinvariante.
invariante.
Término:
Término:j=n+1,
j=n+1,então
entãoA[1..j-1]=A[1..n],
A[1..j-1]=A[1..n],ordenado.
ordenado.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Independência da Máquina
© Jorge Figueiredo, DSC/UFCG
Eficiência do Insertion Sort
custo
c1
c2
0
c4
c5
c6
c7
c8
vezes
n
n-1
n-1
n-1
∑j=2n tj
∑j=2n(tj –1)
∑j=2n(tj –1)
n –1
(tj é o número de vezes que o teste do laço na linha 5 é executado para o valor de j)
O custo total é T(n) = soma de custo × vezes em cada linha
=c1n + c2(n-1) + c4(n-1) + c5∑j=2n tj+ c6∑j=2n (tj-1)+ c7∑j=2n (tj-1)+ c8(n-1)
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
•• Pior
Pior caso:
caso:
–– Maior
Maior tempo
tempode
deexecução
execuçãode
deum
umalgoritmo
algoritmo para
paraqualquer
qualquer
entrada
entradade
detamanho
tamanho n.n.
–– ÉÉ ootipo
tipomais
maisutilizado.
utilizado. Todos
Todosgostam
gostamde
degarantia.
garantia.
•• Caso
Caso médio:
médio:
–– Tempo
Tempo esperado
esperado de
de um
umalgoritmo
algoritmosobre
sobre todas
todasas
asentradas
entradas
de
detamanho
tamanhon.n.
–– Necessidade
Necessidade de
deusar
usar distribuição
distribuiçãoestatística.
estatística.
•• Melhor
Melhor caso:
caso:
–– Raramente
Raramenteééfeita.
feita.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Eficiência do Insertion Sort (cont.)
•• Como
Comodeterminar
determinarootempo
tempode
deexecução?
execução?
InsertionSort(A, n)
for j ← 2 to n do
chave ← A[j]
//insere A[j] na parte ordenada A[1..j-1]
i ← j-1
while i >0 e A[i]>chave do
A[i+1] ← A[i]
i ← i-1
A[i+1] ← chave
Análise e Técnicas de Algoritmos – 2007.1
Tempo de Execução – Tipos de Análise
•• Para
Paracomparar
compararos
osdiferentes
diferentesalgoritmos,
algoritmos,de
deforma
formajusta,
justa,éé
necessário
necessáriodefinir
definir um
um modelo
modeloabstrato
abstratode
de máquina.
máquina.
•• Máquina
Máquinade
deAcesso
Acesso Aleatório:
Aleatório:
–– Um
Um único
únicoprocessador
processadorgenérico.
genérico.
–– Instruções
Instruçõesexecutadas
executadassequencialmente,
sequencialmente,sem
sem operações
operações
concorrentes.
concorrentes.
–– Memória
Memória ilimitada.
ilimitada.
–– Instrução
Instruçãobásica
básicatoma
toma uma
umaunidade
unidadede
de tempo.
tempo.
Análise e Técnicas de Algoritmos – 2007.1
•• O
Oalgoritmo
algoritmoééeficiente?
eficiente?
•• O
Otempo
tempode
deexecução
execuçãode
deum
umalgoritmo
algoritmodepende
dependeda
dacara
cara da
da
entrada.
entrada.
•• Na
Na análise
análisedo
dotempo
tempo de
deexecução,
execução,aaparametrização
parametrização éé
baseada
baseadano
notamanho
tamanhoda
daentrada.
entrada.
•• AA análise
análisedo
dotempo
tempode
deexecução,
execução,ééuma
uma forma
formade
dedefinir
definir
eficiência.
eficiência.
•• Random-Access-Model
Random-Access-Model (RAM)
(RAM)
© Jorge Figueiredo, DSC/UFCG
•• Melhor
Melhor caso:
caso:números
números já
jáordenados
ordenados
–– tj=1,
tj=1,eelinhas
linhas66ee77serão
serãoexecutadas
executadas00 vezes
vezes
–– T(n)
T(n)== c1n
c1n++c2(n-1)
c2(n-1) ++c4(n-1)
c4(n-1) ++c5(n-1)
c5(n-1) ++c8(n-1)
c8(n-1)
=(c1
=(c1++c2
c2++c4
c4 ++c5
c5++c8)n
c8)n–– (c2
(c2++ c4
c4++c5
c5++c8)
c8)==cn
cn ++c‘c‘
•• Pior
Pior caso:
caso:números
númerosem
emordem
ordeminversa
inversa
–– tj=j
tj=j
nn tj = n(n+1)/2-1 e ∑ nn(tj –1) = n(n-1)/2,
–– ∑∑j=2
j=2 tj = n(n+1)/2-1 e ∑j=2
j=2 (tj –1) = n(n-1)/2,
–– T(n)
T(n) ==c1n
c1n++ c2(n-1)
c2(n-1) ++ c4(n-1)
c4(n-1)++c5(n(n+1)/2
c5(n(n+1)/2 -1)
-1)++c6(n(nc6(n(n1)/2
1)/2-1)
-1)++ c7(n(n-1)/2)+
c7(n(n-1)/2)+ c8(n-1)
c8(n-1)
=((c5
=((c5 ++c6
c6++c7)/2)n2
c7)/2)n2+(c1
+(c1++c2
c2++c4
c4+c5/2-c6/2-c7/2+c8)n+c5/2-c6/2-c7/2+c8)n2
(c2
(c2 ++c4
c4++c5
c5++c8)
c8)== an
an2+bn+c
+bn+c
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
5
Eficiência do Insertion Sort (cont.)
•• Caso
Caso médio:
médio:números
números aleatórios
aleatórios
–– Na
Na média,
média,ttj j== j/2
j/2
2
–– T(n)
T(n) será
seráda
daordem
ordem de
denn2,,mesmo
mesmoque
queno
nopior
pior caso.
caso.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Ainda Sobre Análise de Algoritmos
•• AA análise
análisede
dealgoritmos
algoritmospermite
permiteooestudo
estudoteórico
teóricode
deprogramas
programas
computacionais:
computacionais:
–– Desempenho.
Desempenho.
–– Utilização
Utilizaçãode
de recursos.
recursos.
–– Corretude.
Corretude.
•• Estudo
Estudo de
de métodos,
métodos,técnicas,
técnicas,idéias,
idéias,dicas
dicas para
paradesenvolver
desenvolver
algoritmos
algoritmos(eficientes).
(eficientes).
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Objetivos do Curso
•• Importância
Importânciado
doestudo
estudoeeanálise
análisede
dealgoritmos:
algoritmos:
–– Ajuda
Ajudano
noentendimento
entendimentode
deescalabilidade.
escalabilidade.
–– Permite
Permitedefinir
definirooque
que ééviável
viável eeooque
queééimpossível.
impossível.
–– AA matemática
matemática utilizada
utilizadaserve
serve como
comouma
uma linguagem
linguagempara
para
lidar
lidar com
comoocomportamento
comportamentode
deum
umprograma.
programa.
–– Provê
Provêmeios
meiospara
paracomparar
comparardiferentes
diferentessoluções
soluçõesde
deum
um
mesmo
mesmoproblema.
problema.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Razões para Estudar Algoritmos
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Razões para Estudar Algoritmos
•• Evitar
Evitarreinventar
reinventaraaroda:
roda:
–– Existem
Existem bons
bonsalgoritmos
algoritmosque
quesolucionam
solucionam problemas
problemas
importantes.
importantes.
•• Ajudar
Ajudarno
nodesenvolvimento
desenvolvimento de
deseus
seusalgoritmos:
algoritmos:
–– Nem
Nem sempre
sempreexiste
existeum
umalgoritmo
algoritmode
deprateleira
prateleiraque
quesirva
sirva
para
pararesolver
resolver ooseu
seuproblema.
problema.
–– O
O conhecimento
conhecimentode
dealgoritmos
algoritmosbem
bemestabelecidos
estabelecidosééfonte
fonte
de
de inspiração.
inspiração.
–– Muitos
Muitosdos
dosprincípios
princípiosde
deprojetos
projetosde
dealgoritmos
algoritmossão
são úteis
úteis
em
em todos
todosos
osproblemas
problemas de
deprogramação.
programação.
Análise e Técnicas de Algoritmos – 2007.1
1.
1. Aprender
Aprenderalgoritmos
algoritmos clássicos
clássicos
2.
2. Aprender
Aprendercomo
como identificar/desenvolver
identificar/desenvolveralgoritmos
algoritmoscorretos
corretos ee
eficientes
eficientespara
para resolver
resolver um
umdeterminado
determinado
3.
3. Aprender
Aprendercomo
comoexpressar
expressaralgoritmos
algoritmos
4.
4. Aprender
Aprendercomo
como validar/verificar
validar/verificaralgoritmos
algoritmos
5.
5. Aprender
Aprendercomo
comoanalisar
analisar
6.
6. Aprender
Aprendercomo
como reutilizar
reutilizar algoritmos
algoritmos
7.
7. Aprender
Aprendercomo
comoaplicar
aplicar algoritmos
algoritmosbastante
bastante conhecidos.
conhecidos.
© Jorge Figueiredo, DSC/UFCG
•• Ajudar
Ajudaraaentender
entenderferramentas
ferramentasque
queutilizam
utilizam algoritmos
algoritmos
particulares.
particulares.
–– Por
Porexemplo,
exemplo,ferramentas
ferramentasde
decompressão
compressãode
de dados.
dados.
•• Útil
Útil conhecer
conhecer as
astécnicas
técnicasde
dealgoritmos
algoritmos empregadas
empregadas para
para
resolver
resolverdeterminadas
determinadasclasses
classesde
deproblemas.
problemas.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
6
Agenda
Análise e Técnicas de Algoritmos
Jorge Figueiredo
••
••
••
••
Indução
Indução Matemática
Matemática
Corretude
Corretudede
deAlgoritmos
AlgoritmosRecursivos
Recursivos
Invariante
Invariantede
deLaços
Laços
Corretude
Corretudede
deAlgoritmos
AlgoritmosNão-Recursivos
Não-Recursivos
Corretude
Corretudede
deAlgoritmos
Algoritmos
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Indução Matemática
Formato da Prova por Indução
•• Técnica
Técnica de
deprova
provapoderosa
poderosaeecomumente
comumenteusada
usadaem
em Ciência
Ciência
da
da Computação.
Computação.
•• Axioma
Axioma da
daIndução:
Indução:
–– Suponha
Suponhaque:
que:
•• P(0)
P(0)éétrue
true
•• ∀m
∀m ∈∈N,
N,P(m)
P(m) →
→P(m+1)
P(m+1)
–– Então:
Então:
•• ∀n
∀n ∈∈N,
N,P(n)
P(n)éé true
true
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
•• O
Otexto
textode
deuma
umaprova
provapor
por indução
induçãoconsiste
consistede
detrês
trêspartes:
partes:
•• Especificação
Especificaçãoda
da hipótese
hipóteseda
da indução:
indução:
•• P(n)
P(n)
•• O
O caso
casobase:
base:
•• P(0)
P(0)
•• O
Opasso
passo indutivo:
indutivo:
•• ∀m
∀m ∈∈ N,
N, P(m)
P(m)→
→P(m+1)
P(m+1)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo: Identidade de Gauss
Variações
•• Queremos
Queremosprovar
provarque:
que:11++22++…
…++nn==n.(n
n.(n+1)/2
+1)/2
•• Hipótese
Hipóteseda
daIndução
Indução (H.I.):
(H.I.):
–– AA própria
própria identidade
identidade
•• Variação
Variação11
–– Caso
Casobase:
base:nn==11
–– Provar
Provarque
quepara
para∀n
∀n≥≥2,
2,se
seaapropriedade
propriedadeééválida
válidapara
paran-1,
n-1,
ela
ela ééválida
válidapara
paran.
n.
•• Variação
Variação22
–– Vários
Várioscasos
casosbase:
base:nn==1,
1,22ee33
–– Provar
Provarque
quepara
para∀n
∀n≥≥4,
4,se
seaapropriedade
propriedadeééválida
válidapara
paran,
n,
ela
ela ééválida
válidapara
paran+1.
n+1.
•• Variação
Variação33 (indução
(indução forte)
forte)
–– Caso
Casobase:
base:nn==11
–– Provar
Provarque
quepara
para∀n
∀n≥≥2,
2,se
seaapropriedade
propriedadeééválida
válidapara
para
∀1≤m≤n,
∀1≤m≤n,ela
elaéé válida
válidapara
paran+1.
n+1.
–– I(n)
I(n) ==n.(n
n.(n ++1)/2
1)/2
•• Caso
Casobase:
base:
–– nn ==11
–– I(1)
I(1) ==11 ==1.(1
1.(1++1)/2
1)/2 ==11
•• Passo
Passo indutivo:
indutivo:
–– Provar
Provarque
queI(n
I(n++1)
1)== (n
(n++1).(n
1).(n++2)/2
2)/2
–– Utilizar
Utilizar aa H.I.
H.I.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
1
Árvore Binária Completa
Triomino
•• Provar
Provarque
queuma
umaárvore
árvorebinária
bináriacompleta
completacom
comkkníveis
níveistem
tem
k
exatamente
exatamente22k ––11nós.
nós.
•• Prova:
Prova:
–– Caso
Casobase:
base:k=1.
k=1.Ok,
Ok,pois
poisnesse
nessecaso
casotem
temum
umúnico
úniconó.
nó.
k
–– H.I.:
H.I.: S(k)
S(k)==22k ––11nós.
nós.
k+1
–– Mostrar
Mostrarque
queS(k+1)=
S(k+1)= 22k+1–– 11nós.
nós.
•• Sabe-se
Sabe-seque
queS(K+1)
S(K+1) ==2.S(k)
2.S(k)++11
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Corretude de Algoritmos Recursivos
••
••
••
Provar
Provarusando
usando indução.
indução.
Caso
Casobase
baseééoo caso
caso base
baseda
da recursão.
recursão.
Assumir
Assumirque
queas
as chamadas
chamadas recursivas
recursivasestão
estãocorretas,
corretas,eeusar
usar
esse
esseargumento
argumentopara
para provar
provarque
que aaexecução
execução corrente
correnteéé
correta
correta (passo
(passoindutivo).
indutivo).
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
••
••
••
n
Tabuleiro
Tabuleiro mxm,
mxm,em
em que
que m
méépotência
potênciade
de2,
2,ou
ou seja,
seja,m
m==22n..
Uma
das
células
do
tabuleiro
é
a
célula
especial.
Uma das células do tabuleiro é a célula especial.
Uma
Uma L-peça
L-peçaéésemelhante
semelhanteaaum
umtabuleiro
tabuleiro 2x2,
2x2,eliminando-se
eliminando-se
uma
umadas
dascélulas.
células.
•• ÉÉ possível
possívelcobrir
cobrir com
com L-peças
L-peçastodo
todoootabuleiro,
tabuleiro,com
com
exceçãoda
exceçãodacélula
célulaespecial?
especial?
Corretude de Fibonnaci Recursivo
FF00== 0,
+ F n-2
0, FF11==1,
1, ∀∀n≥2,
n≥2, FFnn==FFn-1
n-1 + Fn-2
Fib(n)
if n≤1 then
return n
else
return Fib(n – 1) + Fib(n – 2)
Maximo(n)
if n≤1 then
return A[1]
else
return max(Maximo(n – 1), A[n])
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Invariante de Laço
Corretude de Algoritmo Recursivo
Encontrar
Encontrar oo maior
maiorvalor
valor em
emum
umarray
arrayAA de
dennelementos.
elementos.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• Conceito
Conceito importante
importante que
quepode
podenos
nosajudar
ajudaraaanalisar
analisar
programas.
programas.
•• Pode
Podeser
serdefinido
definidocomo
comouma
umarelação
relaçãoentre
entreas
asvariáveis
variáveisde
deum
um
algoritmo
algoritmo(programa)
(programa) que
queééverdadeira
verdadeira nas
nas seguintes
seguintes
condições:
condições:
–– Antes
Antesdo
doinício
iníciodo
dolaço
laço
–– Durante
Duranteaa manutenção
manutençãodo
dolaço.
laço.
–– Na
Na saída
saídado
dolaço.
laço.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
2
Exemplo de Invariante de Laço
Ainda sobre Laços
Algoritmo
Algoritmoque
quecalcula
calcula aasoma
somade
detodos
todos os
oselementos
elementosde
deum
um array
array
Soma(A[])
s←0
i←1
while i ≤ A.length do
s ← s + A[i]
i←i+1
return s
∀j≥0, ij = j +1, sj = A[1] +…+ A[j]
Soma(A[])
s←0
i←1
while i ≤ A.length do
s ← s + A[i]
i←i+1
return s
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Ainda sobre Laços
© Jorge Figueiredo, DSC/UFCG
Exemplo: Derivando Laços a partir de Invariante
Considerar
Considerar aadefinição
definiçãoda
dadivisão
divisãode
deinteiros
inteirosque
querelaciona
relacionaas
as
saídas
saídasqq(quociente)
(quociente)eerr(resto)
(resto)às
àsentradas
entradasnn(número)
(número)eedd
(divisor).
(divisor). Por
Pordefinição:
definição: rr << dd ee nn == qq××dd ++r.r.
•• AA definição
definiçãoda
da divisão
divisãocorresponde
correspondeaapós-condição
pós-condiçãodo
do laço:
laço:
–– ¬G
¬G éérr <<ddeeInvariante
Invarianteéénn==qq××dd++ r.r.
–– G
Géé rr≥≥d.
d.
Análise e Técnicas de Algoritmos – 2007.1
Análise e Técnicas de Algoritmos – 2007.1
Guarda: i ≤ A.length
Variante: A.length – i + 1
© Jorge Figueiredo, DSC/UFCG
Derivando Laços a partir de Invariante
•• Um
Um laço
laçoestá
estácorreto
correto se
se as
as seguintes
seguintes55condições
condições são
são
satisfeitas:
satisfeitas:
1.
1. Início:
Início:invariante
invarianteééverdadeiro
verdadeiroantes
antesde
de entrar
entrar no
no laço.
laço.
2.
2. Invariância:
Invariância:oo corpo
corpo do
do laço
laçopreserva
preservaoo invariante.
invariante.
3.
3. Progresso:
Progresso:oo corpo
corpodo
dolaço
laço diminui
diminui aavariante.
variante.
4.
4. Limitação:
Limitação:quando
quandoaa variante
varianteatinge
atingecerto
certovalor,
valor,aaguarda
guarda
se
setorna
tornafalsa.
falsa.
5.
5. Saída:
Saída:aanegação
negaçãoda
da guarda
guardaeeoo invariante
invariantedescrevem
descrevemoo
objetivo
objetivodo
dolaço.
laço.
Análise e Técnicas de Algoritmos – 2007.1
•• Dois
Dois elementos:
elementos:
–– Guarda:
Guarda:expressão
expressãobooleana
booleanaque
que indica
indica se
se oocorpo
corpodo
do laço
laço
deve
deveou
ounão
não ser
ser executado.
executado.
–– Variante:
Variante:expressão
expressão numérica
numéricaque
que mede
medeooquanto
quantode
de
execução
execuçãoainda
aindafalta.
falta.
© Jorge Figueiredo, DSC/UFCG
PRE
►invariante verdadeiro
while G do
►invariante verdadeiro
C
►invariante verdadeiro
►¬G e invariante verdadeiro
POS
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Exemplo: Derivando Laços a partir de Invariante
PRE
►n=q×d+r
while r≥d do
►n=q×d+r
C
►n=q×d+r
►¬(r≥d) e n = q × d + r
POS
Análise e Técnicas de Algoritmos – 2007.1
r←n
q←0
►n=q×d+r
while r≥d do
►n=q×d+r
r←r–d
q←q+1
►n=q×d+r
►¬(r≥d) e n = q × d + r
return q
© Jorge Figueiredo, DSC/UFCG
3
Corretude de Algoritmos Não Recursivos
•• Analisar
Analisarum
um laço
laçopor
porvez,
vez,começando
começandopelo
pelomais
maisinterno
internose
se
houver
houveraninhamento
aninhamento de
de laços.
laços.
•• Para
Paracada
cadalaço
laço determinar
determinar um
uminvariante
invariantede
de laço.
laço.
•• Provar
Provarque
queoo invariante
invariantede
delaço
laçoééválido.
válido.
•• Mostrar
Mostrarque
queooalgoritmo
algoritmotermina.
termina.
•• Usar
Usar ooinvariante
invariante de
de laço
laçopara
paraprovar
provarque
queooalgoritmo
algoritmo retorna
retornaoo
valor
valor desejado.
desejado.
•• Restringir
Restringiraaalgoritmos
algoritmos com
comum
um laço:
laço:
–– O
O valor
valordo
doidentificador
identificadorxxapós
apósaa i-ésima
i-ésima iteração
iteraçãode
deum
um
laço
laçoéé xxi i(i=0
(i=0 indica
indicaoovalor
valorde
dexx imediatamente
imediatamenteantes
antesde
de
iniciar
iniciar oo laço).
laço).
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Corretude de Fibonnaci Não Recursivo
Fatos
Fatossobre
sobreoo algoritmo
algoritmo
Corretude de Fibonnaci Não Recursivo
FF00== 0,
+ F n-2
0, FF11==1,
1, ∀∀n≥2,
n≥2, FFnn==FFn-1
n-1 + Fn-2
Fib(n)
if n = 0 then
return 0
else
a=0
b=1
i=2
while i ≤ n do
c=a+b
a=b
b=c
i=i+1
return b
Corretude de Fibonnaci Não Recursivo
Invariante
Invariantede
delaço
laço
Fib(n)
if n = 0 then
return 0
else
a=0
b=1
i=2
while i ≤ n do
c=a+b
a=b
b=c
i=i+1
return b
i0 = 2
ij+1 = ij + 1
a0 = 0
aj+1 = bj
b0 = 1
bj+1 = cj+1
cj+1 = aj + bj
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Fib(n)
if n = 0 then
return 0
else
a=0
b=1
i=2
while i ≤ n do
c=a+b
a=b
b=c
i=i+1
return b
Mostrar
Mostrarque
quetermina
termina ee retorna
retornaoo valor
valorcorreto
correto (b
(b ==FFnn))
Análise e Técnicas de Algoritmos – 2007.1
∀j≥0, ij = j +2, aj = Fj e bj = Fj+1
Prova por indução
Caso base: j = 0
Hipótese da Indução:
próprio invariante
Prova p/ j+1:
usando os fatos e a H.I.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Corretude de Fibonnaci Não Recursivo
Fib(n)
if n = 0 then
return 0
else
a=0
b=1
i=2
while i ≤ n do
c=a+b
a=b
b=c
i=i+1
return b
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exercício
n
Mostrar
Mostrarque
queooalgoritmo
algoritmo abaixo
abaixo computa
computa xxn..
Prova
para n = 0, OK.
Como ij+1 = ij + 1,
eventualmente i = n+1
-Assumir que ocorre depois
de t iterações: it = n+1
-i = t + 2, logo: t = n – 1
t
-Pelo invariante, b = F
t
t+1.
-Logo: b = F
t
n
-
© Jorge Figueiredo, DSC/UFCG
Potencia(x, n)
p←1
i←0
while i < n do
p ← p.x
i←i+1
return p
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
4
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.1
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.1
•• ÉÉ 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.1
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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© 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.1
© 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.1
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.1
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.1
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.1
50
Análise e Técnicas de Algoritmos – 2007.1
© 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.1
© 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.1
•• 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.1
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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© 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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
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.1
© 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.1
© 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.1
••
••
••
••
••
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.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Exercício
Qual
Qual aacomplexidade
complexidadedo
doalgoritmo
algoritmoabaixo?
abaixo?
Potencia(x, n)
p←1
i←0
while i < n do
p ← p.x
i←i+1
return p
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
5
Agenda
Análise e Técnicas de Algoritmos
Jorge Figueiredo
•• 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
Análisede
deAlgoritmos
Algoritmos Recursivos
Recursivos
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Introdução
Introdução
•• 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
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
Cortes: 1
Pedaços: 2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Introdução
Introdução
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
Cortes: 1
Pedaços: 2
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• Exemplo
Exemplo2:
2:Quantos
Quantos pedaços
pedaçoscom
comnncortes?
cortes?
Cortes: 2
Pedaços: 4
Cortes: 1
Pedaços: 2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Cortes: 2
Pedaços: 4
Cortes: 3
Pedaços: 7
Cortes: 4
Pedaços: 11
© Jorge Figueiredo, DSC/UFCG
1
Introdução
Derivando Relações de Recorrências
•• ÉÉ 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
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Derivando Relações de Recorrências
•• 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.1
© Jorge Figueiredo, DSC/UFCG
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
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
múltiplos.
Vamos
considerar
esse
valor
como
n
.
valores múltiplos. Vamos considerar esse valor como n00.
•• 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.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
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.1
© 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.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
2
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
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
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)
=
2.T(n/2)
+
n
,
para
T(n) = 2.T(n/2) + n , 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)
•• 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.
3. Provar
ProvarT(n)
T(n)
2
Se
Seaaprova
provafor
forconfirmada,
confirmada,T(n)
T(n)ééO(n
O(n2))
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
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.1
Método do Chute e Prova por Indução
Método da Árvore de Recursão
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Método da Árvore de Recursão
•• Resolver
ResolverT(n)
T(n)== 2.T(n/2)
2.T(n/2)++nn
T(n)
n
T(n/2)
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
T(n/2)
© Jorge Figueiredo, DSC/UFCG
3
Método da Árvore de Recursão
Método da Árvore de Recursão
n
n
n/2
T(n/4)
n/2
T(n/4) T(n/4)
n/2
T(n/4)
n/4
n/2
n/4
n/4
n/4
T(1)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Método da Árvore de Recursão
Método da Árvore de Recursão
n
n
n
n/2
n/2
n/2
h = log n
n/2
h = log n
n/4
n/4
n/4
n/4
n/4
1
n/4
n/4
n/4
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Método da Árvore de Recursão
Método da Árvore de Recursão
n
n
n/2
2.n/2= n
n/2
h = log n
n
n
n/2
2.n/2= n
n/2
h = log n
n/4
n/4
n/4
n/4
n/4
1
Análise e Técnicas de Algoritmos – 2007.1
n/4
n/4
n/4
4.n/4= n
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
4
Método da Árvore de Recursão
n
n
n/2
1
n/4
n/4
n/4
n folhas
4.n/4= n
n.1= n
n
n
2.n/2= n
n/2
h = log n
n/4
Método da Árvore de Recursão
n/2
2.n/2= n
n/2
h = log n
n/4
1
n/4
n/4
n/4
n folhas
4.n/4= n
n.1= n
(log n).n
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Método do Desdobramento
Método do Desdobramento – Exemplo 1
•• 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.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
•• Solução
Soluçãopara
paraooproblema
problemada
dapizza:
pizza:
–– T(1)
T(1)==22
–– T(n)
=
T(n
–
1)
+
n
,
para
n≥2
T(n) = T(n – 1) + n , para 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)
=
1
+
n.(n-1)/2
T(n) = 1 + 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.1
Método do Desdobramento – Exemplo 2
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Método Master
•• 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).).
a
log ab
2.
2. Se
Sef(n)
f(n)∈∈ Θ(n
Θ(nlog b),), temos
temosque:
que:
logaab
•• T(n)
∈
Θ(n
T(n) ∈ Θ(nlog b.log
.logn).
n).
logaab + ε
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.1
© Jorge Figueiredo, DSC/UFCG
5
Método Master – Exemplo 1
Método Master – Exemplo 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.1
•• 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))
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
6
Agenda
Análise e Técnicas de Algoritmos
Jorge Figueiredo
•• Ordenação
Ordenaçãobaseada
baseada em
emcomparação
comparação
–– Insertion
InsertionSort
Sort
–– Mergesort
Mergesort
–– Quicksort
Quicksort
•• Ordenação
Ordenaçãoem
emtempo
tempo linear
linear
Análise
Análisede
deAlgoritmos
Algoritmosde
deOrdenação
Ordenação
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Problema da Ordenação
Estratégia de Ordenação
Formalmente
Formalmentepode
podeassim
assim ser
serdefinido:
definido:
Ordenação
Entrada: Uma seqüência de n números ‹a1, a2, ..., an›.
Saída: Uma reordenação da seqûëncia de entrada ‹a'1, a'2, ..., a'n›,
onde a'1 ≤ a'2 ≤ ... ≤ a'n.
Em geral, consideramos a seqüência de entrada como um array de
n elementos.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• Alguns
Algunsalgoritmos
algoritmosclássicos
clássicosde
de ordenação
ordenaçãoutilizam
utilizam divisão-edivisão-econquista:
conquista:
–– Quebra
Quebraaaentrada
entradaoriginal
original em
emduas
duaspartes.
partes.
–– Recursivamente
Recursivamenteordena
ordena cada
cadauma
umadas
das partes.
partes.
–– Combina
Combinaas
asduas
duaspartes
partesordenadas.
ordenadas.
•• Duas
Duascategorias
categoriasde
desoluções:
soluções:
–– Quebra
Quebrasimples,
simples, combinação
combinaçãodifícil.
difícil.
–– Quebra
Quebradifícil,
difícil, combinação
combinaçãosimples.
simples.
j
Análise do Insertion Sort
n
A:
ORDENADO
chave
InsertionSort(A, n)
for j← 2 to n do
chave ← A[j]
► insere A[j] na parte ordenada A[1..j-1]
i←j–1
while i > 0 e A[i] > chave do
A[i + 1] ← A[i]
i←i–1
A[i + 1] ← chave
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Insertion Sort
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
•• Pior
Pior caso:
caso:
–– Entrada
Entrada em
emordem
ordemreversa.
reversa.
2
–– O(n
O(n2))
•• Caso
Caso médio:
médio:
2
–– O(n
O(n2))
•• Melhor
Melhor caso:
caso:
–– Entrada
Entrada ordenada.
ordenada.
–– O(n)
O(n)
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
1
MergeSort
Análise do MergeSort
•• Partição
Partiçãosimples.
simples.
•• Combinação
Combinaçãomais
maistrabalhosa.
trabalhosa.
3
72
1
5
47 34 20 10
9
23
34 20 10
9
•• Requer
Requer resolução
resoluçãode
de recorrência.
recorrência.
•• Melhor
Melhor caso
caso==Caso
Caso médio
médio==Pior
Pior caso.
caso.
–– O(n.logn)
O(n.logn)
simples
quebra
3
72
1
5
47
1
3
5
47 72
23
ordena
9
10 20 23 34
combina
1
3
5
9
MergeSort(A, inicio, fim)
if inicio < fim then
meio ← (inicio + fim) div 2
MergeSort(A, inicio, meio)
MergeSort(A, meio + 1, fim)
Intercala(A, inicio, meio, fim)
difícil
10 20 23 34 47 72
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
QuickSort
QuickSort
•• Proposto
Propostopor
por C.A.R.
C.A.R. Hoare
Hoareem
em1962.
1962.
•• Como
Comooo MergeSort,
MergeSort, utiliza
utiliza uma
umaestratégia
estratégia de
dedivisão-edivisão-econquista.
conquista.
•• AA parte
parte mais
mais complicada
complicadaééaaquebra.
quebra.
•• AA combinação
combinação éésimples.
simples.
•• Ao
Aocontrário
contráriodo
doMergeSort,
MergeSort,ordena
ordena in
inplace.
place.
•• Ponto
Pontochave
chaveééencontrar
encontrar uma
umaestratégia
estratégia de
departicionamento
particionamento
eficiente.
eficiente.
•• Divisão:
Divisão:escolher
escolherum
umpivô.
pivô.Dividir
Dividirooarray
arrayem
emduas
duaspartes
partesem
em
torno
torno do
do pivô.
pivô.
•• Conquista:
Conquista: Recursivamente
Recursivamenteordenar
ordenar os
os dois
dois sub-arrays.
sub-arrays.
•• Combinação:
Combinação:Trivial.
Trivial.
≤≤pp
pp
>>pp
pivô
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Escolha do Pivô
QuickSort
3
72
1
5
47 34 20 10
9
23
difícil
quebra
3
20
1
5
10
9
23
1
3
5
9
10 20 23
47 34 72
ordena
34 47 72
combina
1
3
Análise e Técnicas de Algoritmos – 2007.1
5
9
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• Particionamento
Particionamentopode
podeser
serfeito
feitode
dediferentes
diferentesformas.
formas.
•• AA principal
principaldecisão
decisãoéé escolher
escolher oopivô.
pivô.
–– Primeiro
Primeiro elemento
elementodo
doarray.
array.
–– Último
Último elemento
elementodo
do array.
array.
–– Elemento
Elementomédio
médiodo
doarray.
array.
–– Elemento
Elementoque
quemais
maisocorre
ocorre no
noarray.
array.
–– Elemento
Elementomais
maispróximo
próximo da
da média
médiaaritmética
aritméticados
doselementos
elementos
do
doarray.
array.
simples
10 20 23 34 47 72
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
2
Rotina de Particionamento
Exemplo de Particionamento
•• Em
Emnossa
nossarotina,
rotina,oopivô
pivôééooúltimo
últimoelemento.
elemento.
Particiona(A, L, R)
p ← A[R]
i←R
for j ← R – 1 downto L do
if A[j] > p then
i←i–1
swap A[i] ↔ A[j]
swap A[R] ↔ A[i]
return i
3
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
72
72
1
5
47 34 20 10
9
j
3
© Jorge Figueiredo, DSC/UFCG
72
72
Análise e Técnicas de Algoritmos – 2007.1
1
5
47 34 20 10
j ←
9
9
23
© Jorge Figueiredo, DSC/UFCG
1
5
47 34 20 10 9
j ←
23
i
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
3
47 34 20 10
Exemplo de Particionamento
23
i
Análise e Técnicas de Algoritmos – 2007.1
5
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
3
1
Exemplo de Particionamento
23
i
3
© Jorge Figueiredo, DSC/UFCG
72
Análise e Técnicas de Algoritmos – 2007.1
1
5
47 34 20 10
j ←
9
23
i
© Jorge Figueiredo, DSC/UFCG
3
Exemplo de Particionamento
3
72
1
5
47 34 20 10
j
9
Exemplo de Particionamento
23
i
3
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
72
72
1
5
47 34 20 10
3
72
1
5
47 9
j ←
9
47 34 20 10
j
Exemplo de Particionamento
23
3
72
1
5
47 34 20 10
3
72
1
5
47
j
© Jorge Figueiredo, DSC/UFCG
72
1
5
47 34 20 10
3
72
1
5
47
3
72
1
5 10
j ←
9
9
9
23
20 10 34 23
i ←
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
3
9 23
i ←
© Jorge Figueiredo, DSC/UFCG
20 10 34 23
i
Análise e Técnicas de Algoritmos – 2007.1
Análise e Técnicas de Algoritmos – 2007.1
5
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
3
1
Exemplo de Particionamento
23
3
72
1
5
47 34 20 10
9
20 10 34 23
3
72
1
5
47
9
20 10 34 23
9
20 47 34 23
i
3
72
1 5
j ←
10
9
20 47 34 23
i
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
9
23
© Jorge Figueiredo, DSC/UFCG
4
Exemplo de Particionamento
3
72
1
5
47 34 20 10
3
72
1
5
47
3
72 1
j ←
5
10
9
Exemplo de Particionamento
23
3
72
1
5
47 34 20 10
9
20 10 34 23
3
72
1
5
47
9
20 10 34 23
9
20 47 34 23
i
3
72
j
1
5
10
9
20 47 34 23
i ←
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
23
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
9
9
Exemplo de Particionamento
3
72
1
5
47 34 20 10
23
3
72
1
5
47 34 20 10
3
72
1
5
47
9
20 10 34 23
3
72
1
5
47
9
20 10 34 23
3
72
j
1
5
10
9
20 47 34 23
i ←
3
72
1
5
10
9
20 47 34 23
3 20
j ←
1
5
10
9
72 47 34 23
i
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
72
1
5
47 34 20 10
3
72
1
5
47
3
72
1
5
10
3
j
20
1
5
10
Análise e Técnicas de Algoritmos – 2007.1
9
23
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Exemplo de Particionamento
3
9
Exemplo de Particionamento
23
3
72
1
5
47 34 20 10
9
20 10 34 23
3
72
1
5
47
9
20 10 34 23
9
20 47 34 23
3
72
1
5
10
9
20 47 34 23
9
72 47 34 23
i
3
20
1
5
10
9
72 47 34 23
3
20
1
5
10
9
23 47 34 72
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
9
23
© Jorge Figueiredo, DSC/UFCG
5
QuickSort - Algoritmo
Análise do QuickSort
•• Requer
Requer aaresolução
resolução de
deuma
umarelação
relaçãode
de recorrência.
recorrência.
•• Como
Comonem
nemsempre
sempreos
osdados
dadossão
sãodivididos
divididosem
em duas
duas metades
metades
de
de mesmo
mesmotamanho:
tamanho:
–– Melhor
Melhorcaso,
caso,pior
piorcaso
casoeecaso
caso médio
médiopodem
podem variar.
variar.
•• Vamos
Vamos assumir:
assumir:
–– Tempo
Tempo de
departição
partiçãoééO(n).
O(n).
–– AA posição
posiçãofinal
finaldo
dopivô
pivôéé i.i.
•• AA chamada
chamadainicial
inicial ééQuickSort(A,
QuickSort(A,1,
1,n)
n)
QuickSort(A, inicio, fim)
if inicio < fim then
meio ← particiona(A, inicio, fim)
QuickSort(A, inicio, meio - 1)
QuickSort(A, meio + 1, fim)
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Análise do QuickSort
T(n) = 1
T(n) = T(n - i) + T(i – 1) + n
Análise do QuickSort
n=1
nos demais casos
•• Melhor
Melhorcaso:
caso:
–– Pivô
Pivôsempre
semprefica
ficano
nomeio.
meio.
–– T(n)
T(n)==2T(n/2)
2T(n/2)++nn
–– O(n.log
O(n.logn)
n)
T(n) = 1
T(n) = T(n - i) + T(i – 1) + n
n=1
nos demais casos
•• Pior
Piorcaso:
caso:
–– Pivô
Pivôsempre
semprefica
ficana
naprimeira
primeiraou
ouúltima
últimaposição.
posição.
–– T(n)
T(n)==T(n
T(n--1)
1)++nn
2
–– O(n
O(n2))
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Análise do QuickSort
T(n) = 1
T(n) = T(n - i) + T(i – 1) + n
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Ainda sobre QuickSort
n=1
nos demais casos
•• ÉÉ talvez
talvez oo algoritmo
algoritmo de
de ordenação
ordenação mais
mais usado.
usado.
•• ÉÉ fácil
fácil de
de implementar
implementar ee muito
muito rápido
rápido na
na prática.
prática.
•• ÉÉ tipicamente
tipicamente mais
mais do
do que
que duas
duas vezes
vezes mais
mais rápido
rápido
do
do que
que oo MergeSort.
MergeSort.
•• Caso
Casomédio:
médio:
–– Pivô
Pivôtem
temaamesma
mesmaprobabilidade
probabilidade1/n
1/nde
decair
cairem
emuma
umadas
dasnnposições.
posições.
–– TTa(n)
(n)==nn++1/n
1/n∑(
∑(TTaa(i(i--1)
1)++TTaa(n
(n--i))
i))
a
–– O(n.log
O(n.logn)
n)
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
6
Exercício 1
Exercício 2
•• Definir
Definir um
umQuicksort
Quicksort diferente,
diferente,onde
ondeoopivô
pivôééoo primeiro
primeiro
elemento
elementodo
doarray.
array.
–– Escreva
Escreva,, em
empseudo-código,
pseudo-código,um
um procedimento
procedimentoque
que
efetua
efetuaaapartição
partiçãodo
do array
arraypara
paraeste
estenovo
novoQuicksort.
Quicksort.
–– Ilustre
Ilustreaaoperação
operaçãode
departição,
partição, considerando
considerandoooarray
array
A=[13,
A=[13,19,
19,9,
9,5,
5,12,
12,8,
8,7,
7,4,
4,11,
11,2].
2].
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• Um
Um problema
problema que
que está
está relacionado
relacionado com
com oo problema
problema
de
de ordenação
ordenação éé oo de
de encontrar
encontrar oo k-ésimo
k-ésimo menor
menor
elemento
elemento de
de uma
uma lista
lista não
não ordenada.
ordenada.
–– Escreva
um
algoritmo
Escreva um algoritmo que
que encontra
encontra oo k-ésimo
k-ésimo
menor
menor elemento.
elemento. Esse
Esse algoritmo
algoritmo deve
deve ser
ser Θ(n)
Θ(n)
na
na média
média ee no
no melhor
melhor caso.
caso.
Ordenação por Comparação
Ordenação por Comparação
•• Todos
Todos os
os algoritmos
algoritmos de
de ordenação
ordenação que
que estudamos
estudamos
até
até agora
agora utilizam
utilizam comparação
comparação de
de elementos.
elementos.
•• Em
Em uma
uma ordenação
ordenação por
por comparação,
comparação, aa ordem
ordem
relativa
em uma
uma seqüência
seqüência
relativa de
de dois
dois elementos
elementos aai i ee aaj j em
éé obtida
obtida utilizando
utilizando testes
testes de
de comparação:
comparação:
–– aai << aaj,, aai ≤≤ aaj,, aai == aaj,, aai >> aaj ee aai ≥≥ aaj..
i
j
i
j
i
j
i
j
i
j
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• O
O melhor
melhor algoritmo
algoritmo que
que vimos
vimos para
para ordenação
ordenação éé
O(n.log
O(n.log n).
n).
•• ÉÉ possível
possível encontrar
encontrar uma
uma melhor
melhor solução?
solução?
•• Árvore
Árvore de
de decisão
decisão pode
pode nos
nos ajudar
ajudar aa desvendar
desvendar
isso.
isso.
•• ÉÉ possível
possível usar
usar uma
uma árvore
árvore de
de decisão
decisão para
para
visualizar
visualizar ordenação
ordenação por
por comparação.
comparação.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
Árvore de Decisão
Sort(<15, 4, 8>)
a1:a2
a2:a3
≤
a1:a3
≤
<1, 3, 2>
Análise e Técnicas de Algoritmos – 2007.1
a2:a3
>
≤
≤
a2:a3
<2, 1, 3>
>
15 > 4
≤
a1:a3
>
<1, 2, 3>
a1:a2
>
≤
≤
<3, 1, 2> <2, 3, 1>
<1, 2, 3>
a1:a3
>
<3, 2, 1>
© Jorge Figueiredo, DSC/UFCG
a1:a3
>
≤
<1, 3, 2>
Análise e Técnicas de Algoritmos – 2007.1
>
≤
a2:a3
<2, 1, 3>
>
≤
<3, 1, 2> <2, 3, 1>
>
<3, 2, 1>
© Jorge Figueiredo, DSC/UFCG
7
Sort(<15, 4, 8>)
Sort(<15, 4, 8>)
a1:a2
a1:a2
>
≤
a2:a3
a1:a3
≤
>
<1, 2, 3>
a1:a3
>
<3, 1, 2> <2, 3, 1>
<1, 3, 2>
>
<1, 2, 3>
≤
>
<3, 2, 1>
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
≤
>
a2:a3
a1:a3
>
<1, 2, 3>
a1:a3
≤
<1, 3, 2>
>
≤
a2:a3
<2, 1, 3>
>
≤
<3, 1, 2> <2, 3, 1>
>
Árvore de decisão
<3, 1, 2> <2, 3, 1>
>
<3, 2, 1>
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
•• As
As folhas
folhas de
de de
de uma
uma árvore
árvore de
de decisão
decisão indicam
indicam uma
uma
possível
possível ordenação
ordenação para
para os
os elementos.
elementos.
–– O
O número
número de
de permutações
permutações possível
possível éé n!.
n!.
•• Para
Para definir
definir um
um limite
limite inferior:
inferior:
d
–– Uma
folhas, onde
onde
Uma árvore
árvore binária
binária tem
tem no
no máximo
máximo 22d folhas,
dd éé aa sua
profundidade.
sua profundidade.
–– Uma
Uma árvore
árvore binária
binária com
com LL folhas
folhas tem
tem profundidade
profundidade
de
de pelo
pelo menos
menos ‪ ‪ log
log LL ‫ ‫ ‫‬..
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
Ordenação em Tempo Linear
•• O
O caminho
caminho mais
mais longo
longo da
da raiz
raiz de
de uma
uma árvore
árvore de
de
decisão
decisão para
para qualquer
qualquer uma
uma de
de suas
suas folhas
folhas representa
representa
oo pior
pior caso
caso do
do número
número de
de comparações.
comparações.
•• Para
Para nn elementos,
elementos, temos
temos n!
n! folhas:
folhas:
–– dd == ‪ ‪ log
log n!
n! ‫‫ ‫‬
–– dd ≥≥ log
log n!
n!
–– log
n!
log n! == Ө(n.log
Ө(n.log n)
n)
–– dd == Ω(n.log
Ω(n.log n)
n)
Análise e Técnicas de Algoritmos – 2007.1
4≤8
<3, 2, 1>
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
a2:a3
<2, 1, 3>
Árvore de decisão
a1:a2
≤
>
≤
>
<1, 3, 2>
Sort(<15, 4, 8>) = <4, 8, 15>
≤
a1:a3
≤
a2:a3
<2, 1, 3>
≤
a2:a3
15 > 8
≤
a1:a3
>
≤
© Jorge Figueiredo, DSC/UFCG
•• Nenhuma
Nenhumacomparação
comparaçãoééefetuada.
efetuada.
•• Counting
CountingSort:
Sort:
Counting Sort
Entrada: Um array de n números A = <a1, a2, ..., an›, em que
ai assume valores {1, 2, ..., k}.
Saída: Um array reordenado B = <b1, b2, ..., bn›.
Array auxiliar: Um array C = <c1, c2, ..., ck›
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
8
Counting Sort
Counting Sort - Exemplo
Counting Sort(A, B, k)
for i ← 1 to k do
C[i] ← 0
for j ← 1 to length[A] do
C[A[j]] ← C[A[j]] + 1
for i ←2 to k do
C[i] ← C[i] + C[i - 1]
for j ← length[A] downto 1 do
B[C[A[j]]] ← A[j]
C[A[j]] ← C[A[j]] - 1
A:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
4
5
6
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 2
A:
B:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
C:
1
2
3
4
5
6
0
0
0
0
0
0
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
C:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
2
3
4
5
6
0
0
1
0
0
0
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 2
A:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
B:
C:
Análise e Técnicas de Algoritmos – 2007.1
1
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 2
A:
3
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 1
A:
2
C:
1
2
3
4
5
6
0
0
1
0
0
1
© Jorge Figueiredo, DSC/UFCG
C:
Análise e Técnicas de Algoritmos – 2007.1
1
2
3
4
5
6
0
0
1
1
0
1
© Jorge Figueiredo, DSC/UFCG
9
Exemplo – Laço 2
A:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
Exemplo – Laço 2
A:
B:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
C:
1
2
3
4
5
6
1
0
1
1
0
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
C:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
3
4
5
6
0
2
1
0
1
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 2
A:
B:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
C:
1
2
3
4
5
6
1
0
2
2
0
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
C:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
2
3
4
5
6
2
0
2
2
0
1
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 3
A:
B:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
C:
Análise e Técnicas de Algoritmos – 2007.1
1
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 2
A:
2
1
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 2
A:
1
1
2
3
4
5
6
2
0
2
3
0
1
© Jorge Figueiredo, DSC/UFCG
C:
Análise e Técnicas de Algoritmos – 2007.1
1
2
3
4
5
6
2
0
2
3
0
1
© Jorge Figueiredo, DSC/UFCG
10
Exemplo – Laço 3
A:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
Exemplo – Laço 3
A:
B:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
C:
1
2
3
4
5
6
2
2
2
3
0
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
C:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
3
4
5
6
2
4
3
0
1
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 3
A:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
B:
B:
C:
1
2
3
4
5
6
2
2
4
7
0
1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2007.1
C:
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
Análise e Técnicas de Algoritmos – 2007.1
2
3
4
5
6
2
2
4
7
7
1
© Jorge Figueiredo, DSC/UFCG
Exemplo – Laço 4
A:
B:
B:
C:
1
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 3
A:
2
2
Análise e Técnicas de Algoritmos – 2007.1
Exemplo – Laço 3
A:
1
1
2
3
4
5
6
2
2
4
7
7
8
© Jorge Figueiredo, DSC/UFCG
1
2
3
4
5
6
7
8
3
6
4
1
3
4
1
4
1
2
3
4
5
6
7
8
1
1
3
3
4
4
4
6
C:
Análise e Técnicas de Algoritmos – 2007.1
1
2
3
4
5
6
0
2
2
4
7
7
© Jorge Figueiredo, DSC/UFCG
11
Análise do Counting Sort
•• AA análise
análise éé trivial:
trivial:
–– O
O primeiro
primeiro ee terceiro
terceiro laços
laços correspondem
correspondem aa O(k).
O(k).
–– O
O segundo
segundo ee quarto
quarto laços
laços são
são O(n).
O(n).
–– O
O tempo
tempo total
total é,
é, portanto,
portanto, O(n+k).
O(n+k).
–– Na
Na prática,
prática, kk == O(n).
O(n).
–– Logo,
Logo, oo counting
counting sort
sort éé O(n).
O(n).
•• Counting
Counting Sort
Sort éé estável.
estável.
Análise e Técnicas de Algoritmos – 2007.1
© Jorge Figueiredo, DSC/UFCG
12
Download