Transcript Slides - Sandra de Amo
Análise de Algoritmos
AULA 1
Profa. Sandra de Amo
Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação
Objetivos Gerais Conceitos Básicos
AULA 1 – Parte I
Profa. Sandra de Amo
Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação
“Problemas” e “Algoritmos”
O que é um problema
Função P: Input ? Output Instância do Problema = I ϵ Input
Exemplos de Problemas
Problema dos Primos
Primos: N {Sim, Não} Instância = número natural Primos (n) = Sim, se n é primo; Não, caso contrário
Problema da Decomposição em primos
Decomposição: N {Seq | Seq = <(p1,n1),...,(pk,nk)>, pi primo} Decomposição (n) = <(p1,n1), ..., (pk,nk)> se n = p 1 n1 p 2 n2 ...p
k nk
Exemplo
: Decomposição (10) = <(2,1), (5,1)>, pois 10 = 2 1 .5
1
“Problemas” e “Algoritmos”
Problema do Circuito Hamiltoniano
Hamilton: Grafos Dirigidos Instância = grafo dirigido G {Sim, Não} Hamilton(G) =
Sim
, se G possui um caminho passando por todos os vértices uma única vez; =
Não
, caso contrário
Problemas de Decisão
: output = {Sim, Não}
“Problemas” e “Algoritmos”
Solução de um Problema
Conjunto
finito
de instruções cuja execução sobre o
input
depois de um tempo finito, produzindo no final o
output
.
termina Algoritmo que resolve o problema Solução de um problema = algoritmo
Algoritmo
: conjunto finito de instruções que transformam uma entrada em uma saída depois de um tempo finito.
Todo
Algoritmo
está associado a um
Problema
Perguntas
Função injetora ??
Conjunto dos Algoritmos Conjunto dos Problemas ??? Não é função injetora: podem existir diferentes algoritmos para resolver um mesmo problema Não é função sobrejetora: Existem problemas que não têm solução
Problema de Correspondência de Post (PCP)
Post:
Dominós {Sim,Não} Instância= um conjunto de tipos de peças de dominós Post(D) = Sim, se existe um pareamento de peças de tipos em D = Não, caso contrário.
O problema PCP
Input = um conjunto finito de tipos de peças de dominós
abc eg b c d ef … 1 2 3 4 n
Pergunta :
É possivel encontrar um pareamento, isto é, uma sequência de peças de tipos dados no input, tal que o string formado na parte de cima e idêntico ao string formado na parte de baixo ?
b c d e f g b c d e f g
Sequência : 3 n 1
Exemplos
1 2 3 4 a b c a a a b c a b c a a a b c
Sequência de peças= 2 1 3 2 4
Exemplo
Input a b c a b 1 c a a 2 a c c b a 3 Resposta ??
Não
Justificativa : a parte de cima das peças é sempre maior que a parte de baixo !
Formalização do Problema
Input genérico do Problema PCP
C = { t1 b1 , t2 b2 , t3 b3 , … , tn bn t1, t2, …, tn são strings sobre um alfabeto S b1, b2, …, bn são strings sobre um alfabeto S } Um
pareamento
(match) = uma sequência
Solução quando existe, não precisa ser única
Problema da Ordenação
Ordena : SeqNat SeqNat Ordena(
Algoritmos que o resolvem:
Insertion-Sort Selection-Sort Bubble-Sort Heap-Sort Merge-Sort Quick-Sort
Eficiência em Tempo cresce
Radix-Sort Bucket-Sort Insertion-Sort Selection-Sort Bubble-Sort Heap-Sort Merge-Sort Quick-Sort Radix-Sort Bucket-Sort
Eficiência em Espaço cresce
O que é um bom algoritmo ?
Correto ?
Eficiente em tempo ?
Eficiente em espaço ?
Soluções Aproximadas às vezes são mais interessantes...
Problema do Vertex Cover
(otimização) Achar o menor subconjunto de vértices S tal que cada aresta tem pelo menos uma d e suas extremidades no conjunto S ?
Problema de Minimização de recursos
•
Encontrar a solução ótima é difícil
• Problema NP-hard • Encontrar solução aproximada é factível Existem algoritmos que encontram soluções aproximadas em tempo polinomial Para cada input G, o algoritmo dá uma solução com custo C(G) tal que: C(G) ≥ α Opt(G)
Soluções Aproximadas nem sempre são facilmente encontráveis
Problema do Caixeiro Viajante
(otimização)
d1 d3 d4 d5
Achar o circuito hamiltoniano mais curto (passando por todas as cidades uma única vez) ?
d2 Problema de Minimização de recursos d6
•
Encontrar a solução ótima é difícil
• Problema NP-hard • Encontrar solução aproximada
não é factível
!
Tipos de Algoritmos
Problema
P
P é decidível (tem solução ?) Qual a complexidade de
P
?
Se P for NP-completo: existem algoritmos aproximados ?
Como projetar um bom algoritmo para
P,
dentro das limitações da complexidade inerente ao problema P ?
Tipos de Algoritmos
: Exatos versus Aproximativos Iterativos versus Recursivos Probabilísticos (ou Randômicos)
O que é um Algoritmo Probabilístico ?
Problema:
Encontrar um elemento
a
em um array A de
n
elementos
Input
: A,
a
,
n
Output
: posição m onde se encontra
a
ou
‘Não’
Algoritmo Exato Begin Para
i = 1, ..., n
faça Se
A[i] = a
End
Retorna i Pára Retorna ‘Não’
Se n é muito grande, algoritmo pode levar muito tempo para dar a resposta .
O que é um Algoritmo Probabilístico ?
Problema:
Encontrar um elemento
a
em um array A de
n
elementos
Input
: A,
a
,
n
Output
: posição m onde se encontra
a
ou
‘Não’
Algoritmo Monte Carlo (não exato) begin
i=1
repeat
Selecione aleatoriamente um número inteiro m em [1,n] Se A[m] = a Retorna m e pára i = i + 1
until
i =
k
Retorna ‘Não’
end
Monte Carlo encontra ‘a’ com Probabilidade (1 – (1/2) k ) Tempo de Execução de Monte Carlo é fixo
Análise de um Algoritmo
O que é analisar um algoritmo ?
Determinar sua eficiência quanto ao tempo de execução quanto à quantidade de memória utilizada para executar o algoritmo
Modelo para a Análise da complexidade
: Modelo RAM (Random Access Machine) Operações executadas em sequência Não há execuções simultâneas
Análise de um Algoritmo
Que operações atômicas considerar no cálculo de custo ?
Operações atômicas = custo constante
Operações aritméticas Soma, subtração, multiplicação, divisão, resto, piso, teto Movimentação de dados: Carregar, armazenar, copiar Controle Desvio condicional e incondicional Chamada e retorno de subrotinas
Exemplo: Problema, Algoritmo, Análise do Algoritmo
Problema: (Ordenação de uma sequência) Input:
sequência de n números A =
Output:
B =
Projeto de um Algoritmo
Algoritmo Insertion-Sort
Insertion-Sort
(A)
Entrada :
A = array [a1,...,an]
1.
2.
3.
4.
5.
6.
7.
For
j 2 to n
do
chave A[j] i j – 1
% Procura lugar anterior onde inserir a chave
While
i > 0 e A[i] > chave
do
A[i+1] A[i] i i - 1 A[i+1] chave
Algoritmo é executado in place :
Espaço necessário = espaço da entrada + espaço das variáveis Chave, j, i Complexidade em Espaço = constante (=3) (não se conta o espaço ocupado pela entrada)
1.
2.
3.
4.
5.
6.
7.
Algoritmo Insertion-Sort
Insertion-Sort
(A)
For
j 2 to n
do
chave A[j] i j – 1
While
i > 0 e A[i] > chave
do
A[i+1] A[i] i i - 1 A[i+1] chave Custo c1 c2 c3 c4 c5 c6 c7 Vezes
n n-1 n-1 Σ n j=2 tj Σ n j=2 (tj-1) Σ n j=2 (tj-1) n-1 tj = número de vezes que o teste do While em (4) é executado para cada valor j do loop for
Algoritmo Insertion-Sort
T(n) = custo temporal do algoritmo em função do tamanho da entrada (=n) T(n) = c1.n + c2(n-1) + c3(n-1) + c4(
Σ n j=2 tj
) + c5(
Σ n j=2 (tj-1)
) + c6(
Σ n j=2 (tj-1)
) + c7(n-1) T(n) depende de
tj
O valor de tj depende do “grau de desordenação” da entrada.
Algoritmo Insertion-Sort
Melhor caso:
a entrada está corretamente em ordem crescente.
tj = 1
, para j = 2,...,n T(n) = c1.n + c2(n-1) + c3(n-1) + c4(
n-1
) + c7(n-1) = (c1+c2+c3+c4+c7)
n
– (c2+c3+c4+c7)
Pior caso : a entrada está ordenada de forma reversa (descrescente)
tj = j
, para j = 2,...,n Σ n j=2 j = [n(n+1)/2] – 1 T(n) = c1.n + c2(n-1) + c3(n-1) + c4
( [n(n+1)/2] – 1
) + c5
( [n(n-1)/2]
) + + c6
( [n(n-1)/2]
) + c7(n-1) = = (c4/2 + c5/2 + c6/2)
n 2
+ (c1+c2+c3 - c4/2 - c5/2 - c6/2 + c7)
n
(c2 + c3 + c4 + c7)
Algoritmo Insertion-Sort
Caso médio: tj = j/2
, para j = 2,...,n Exercício: Determinar o valor de T(n) para o caso médio.
Notação O
Notação O
é utilizada para ter uma estimativa superior do tempo T(n) de execução, em termos de funções do tipo n k , logn, 2 n , cujas tendências de crescimento seguem padrões distintos.
No melhor caso: T(n) = O(n) No pior caso: T(n) = O(n 2 )
Apresentação Geral do Curso
AULA 1 – Parte II
Profa. Sandra de Amo
Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação
Apresentação Geral do Curso
Bibliografia Material de Suporte Conteúdo Avaliação
Bibliografia Básica
1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.
Introduction to Algorithms
, MIT Press, 3ª Edição, 2009.
(Edição em portugues : “Algoritmos-Teoria e Prática”, Editora Campus 2003) 2. S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani
. Algorithms.
McGraw-Hill Science/Engineering/Math; 1 edition (September 13, 2006). PDF disponível online.
3. Donald E. Knuth.
The Art of Computer Programming, Volume 4A: Combinatorial Algorithms
,Part 1. (Series in Computer Science & Information Processing) Addison-Wesley Professional, 2011.
4. Vijay V. Vazirani.
Approximation Algorithms
. Addison-Wesley 2001
Bibliografia Complementar
1.
David Harel and Yishai Feldman. Algorithmics: The Spirit of Computing, 3a Edição, Addison Wesley, 2004.
2. Steven S. Skiena: The Algorithm Design Manual. Springer, 2a Edição., 2008.
3. Bernhard Korte, Jens Vygen. Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics), 4a Edição, 2010.
Material de Suporte
http://www.deamo.prof.ufu.br/CursoAA2013.html
Livro Texto Slides Artigos
Conteúdo do Curso
Parte I : Conceitos Básicos
O que é um algoritmo ? Algoritmos Recursivos, Randômicos (Probabilísticos) , Aproximativos Análise e projeto de algoritmo Notação Assintótica
Parte II: Algoritmos de Ordenação:
Tempo não linear: ocupação otimal de espaço Tempo linear : ocupação não otimal de espaço
Parte III :
Estruturas de Dados
Elementares: Pilhas, Filas, listas, árvores binárias, tabelas hash estatísticas de ordem dinâmicas Avançadas: B-Tree, Heaps binomiais, Heaps de Fibonacci, estruturas de dados para conjuntos
Conteúdo do Curso (cont.)
Parte IV :
Técnicas Avançadas de Projeto e Análise
Programação Dinâmica Algoritmos Gulosos
Parte V:
Algoritmos de Grafos
Algoritmos elementares Árvores Espalhadas Caminhos mais curtos
Parte VI :
Tópicos Avançados
Problemas NP-completos Algoritmos Combinatórios Algoritmos Aproximativos
Critério de Avaliação
Prova 1 :
23 de Abril
25 pontos Prova 2:
10 de Junho
25 pontos Prova 3 :
2 de Julho
Seminários :
8, 9 e 10 de Julho
30 pontos 20 pontos