Análise de Algoritmos - Análise Assintótica

53
An´ alise de Algoritmos Análise assintótica: ordens O , Ω e Θ – p. 1/35

Transcript of Análise de Algoritmos - Análise Assintótica

Page 1: Análise de Algoritmos - Análise Assintótica

Analise de Algoritmos

Análise assintótica: ordens O, ! e "

– p. 1/35

Page 2: Análise de Algoritmos - Análise Assintótica

Análise assintótica

Ao ver uma expressão como n+ 10 ou n2 + 1,pensamos geralmente em valores pequenos de n,valores próximos de zero.

A análise de algoritmos faz exatamente o contrário:ignora os valores pequenos e concentra-se nosvalores enormes de n. Esse tipo de análisechama-se análise “assintótica”.

– p. 2/35

Page 3: Análise de Algoritmos - Análise Assintótica

Análise assintótica - exemplo

Considere o número de operações de doisalgoritmos que resolvem um mesmo problema,como função do tamanho n da entrada.

Algoritmo 1: f1(n) = 2n2 + 5n operações

Algoritmo 2: f2(n) = 500n+ 4000 operações

Dependendo do valor de n, o Algoritmo 1 poderequerer mais ou menos operações que oAlgoritmo 2. (Compare as duas funções paran = 10 e n = 100.)

– p. 3/35

Page 4: Análise de Algoritmos - Análise Assintótica

Análise assintótica - exemplo

Nosso interesse é estudar o comportamentoassintotico das funções, ou seja, quando n ! ".

Em geral, os termos inferiores e as constantesmultiplicativas contribuem pouco na comparação epodem ser descartados.

– p. 4/35

Page 5: Análise de Algoritmos - Análise Assintótica

Análise assintótica - exemplo

O importante é observar que f1(n) tem crescimentoproporcional a n2 (quadrático), ao passo que f2(n)

tem crescimento proporcional a n (linear). Umcrescimento quadrático é pior que um crescimentolinear. Assim, vamos preferir o Algoritmo 2.

– p. 5/35

Page 6: Análise de Algoritmos - Análise Assintótica

Análise assintótica - outro exemplo

Para valores enormes de n, as funções

n2,3

2n2, 9999n2,

n2

1000, n2 + 100n

crescem todas com a mesma velocidade eportanto são todas “equivalentes”. Nesse estudo,as funções são classificadas em “ordens”; todas asfunções de uma mesma ordem são equivalentes.As cinco funções acima, por exemplo, pertencem àmesma ordem.

– p. 6/35

Page 7: Análise de Algoritmos - Análise Assintótica

Importância da análise assintótica

Na tabela abaixo, os valores representam otamanho da maior instância solucionável em umahora.

Computador Computador 100 Computador 1000Função atual vezes mais rápido vezes mais rápido

n N 100N 1000N

n log n N1 22, 5N1 140, 2N1

n2 N2 10N2 31, 6N2

n3 N3 4, 6N3 10N3

2n N4 N4 + 6 N4 + 10

– p. 7/35

Page 8: Análise de Algoritmos - Análise Assintótica

Funções assintoticamente não negativas

Restringiremos a atenção a funçõesassintoticamente não negativas, ou seja, funções ftais que f(n) # 0 para todo n “suficientementegrande”.

Mais explicitamente, f é assintoticamente nãonegativa se existe n0 tal que f(n) # 0 para todo n

maior que n0.

– p. 8/35

Page 9: Análise de Algoritmos - Análise Assintótica

Analise de Algoritmos

Análise assintótica: ordem O

– p. 9/35

Page 10: Análise de Algoritmos - Análise Assintótica

Ordem O

Dadas funções assintoticamente não negativas f eg, dizemos que f esta na ordem O de g eescrevemos f = O(g) se

f(n) $ c.g(n)

para algum c positivo e para todo n suficientementegrande.

– p. 10/35

Page 11: Análise de Algoritmos - Análise Assintótica

Ordem O

Em outras palavras, f = O(g) se existe um númeropositivo c e um número n0 tais que

