35
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

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

Embed Size (px)

Citation preview

Page 1: 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

Análise de Algoritmos

AULA 1Profa. Sandra de Amo

Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação

Page 2: 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 GeraisConceitos 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

Page 3: 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

“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 naturalPrimos (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 = p1

n1p2n2...pk

nk Exemplo: Decomposição (10) = <(2,1), (5,1)>, pois 10 = 21.51

Page 4: 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

“Problemas” e “Algoritmos” Problema do Circuito Hamiltoniano

Hamilton: Grafos Dirigidos {Sim, Não}Instância = grafo dirigido GHamilton(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}

Page 5: 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

“Problemas” e “Algoritmos” Solução de um Problema

Conjunto finito de instruções cuja execução sobre o input termina depois de um tempo finito, produzindo no final o output.

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

Algoritmo que resolve o problema

Page 6: 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

Perguntas

Conjunto dos Algoritmos Conjunto dos Problemas

???

Função injetora ??

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

Page 7: 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

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.

Page 8: 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

O problema PCPO problema PCP

…abc b c dg

f g eg ef

e f

c d e

b c d

b

1 2 3 4 n

Input = um conjunto finito de tipos de peças de dominós

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

b

e f

c d e

g

f g

b c d e f g

b c d e f g

Sequência : 3 n 1

Page 9: 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

a b c a a a b c

Exemplos Exemplos

a b cb

c a

a

a b c

c a

a

1 2 3 4

a

a b

a

a b

b

c a

c a

a

a b c

c

Sequência de peças= 2 1 3 2 4

a b c a a a b c

Page 10: 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

Exemplo Exemplo

a c c

b a

c a

a

1 2 3

a b c

a b

Input

Resposta ?? Não

Justificativa : a parte de cima das peças é sempre maior que a parte de baixo !

Page 11: 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

Formalização do Problema 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 <i1, i2, …, ik> de números em {1,…,n}

tal que ti1 ti2 … tik = bi1 bi2 … bik= string do pareamento

Pergunta : Existe um Pergunta : Existe um pareamento pareamento para o input C ?para o input C ?

Page 12: 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

Solução quando existe, não precisa ser única Problema da OrdenaçãoOrdena : SeqNat SeqNat Ordena(<a1,...,an>) = <b1,...,bn>Onde: <b1,...,bn> é uma permutação de <a1,...,an>

b1 ≤ b2 ≤ ... ≤ bnAlgoritmos que o resolvem:

Insertion-SortSelection-SortBubble-SortHeap-SortMerge-SortQuick-Sort Radix-SortBucket-Sort

Insertion-SortSelection-SortBubble-SortHeap-SortMerge-SortQuick-Sort

Radix-SortBucket-Sort

Eficiência emTempo cresce

Eficiência emEspaço cresce

Page 13: 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

O que é um bom algoritmo ? Correto ? Eficiente em tempo ? Eficiente em espaço ?

Page 14: 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

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)

Page 15: 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

Soluções Aproximadas nem sempre sãofacilmente encontráveis

Problema do Caixeiro Viajante (otimização)

Achar o circuito hamiltoniano mais curto (passando por todasas cidades uma única vez) ?

Problema de Minimização de recursos

• Encontrar a solução ótima é difícil• Problema NP-hard• Encontrar solução aproximada não é factível !

d1

d2

d3

d4 d5

d6

Page 16: 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

Tipos de AlgoritmosProblema 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)

Page 17: 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

O que é um Algoritmo Probabilístico ? Problema: Encontrar um elemento a em um array A de n elementos

Input: A, a , nOutput: posição m onde se encontra a ou ‘Não’

Algoritmo Exato Begin Para i = 1, ..., n faça

Se A[i] = a Retorna i Pára

Retorna ‘Não’ End

Se n é muito grande, algoritmo pode levar muito tempo para dar a resposta .

Page 18: 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

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árai = 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

Page 19: 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

Análise de um AlgoritmoO 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

Page 20: 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

Análise de um AlgoritmoQue 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

Page 21: 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

Exemplo: Problema, Algoritmo, Análise do Algoritmo Problema: (Ordenação de uma sequência)

Input: sequência de n números A = <a1,...,an>

Output: B = <b1,...,bn>, onde B é uma permutação de A e b1≤ b2 ≤ ... ≤ bn

Projeto de um Algoritmo

Page 22: 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

Algoritmo Insertion-SortInsertion-Sort (A) Entrada : A = array [a1,...,an]

1. For j 2 to n

2. do chave A[j]

3. i j – 1 % Procura lugar anterior onde inserir a chave

4. While i > 0 e A[i] > chave

5. do A[i+1] A[i]

6. i i - 1

7. 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)

Page 23: 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

Algoritmo Insertion-SortInsertion-Sort (A)

Custo Vezes

1. For j 2 to n c1 n

2. do chave A[j] c2 n-1

3. i j – 1 c3 n-1

4. While i > 0 e A[i] > chave c4 Σnj=2 tj

5. do A[i+1] A[i] c5 Σnj=2 (tj-1)

6. i i - 1 c6 Σnj=2 (tj-1)

7. A[i+1] chave c7 n-1

tj = número de vezes que o teste do While em (4) é executado para cada valor jdo loop for

Page 24: 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

Algoritmo Insertion-SortT(n) = custo temporal do algoritmo em função do tamanho da

entrada (=n)

T(n) = c1.n + c2(n-1) + c3(n-1) + c4(Σnj=2 tj) + c5(Σn

j=2 (tj-1)) + c6(Σnj=2 (tj-1)) + c7(n-1)

T(n) depende de tj

O valor de tj depende do “grau de desordenação” da entrada.

Page 25: 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

Algoritmo Insertion-SortMelhor 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

Σnj=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)n2 + (c1+c2+c3 - c4/2 - c5/2 - c6/2 + c7)n - (c2 + c3 + c4 + c7)

Page 26: 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

Algoritmo Insertion-SortCaso médio:

tj = j/2, para j = 2,...,n

Exercício: Determinar o valor de T(n) para o caso médio.

Page 27: 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

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 nk, logn, 2n, cujas tendências de crescimento seguem padrões distintos.

No melhor caso: T(n) = O(n)

No pior caso: T(n) = O(n2)

Page 28: 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

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

Page 29: 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

Apresentação Geral do Curso

Bibliografia Material de Suporte Conteúdo Avaliação

Page 30: 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

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

Page 31: 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

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 (Algorithmsand Combinatorics), 4a Edição, 2010.

Page 32: 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

Material de Suportehttp://www.deamo.prof.ufu.br/CursoAA2013.html

Livro Texto Slides Artigos

Page 33: 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

Conteúdo do CursoParte 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

Page 34: 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

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

Page 35: 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

Critério de Avaliação Prova 1 : 23 de Abril 25 pontos

Prova 2: 10 de Junho 25 pontos

Prova 3 : 2 de Julho 30 pontos

Seminários : 8, 9 e 10 de Julho 20 pontos