Análise de Algoritmos AULA 1 Profa. Sandra de Amo Disciplina: Análise de Algoritmos...

Post on 17-Apr-2015

121 views 2 download

Transcript of Análise de Algoritmos AULA 1 Profa. Sandra de Amo Disciplina: Análise de Algoritmos...

Análise de Algoritmos

AULA 1Profa. 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

“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

“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}

“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

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

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

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

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 !

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 ?

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

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ã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

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)

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 .

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

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

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

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

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)

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

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.

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)

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.

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)

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

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

Livro Texto Slides Artigos

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

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 30 pontos

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