f(n) $ c.g(n)

para todo n maior que n0.

– p. 11/35

Page 12: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

A notação O fornece limites superiores de funçõesque, por sua vez, correspondem a tempos deexecução de algoritmos.

– p. 12/35

Page 13: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

A notação O fornece limites superiores de funçõesque, por sua vez, correspondem a tempos deexecução de algoritmos.

Exemplo 1: Se f(n) $ 9999g(n) para todo n # 1000

– p. 12/35

Page 14: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

A notação O fornece limites superiores de funçõesque, por sua vez, correspondem a tempos deexecução de algoritmos.

Exemplo 1: Se f(n) $ 9999g(n) para todo n # 1000

então f = O(g).

– p. 12/35

Page 15: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 2: Suponha que f(n) = 2n2 + 3n+ 4.

– p. 13/35

Page 16: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 2: Suponha que f(n) = 2n2 + 3n+ 4.

2n2 + 3n+ 4 $ 2n2 + 3n2 + 4n2 = 9n2

para todo n # 1.

– p. 13/35

Page 17: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 2: Suponha que f(n) = 2n2 + 3n+ 4.

2n2 + 3n+ 4 $ 2n2 + 3n2 + 4n2 = 9n2

para todo n # 1. Portanto, f(n) = O(n2).

– p. 13/35

Page 18: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 3: Suponha que f(n) = 3 + 2n e que

g(n) = 1.

– p. 14/35

Page 19: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 3: Suponha que f(n) = 3 + 2n e que

g(n) = 1. Então

3 +2

n$ 3 + 1 = 4 = 4.g(n)

para todo n # 2.

– p. 14/35

Page 20: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 3: Suponha que f(n) = 3 + 2n e que

g(n) = 1. Então

3 +2

n$ 3 + 1 = 4 = 4.g(n)

para todo n # 2. Portanto, f(n) = O(g(n)) = O(1).

– p. 14/35

Page 21: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 4: Suponha que f(n) = n3 e queg(n) = 200n2. Será verdade que f(n) = O(g(n))?

–p. 15/35

Page 22: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 4: Suponha que f(n) = n3 e queg(n) = 200n2. Será verdade que f(n) = O(g(n))?

Se existem c e n0 tais que f(n) $ c.g(n), teremos

n $ 200c

para todo n # n0. Mas isso é absurdo!

– p. 15/35

Page 23: Análise de Algoritmos - Análise Assintótica

Ordem O - Exemplos

Exemplo 4: Suponha que f(n) = n3 e queg(n) = 200n2. Será verdade que f(n) = O(g(n))?

Se existem c e n0 tais que f(n) $ c.g(n), teremos

n $ 200c

para todo n # n0. Mas isso é absurdo!

Logo, f(n) %= O(g(n)).

– p. 15/35

Page 24: Análise de Algoritmos - Análise Assintótica

Ordem O - ExercíciosProve os disprove as afirmações:1. 10n = O(n)

2. 10n2 = O(n)

3. 10n55 = O(2n)

4. n2 + 200n+ 300 = O(n2)

5. n2 & 200n& 300 = O(n)

6. 32n

2 + 72n& 4 = O(n)

7. 32n

2 + 72n& 4 = O(n2)

8. n3 & 999999n2 & 1000000 = O(n2)

– p. 16/35

Page 25: Análise de Algoritmos - Análise Assintótica

Ordem O - Exercícios

9. Seja!nk

"o número de combinações de n objetos

tomados k a k. Mostre!n2

"= O(n2).

Prove os disprove as afirmações:10. 2n+1 = O(2n)

11. 3n = O(2n)

12. log2 n = O(log3 n)

13. log3 n = O(log2 n)

14. log2 n = O(n)

15. 100 log n& 10n+ 2n log n = O(n log n)

– p. 17/35

Page 26: Análise de Algoritmos - Análise Assintótica

Limite superior (upper bound)

A notação O também é utilizada para indicarlimites superiores para problemas.

– p. 18/35

Page 27: Análise de Algoritmos - Análise Assintótica

