como analisar um algoritmo aula 2 profa. sandra de amo disciplina: análise de algoritmos...

22
Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Upload: raquel-telles

Post on 07-Apr-2016

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Como analisar um algoritmo

AULA 2Profa. Sandra de Amo

Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Page 2: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

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 3: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Análise de um AlgoritmoInput = xTamanho de x = n

T(n) = tempo que o algoritmo leva para parar ao ser executado no input de tamanho n.

T(n) = número de operações atômicas realizadas pelo algoritmo até parar multiplicado pelo tempo de cada operação atômica.

Operações atômicas = custo em tempo é constante

Objetivo: Avaliar como cresce T(n) à medida que n cresce. Que operações atômicas considerar no cálculo de T(n) ?

Page 4: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Que operações atômicas ? 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 5: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

T(n) T(n) = an + b

T(n) = an2

T(n) = a2n

n

T(n)

n

T(n)

n

T(n)

Page 6: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Exemplo: Algoritmo Insert-Sort para o problema de ordenação de sequênciasProblema: (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 7: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Ideia1. Para j = 2,..., n2. Carta-chave = carta da posição j 3. Faça CHAVE = valor da posição j 4. Enquanto CHAVE < valor da posição anterior (Compara CHAVE com os valores das posições anteriores a

j até encontrar posição adequada onde inserir a carta-chave)

5. Troca valor da posição anterior com o valor da chave6. (saida do loop) Quando CHAVE >= valor da posição

anterior Insere carta-chave em frente da posição correta encontrada

Page 8: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Ideia traduzida em pseudo-códigoInsertion-Sort (A) Entrada : A = array [a1,...,an]

1. For j 2 to n 2. do chave A[j]3. i j – 14. While i > 0 e A[i] > chave5. 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)

% Procura lugar na sequência ordenada A[1...j-1] onde inserir a chave

Insere a carta-chaveNa posição correta na sequência A[1...j-1]

Page 9: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Análise do pseudo-códigoNum. Passo

Descrição

tj = número de vezes que o teste do loop 4 é executado.

Custo Vezes

1 Para j = 2,..., 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

Page 10: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

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 11: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

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

Page 12: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

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 13: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

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 14: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Notação O T(n) = O(f(n)) se existe c > 0, existe inteiro n0 > 0 tal que para todo n ≥ n0 T(n) ≤ c f(n)

n0

T(n)

f(n)

O que importa é o comportamento de T(n) e f(n) para VALORES GRANDES DE nSe T(n) = O(f(n)) : T(n) e f(n) se comportam de forma semelhante no infinito, a menos de uma constante. Isto é, T(n) e f(n) crescem de forma semelhante.

Page 15: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Exemplos1) Seja f(n) = 5n3 + 2n2 + 22n + 6Mostrar que f(n) = O(n3)

2) Em geral se f(n) é um polinômio de grau k então f(n) = O(nk)

3) Mostrar que 2n = O(n!)

Page 16: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Aritmética Assintótica O(f(n) + g(n)) = O(f(n) + O(g(n)) O(nk1) + O(nk2) = O(nk1) se k1 ≥ k2 aO(f(n)) = bO(f(n)) = 2O(f(n)) para quaisquer a,b

Page 17: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Algoritmo Bubble-sort Ideia:

9

2

7

8

3

4

9

2

7

8

3

4

9

7

2

8

3

4

9

7

8

2

3

4

9

7

8

3

2

4

9

7

8

3

2

4

9

8

7

3

2

4

9

8

7

3

2

4

Page 18: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Pseudo-código

custo vezes1 c1 n2 c2 Σ i=1

(n-1) ti

3 c3 Σ i=1 (n-1) (ti-1)

4 c4 x < ti -1ti = n - i

Page 19: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Análise da complexidade do pseudo-código

T(n) = c1n + c2 Σ i=1(n-1) ti + c3 (Σ i=1

(n-1) (ti-1)) + c4x

Mostrar que T(n) = O(n2) para todos os casos (pior, melhor e médio)

custo vezes1 c1 n2 c2 Σ i=1

(n-1) ti

3 c3 Σ i=1 (n-1) (ti-1)

4 c4 x < ti -1

ti = n - i

Page 20: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

FibonacciF(n) = F(n-1) + F(n-2) se n > 1F(1) = 1F(0) = 0Cresce tão rapidamente como as potências de 2F(n) ~ 20.694n

É possivel computar F(n) de forma eficiente ?

Page 21: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Algoritmo fib1(n)1. If n = 0 return 02. If n = 1 return 13. Return fib1(n-1) + fib1(n-2)

T(n) = número de passos para computar fib1(n)

T(0) = 1, T(1) = 2 Se n ≥ 2 : T(n) = T(n-1) + T(n-2) + 3

Para todo n ≥ 0 T(n) > F(n) Prova por indução sobre nn = 0 T(0) = 1 > F(0) = 0n = 1 T(1) = 2 > F(1) = 1T(n) = T(n-1) + T(n-2) + 3 > F(n-1) + F(n-2) + 3 = F(n) + 3 > F(n)

Logo T(n) > F(n) ~ (20.694n ) ~ (1.6)n

fib1 é exponencial

Page 22: Como analisar um algoritmo AULA 2 Profa. Sandra de Amo Disciplina: Análise de Algoritmos Pós-graduação em CC- UFU

Algoritmo fib2(n)1. If n = 0 return 02. Create array f[0,...,n]3. f[0] = 0, f[1] = 14. For i = 2,...,n5. f[i] = f[i-1] + f[i-2]6. Return f[n]

fib2(n) = O(n) ; fib2 é linear