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

Propaganda
Agenda
•• Introdução
Introdução Informal
Informal
•• Motivação
Motivação
Análise e Técnicas de Algoritmos
Jorge Figueiredo
Visão
Visão Geral
Geral do
do Curso
Curso
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Introdução Informal
Problemas Computacionais
•• O
O nosso
nosso curso
curso éésobre
sobre técnicas
técnicas ee análise
análise de
de algoritmos
algoritmos
(computacionais).
(computacionais).
•• O
O que
que éé um
um algoritmo?
algoritmo?
–– Procedimento
Procedimento computacional
computacional que
que toma
toma algum
algum valor
valor
(conjunto)
(conjunto) como
como entrada
entrada ee produz
produz um
um valor
valor (conjunto)
(conjunto) como
como
saída.
saída.
•• Qual
Qual aa diferença
diferença entre
entre algoritmos
algoritmos ee programas?
programas?
–– Idéia
Idéia xxtexto
texto descritivo
descritivo
–– humanos
humanos xxcomputadores
computadores
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Problemas Computacionais
Especifica
Especificaaa relação
relação entre
entre aa entrada
entrada ee aa saída
saída desejada
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 – 2005.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
para aa entrada.
entrada.
–– ‹45,
‹45, 7,
7, 13,
13, 23,
23, 2›
2›ééuma
umainstância
instânciapara
para ooproblema
problema da
da
ordenação.
ordenação.
–– 29
29 éé uma
uma instância
instância para
para oo problema
problema dos
dos números
números primos.
primos.
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
•• Utilizar
Utilizar uma
uma linguagem.
linguagem. Qual?
Qual?
–– Linguagem
Linguagem natural
natural (português
(português ou
ou inglês).
inglês).
–– Linguagem
Linguagem de
de programação.
programação.
•• Problemas:
Problemas:
–– Ambiguidade
Ambiguidade
–– Estruturação
Estruturação
–– Prolixidade
Prolixidade
–– Inadequação
Inadequação para
para programação
programação
Análise e Técnicas de Algoritmos – 2005.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 – 2005.1
Insertion Sort
j
1
Exemplo do Insertion Sort
n
45
A:
ORDENADO
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.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 – 2005.1
Exemplo do Insertion Sort
45
Análise e Técnicas de Algoritmos – 2005.1
7
13
23
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Exemplo do Insertion Sort
2
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.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 – 2005.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 – 2005.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Exemplo do Insertion Sort
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.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 – 2005.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
se para
para toda
toda entrada
entrada (legal)
(legal) ele
ele
produz
produz aa saída
saída correta.
correta.
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Avaliação de Algoritmos
Avaliação de Algoritmos
•• Simplicidade:
Simplicidade:
–– Benefícios
Benefícios pragmáticos:
pragmáticos:
•• Fácil
Fácil de
de ser
ser entendido
entendido
•• Fácil
Fácil de
de implementar
implementar
•• Fácil
Fácil de
de manter
manter
Análise e Técnicas de Algoritmos – 2005.1
•• Eficiência
Eficiência (em
(emfunção
função do
do tamanho
tamanho do
do problema/entrada):
problema/entrada):
–– Tempo
Tempo
•• Quanto
Quanto tempo
tempo leva
leva para
para produzir
produzir aa saída
saída correta?
correta?
–– Espaço
Espaço
•• Quanto
Quanto espaço
espaço de
de memória
memória éé necessário?
necessário?
© Jorge Figueiredo, DSC/UFCG
Como provar a corretude de um algoritmo?
•• Não
Não éé uma
uma tarefa
tarefa simples
simples
•• Testes
Testes não
não são
são suficientes:
suficientes:servem
servem apenas
apenas para
para mostrar
mostrar que
que
um
um algoritmo
algoritmo tem
tem erros.
erros.
•• Ferramentas
Ferramentas utilizadas:
utilizadas:
–– Invariantes
Invariantes de
de laço
laço
–– Função
Função recursiva
recursiva
–– Prova
Prova por
por indução
indução
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.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 – 2005.1
© Jorge Figueiredo, DSC/UFCG
4
Corretude do Insertion Sort
Eficiência do Insertion Sort
•• Invariante
Invariante de
de laço:
laço:
No
No início
início de
de cada
cada iteração
iteração do
do laço,
laço, oo subarray
subarrayA[1..j-1]
A[1..j-1]
contém
contém os
os elementos
elementos originais
originais de
de A[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
cada iteração
iteração preserva
preserva oo invariante.
invariante.
Término:
Término: j=n+1,
j=n+1, então
então A[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 – 2005.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 – 2005.1
© Jorge Figueiredo, DSC/UFCG
•• Pior
Pior caso:
caso:
–– Maior
Maior tempo
tempo de
de execução
execução de
de um
um algoritmo
algoritmo para
para qualquer
qualquer
entrada
entrada de
de tamanho
tamanho n.n.
–– ÉÉ ootipo
tipo mais
mais utilizado.
utilizado. Todos
Todos gostam
gostam de
de garantia.
garantia.
•• Caso
Caso médio:
médio:
–– Tempo
Tempo esperado
esperado de
de um
um algoritmo
algoritmo sobre
sobre todas
todas as
as entradas
entradas
de
de tamanho
tamanho n.n.
–– Necessidade
Necessidade de
de usar
usar distribuição
distribuição estatística.
estatística.
•• Melhor
Melhor caso:
caso:
–– Raramente
Raramente éé feita.
feita.
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Eficiência do Insertion Sort (cont.)
•• Como
Como determinar
determinar oo tempo
tempo de
de execuçã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 – 2005.1
Tempo de Execução – Tipos de Análise
•• Para
Para comparar
comparar os
os diferentes
diferentes algoritmos,
algoritmos, de
deforma
forma justa,
justa, éé
necessário
necessário definir
definir um
um modelo
modelo abstrato
abstrato de
de máquina.
máquina.
•• Máquina
Máquina de
de Acesso
Acesso Aleatório:
Aleatório:
–– Um
Um único
único processador
processador genérico.
genérico.
–– Instruções
Instruções executadas
executadas sequencialmente,
sequencialmente, sem
semoperações
operações
concorrentes.
concorrentes.
–– Memória
Memória ilimitada.
ilimitada.
–– Instrução
Instrução básica
básicatoma
toma uma
uma unidade
unidade de
de tempo.
tempo.
Análise e Técnicas de Algoritmos – 2005.1
•• O
O algoritmo
algoritmo éé eficiente?
eficiente?
•• O
O tempo
tempo de
de execução
execução de
de um
um algoritmo
algoritmo depende
depende da
da cara
cara da
da
entrada.
entrada.
•• Na
Na análise
análise do
do tempo
tempo de
de execução,
execução, aa parametrização
parametrização éé
baseada
baseada no
no tamanho
tamanho da
da entrada.
entrada.
•• AA análise
análise do
do tempo
tempo de
de execução,
execução, éé uma
uma forma
forma de
de definir
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, ee linhas
linhas 66 ee 77serão
serão executadas
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
caso:
números
em
ordem
inversa
Pior caso: números em ordem 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 – 2005.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
da ordem
ordem de
de nn2,, mesmo
mesmo que
que no
no pior
pior caso.
caso.
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Ainda Sobre Análise de Algoritmos
•• AA análise
análise de
de algoritmos
algoritmos permite
permite oo estudo
estudo teórico
teórico de
de programas
programas
computacionais:
computacionais:
–– Desempenho.
Desempenho.
–– Utilização
Utilização de
de recursos.
recursos.
–– Corretude.
Corretude.
•• Estudo
Estudo de
de métodos,
métodos, técnicas,
técnicas, idéias,
idéias,dicas
dicas para
para desenvolver
desenvolver
algoritmos
algoritmos (eficientes).
(eficientes).
© Jorge Figueiredo, DSC/UFCG
Análise e Técnicas de Algoritmos – 2005.1
Objetivos do Curso
•• Importância
Importância do
do estudo
estudo ee análise
análise de
de algoritmos:
algoritmos:
–– Ajuda
Ajuda no
no entendimento
entendimentode
de escalabilidade.
escalabilidade.
–– Permite
Permite definir
definir oo que
que éé viável
viável ee oo que
que éé impossível.
impossível.
–– AA matemática
matemática utilizada
utilizada serve
serve como
como uma
uma linguagem
linguagem para
para
lidar
lidar com
com oo comportamento
comportamento de
de um
um programa.
programa.
–– Provê
Provê meios
meios para
para comparar
comparar diferentes
diferentessoluções
soluções de
de um
um
mesmo
mesmo problema.
problema.
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Razões para Estudar Algoritmos
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
Razões para Estudar Algoritmos
•• Evitar
Evitar reinventar
reinventar aa roda:
roda:
–– Existem
Existem bons
bons algoritmos
algoritmos que
que solucionam
solucionam problemas
problemas
importantes.
importantes.
•• Ajudar
Ajudar no
no desenvolvimento
desenvolvimento de
de seus
seus algoritmos:
algoritmos:
–– Nem
Nem sempre
sempre existe
existe um
um algoritmo
algoritmo de
de prateleira
prateleira que
que sirva
sirva
para
para resolver
resolver oo seu
seu problema.
problema.
–– O
O conhecimento
conhecimento de
de algoritmos
algoritmos bem
bemestabelecidos
estabelecidos éé fonte
fonte
de
de inspiração.
inspiração.
–– Muitos
Muitos dos
dos princípios
princípios de
de projetos
projetos de
de algoritmos
algoritmos são
são úteis
úteis
em
em todos
todos os
os problemas
problemas de
de programação.
programação.
Análise e Técnicas de Algoritmos – 2005.1
1.
1. Aprender
Aprender algoritmos
algoritmos clássicos
clássicos
2.
2. Aprender
Aprender como
como identificar/desenvolver
identificar/desenvolver algoritmos
algoritmos corretos
corretos ee
eficientes
eficientes para
para resolver
resolver um
um determinado
determinado
3.
3. Aprender
Aprender como
como expressar
expressar algoritmos
algoritmos
4.
4. Aprender
Aprender como
como validar/verificar
validar/verificar algoritmos
algoritmos
5.
5. Aprender
Aprender como
como analisar
analisar
6.
6. Aprender
Aprender como
como reutilizar
reutilizar algoritmos
algoritmos
7.
7. Aprender
Aprender como
como aplicar
aplicar algoritmos
algoritmos bastante
bastante conhecidos.
conhecidos.
© Jorge Figueiredo, DSC/UFCG
•• Ajudar
Ajudar aa entender
entender ferramentas
ferramentas que
que utilizam
utilizam algoritmos
algoritmos
particulares.
particulares.
–– Por
Por exemplo,
exemplo, ferramentas
ferramentas de
de compressão
compressão de
de dados.
dados.
•• Útil
Útil conhecer
conhecer as
as técnicas
técnicas de
de algoritmos
algoritmos empregadas
empregadas para
para
resolver
resolver determinadas
determinadas classes
classes de
de problemas.
problemas.
Análise e Técnicas de Algoritmos – 2005.1
© Jorge Figueiredo, DSC/UFCG
6
Download