Limite superior (upper bound)

A notação O também é utilizada para indicarlimites superiores para problemas.

Dado um problema, por exemplo, o demultiplicação de duas matrizes quadradas n' n.

– p. 18/35

Page 28: Análise de Algoritmos - Análise Assintótica

Limite superior (upper bound)

A notação O também é utilizada para indicarlimites superiores para problemas.

Dado um problema, por exemplo, o demultiplicação de duas matrizes quadradas n' n.

Conhecemos um algoritmo para resolver esteproblema (pelo método trivial) de complexidadeO(n3).

– p. 18/35

Page 29: Análise de Algoritmos - Análise Assintótica

Limite superior

Sabemos assim que a complexidade desteproblema não deve superar O(n3), uma vez queexiste um algoritmo que o resolve com estacomplexidade, e dizemos que uma cota superior oulimite superior para este problema é O(n3).

– p. 19/35

Page 30: Análise de Algoritmos - Análise Assintótica

Limite superior

Sabemos assim que a complexidade desteproblema não deve superar O(n3), uma vez queexiste um algoritmo que o resolve com estacomplexidade, e dizemos que uma cota superior oulimite superior para este problema é O(n3).

A cota superior de um problema pode mudar sealguém descobrir um outro algoritmo melhor.

– p. 19/35

Page 31: Análise de Algoritmos - Análise Assintótica

Limite superior

V. Strassen apresentou em 1969 um algoritmopara multiplicação de matrizes de complexidadeO(nlog 7) = O(n2.807).

– p. 20/35

Page 32: Análise de Algoritmos - Análise Assintótica

Limite superior

V. Strassen apresentou em 1969 um algoritmopara multiplicação de matrizes de complexidadeO(nlog 7) = O(n2.807).Assim a cota superior para o problema demultiplicação de matrizes passou a ser O(nlog 7).

– p. 20/35

Page 33: Análise de Algoritmos - Análise Assintótica

Limite superior

Em 1990, Coppersmith e Winograd melhoraramesta marca para O(n2.376);

– p. 21/35

Page 34: Análise de Algoritmos - Análise Assintótica

Limite superior

Em 1990, Coppersmith e Winograd melhoraramesta marca para O(n2.376);

Em 2010, A. Stothers apresentou um algoritmode complexidade O(n2.373);

– p. 21/35

Page 35: Análise de Algoritmos - Análise Assintótica

Limite superior

Em 1990, Coppersmith e Winograd melhoraramesta marca para O(n2.376);

Em 2010, A. Stothers apresentou um algoritmode complexidade O(n2.373);

Em 2011, V. Willians melhorou ainda mais estamarca para O(n2.372).

– p. 21/35

Page 36: Análise de Algoritmos - Análise Assintótica

Limite superior

Em 1990, Coppersmith e Winograd melhoraramesta marca para O(n2.376);

Em 2010, A. Stothers apresentou um algoritmode complexidade O(n2.373);

Em 2011, V. Willians melhorou ainda mais estamarca para O(n2.372).

Portanto, a cota superior atual para o problema damultiplicação de matrizes é O(n2.372).

– p. 21/35

Page 37: Análise de Algoritmos - Análise Assintótica

Analogia com record mundial

A cota superior para um problema é análoga aorecord mundial de uma modalidade de atletismo.Ele é estabelecido pelo melhor atleta (algoritmo)do momento. Assim como o record mundial, a cotasuperior pode ser melhorada por um algoritmo(atleta) mais veloz.

– p. 22/35

Page 38: Análise de Algoritmos - Análise Assintótica

Analogia com record mundial

“Cota superior” - 100m. rasos

1988 Carl Lewis 9s 921993 Linford Christie 9s 871999 Maurice Greene 9s 792007 Asafa Powell 9s 742008 Usain Bolt 9s 722009 Usain Bolt 9s 58

– p. 23/35

Page 39: Análise de Algoritmos - Análise Assintótica

Limite inferior (lower bound)

