Slides - Sandra de Amo

Download Report

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 de números em {1,…,n} tal que t i1 t i2 … t ik = b i1 b i2 … b ik = string do pareamento Pergunta : Existe um pareamento para o input C ?

Solução quando existe, não precisa ser única

Problema da Ordenação

Ordena : SeqNat  SeqNat Ordena() = Onde: é uma permutação de b1 ≤ b2 ≤ ... ≤ bn

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 = , onde B é uma permutação de A e b1≤ b2 ≤ ... ≤ bn

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