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

Post on 27-Jul-2015

110 views 0 download

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

Analise de Algoritmos

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

– p. 1/35

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

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

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

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

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

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

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

Analise de Algoritmos

Análise assintótica: ordem O

– p. 9/35

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

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

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

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

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

Ordem O - Exemplos

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

– p. 13/35

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

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

Ordem O - Exemplos

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

g(n) = 1.

– p. 14/35

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

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

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

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

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

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

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

Limite superior (upper bound)

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

– p. 18/35

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

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

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

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

Limite superior

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

– p. 20/35

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

Limite superior

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

– p. 21/35

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

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

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

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

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

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

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

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

Algoritmo ótimo

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

– p. 26/35

Analise de Algoritmos

Análise assintótica: ordem !

– p. 27/35

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

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

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

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

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

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

Analise de Algoritmos

Análise assintótica: ordem "

– p. 32/35

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

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

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