As vezes é possível demonstrar que, para um dadoproblema, qualquer que seja o algoritmo a serusado, o problema requer pelo menos um certonúmero de operações.

– p. 24/35

Page 40: Análise de Algoritmos - Análise Assintótica

Limite inferior (lower bound)

As vezes é possível demonstrar que, para um dadoproblema, qualquer que seja o algoritmo a serusado, o problema requer pelo menos um certonúmero de operações.

Essa complexidade é chamada cota inferior (lowerbound) do problema.

– p. 24/35

Page 41: Análise de Algoritmos - Análise Assintótica

Limite inferior

Para o problema da multiplicação de matrizesquadradas n' n, apenas para ler os elementosdas duas matrizes de entrada ou para produzir oselementos da matriz produto leva tempo O(n2).Assim uma cota inferior trivial é !(n2).

– p. 25/35

Page 42: Análise de Algoritmos - Análise Assintótica

Algoritmo ótimo

Se um algoritmo tem uma complexidade igual ácota inferior do problema, ele é assintoticamenteotimo ou simplesmente otimo.

– p. 26/35

Page 43: Análise de Algoritmos - Análise Assintótica

Analise de Algoritmos

Análise assintótica: ordem !

– p. 27/35

Page 44: Análise de Algoritmos - Análise Assintótica

Ordem !

A expressão “f = O(g)” tem o mesmo sabor que“f $ g”. Agora precisamos de um conceito quetenha o sabor de “f # g”.

– p. 28/35

Page 45: Análise de Algoritmos - Análise Assintótica

Ordem !

Dadas funções assintoticamente não negativas f eg, dizemos que f esta na ordem ! de g eescrevemos f = !(g) se

f(n) # c.g(n)

para algum c positivo e para todo n suficientementegrande.

– p. 29/35

Page 46: Análise de Algoritmos - Análise Assintótica

Ordem !

Em outras palavras, f = !(g) se existe um númeropositivo c e um número n0 tais que

f(n) # c.g(n)

para todo n maior que n0.

– p. 30/35

Page 47: Análise de Algoritmos - Análise Assintótica

Ordem !

Em outras palavras, f = !(g) se existe um númeropositivo c e um número n0 tais que

f(n) # c.g(n)

para todo n maior que n0.

Qual a relação entre O e !?

–p. 30/35

Page 48: Análise de Algoritmos - Análise Assintótica

Ordem !

Em outras palavras, f = !(g) se existe um númeropositivo c e um número n0 tais que

f(n) # c.g(n)

para todo n maior que n0.

Qual a relação entre O e !?

f = O(g) ( g = !(f)

– p. 30/35

Page 49: Análise de Algoritmos - Análise Assintótica

Ordem ! - Exercícios

1. Seja!nk

"o número de combinações de n objetos

tomados k a k. Mostre!n2

"= !(n2).

2. Prove que 100 log n& 10n+ 2n log n está em !(n log n).3. É verdade que 2n+ 1 está em !(n)?

– p. 31/35

Page 50: Análise de Algoritmos - Análise Assintótica

Analise de Algoritmos

Análise assintótica: ordem "

– p. 32/35

Page 51: Análise de Algoritmos - Análise Assintótica

Ordem "

Além dos conceitos que têm o sabor de “f $ g” ede “f # g”, precisamos de um que tenha o saborde “f = g.

– p. 33/35

Page 52: Análise de Algoritmos - Análise Assintótica

Ordem "

Dizemos que as funções f e g estão na mesmaordem e escrevemos f = "(g) se f = O(g) ef = !(g).

Em outras palavras, f = "(g) significa que existenúmeros positivos c e d tais que

c.g(n) $ f(n) $ d.g(n)

para todo n suficientemente grande.

– p. 34/35

Page 53: Análise de Algoritmos - Análise Assintótica

Ordem " - ExercíciosProve ou disprove:1. 9999n2 = "(n2)

2. (3/2)n2 + (7/2)n& 4 = "(n2)

3. n2/1000& 999n = "(n2)

4. log2 n+ 1 = "(log10 n)

– p. 35/35