You are on page 1of 38

Notao assinttica

Prof. Andr Lins alla@ic.ufal.br

Instituto de Computao Universidade Federal de Alagoas

Comportamento assinttico de funes


O parmetro n fornece uma medida da dificuldade para se resolver o problema. Para valores suficientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os ineficientes. A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno.

Logo, a anlise de algoritmos realizada para valores grandes de n. Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n). O comportamento assinttico de f(n) representa o limite do comportamento do custo quando n cresce.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 2

Dominao assinttica
A anlise de um algoritmo geralmente conta com apenas algumas operaes elementares. A medida de custo ou medida de complexidade relata o crescimento assinttico da operao considerada. Definio: Uma funo f(n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e n0 tais que, para n n0, temos |g(n)| c |f(n)|.

Exemplo: Sejam g(n) = (n+1)2 e f(n) = n2 As funes g(n) e f(n) dominam assintoticamente uma a outra, j que |(n+1) 2| 4|n2| para n 1 e |n2| |(n+1) 2| para n 0.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 3

Como medir o custo de execuo de um algoritmo


Funo de Custo ou Funo de Complexidade f(n) = medida de custo necessrio para executar um algoritmo para um problema de tamanho n. Se f(n) uma medida da quantidade de tempo necessrio para executar um algoritmo para um problema de tamanho n, ento f chamada funo de complexidade de tempo de algoritmo. Se f(n) uma medida da quantidade de memria necessria para executar um algoritmo para um problema de tamanho n, ento f chamada funo de complexidade de espao de algoritmo. Observao: tempo no tempo! importante ressaltar que a complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 4

Custo assinttico de funes


interessante comparar algoritmos para valores grandes de n. O custo assinttico de uma funo f(n) representa o limite do comportamento de custo quando n cresce. Em geral, o custo aumenta com o tamanho n do problema. Observao:
Para valores pequenos de n, mesmo um algoritmo ineficiente no custa muito para ser executado.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

Notao assinttica de funes


Existem trs notaes principais na anlise assinttica de funes:
Notao Notao O (O grande)

Notao

PAA - Adaptado de Prof. Loureiro dcc/ufmg

Notao
A notao limita a funo por fatores constantes. Escreve-se f(n) = (g(n)), se existirem constantes positivas c1, c2 e n0 tais que para n n0, o valor de f(n) est sempre entre c1 g(n) e c2g(n) inclusive. Neste caso, pode-se dizer que g(n) um limite assinttico firme (em ingls, asymptotically tight bound) para f(n).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

Notao : Exemplo
Mostre que [(n2)/2] 3n = (n2)
Para provar esta afirmao, devemos achar constantes c1 > 0, c2 > 0, n > 0, tais que: c1n2 [(n2)/2] 3n c2n2 para todo n n0.

Se dividirmos a expresso acima por n2 temos: c1 1/2 3/n c2


PAA - Adaptado de Prof. Loureiro dcc/ufmg 8

Notao : Exemplo
A inequao mais a direita ser sempre vlida para qualquer valor de n 1 ao escolhermos c2 1/2. Da mesma forma, a inequao mais a esquerda ser sempre vlida para qualquer valor de n 7 ao escolhermos c1 1/14. Assim, ao escolhermos c1 = 1/14, c2 = 1/2 e n0 = 7, podemos verificar que [(n2)/2] 3n = (n2). Note que existem outras escolhas para as constantes c1 e c2, mas o fato importante que a escolha existe. Note tambm que a escolha destas constantes depende da funo [(n2)/2] 3n. Uma funo diferente pertencente a (n2) ir provavelmente requerer outras constantes.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 9

Notao : Short question!


Usando a definio formal de prove que 6n3 (n2).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

10

Notao O
A notao O define um limite superior para a funo, por um fator constante. Escreve-se f(n) = O(g(n)), se existirem constantes positivas c e n0 tais que para n n0, o valor de f(n) menor ou igual a cg(n). Neste caso, pode-se dizer que g(n) um limite assinttico superior (em ingls, asymptotically upper bound) para f(n). Escrevemos f(n) = O(g(n)) para expressar que g(n) domina assintoticamente f(n). L-se f(n) da ordem no mximo g(n).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

11

Notao O: Exemplos
Seja f(n) = (n+1) 2.
Logo f(n) O(n2), quando n0 = 1 e c = 4, j que (n+1) 2 4(n2) para n 1

Seja f(n) = n e g(n) = n2. Mostre que g(n) no O(n).


Sabemos que f(n) O(n2), pois para n 0, n n2. Suponha que existam constantes c e n0 tais que para todo n n0, n2 cn. Assim, c n para qualquer n n0. No entanto, no existe uma constante c que possa ser maior ou igual a n para todo n.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

12

Notao O: Exemplos
Mostre que g(n) = 3n3 + 2n2 + n O(n3).
Basta mostrar que 3n3 + 2n2 + n 6n3, para n 0. A funo g(n) = 3n3 + 2n2 + n tambm O(n4), entretanto esta afirmao mais fraca do que dizer que g(n) O(n3).

Mostre que h(n) = log5n O(log n).


O logbn difere do logcn por uma constante que no caso logbc. Como n = clog n, tomando o logaritmo base b em ambos os lados da igualdade, temos que logbn = logbclogcn = logcn x logbc.
c

PAA - Adaptado de Prof. Loureiro dcc/ufmg

13

Notao O
Quando a notao O usada para expressar o tempo de execuo de um algoritmo no pior caso, est se definindo tambm o limite (superior) do tempo de execuo desse algoritmo para todas as entradas. Por exemplo, o algoritmo de ordenao por insero (a ser estudado neste curso) O(n2) no pior caso.
Este limite se aplica para qualquer entrada.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 14

Notao O
Tecnicamente um abuso dizer que o tempo de execuo do algoritmo de ordenao por insero O(n2) (i.e., sem especificar se para o pior caso, melhor caso, ou caso mdio) O tempo de execuo desse algoritmo depende de como os dados de entrada esto arranjados. Se os dados de entrada j estiverem ordenados, este algoritmo tem um tempo de execuo de O(n), ou seja, o tempo de execuo do algoritmo de ordenao por insero no melhor caso O(n). O que se quer dizer quando se fala que o tempo de execuo O(n2) que no pior caso o tempo de execuo O(n2). Ou seja, no importa como os dados de entrada esto arranjados, o tempo de execuo em qualquer entrada O(n2).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

15

Operaes com a notao O

PAA - Adaptado de Prof. Loureiro dcc/ufmg

16

Operaes com a notao O Exemplo


Regra da soma O(f(n)) + O(g(n)).
Suponha trs trechos cujos tempos de execuo so O(n), O(n2) e O(n log n) O tempo de execuo dos dois primeiros trechos O(max(n, n2)), que O(n2). O tempo de execuo de todos os trs trechos ento O(max(n2, n log n)), que O(n2).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

17

Notao
A notao define um limite inferior para a funo, por um fator constante. Escreve-se f(n) = (g(n)), se existirem constantes positivas c e n0 tais que para n n0, o valor de f(n) maior ou igual a cg(n).
Pode-se dizer que g(n) um limite assinttico inferior (em ingls, asymptotically lower bound) para f(n).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

18

Notao
Quando a notao usada para expressar o tempo de execuo de um algoritmo no melhor caso, est se definindo tambm o limite (inferior) do tempo de execuo desse algoritmo para todas as entradas. Por exemplo, o algoritmo de ordenao por insero (n) no melhor caso.
O tempo de execuo do algoritmo de ordenao por insero (n).

O que significa dizer que o tempo de execuo (i.e., sem especificar se para o pior caso, melhor caso, ou caso mdio) (g(n))?
O tempo de execuo desse algoritmo pelo menos uma constante vezes g(n) para valores suficientemente grandes de n.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 19

Notao : Exemplos
Para mostrar que f(n) = 3n3 + 2n2 (n3) basta fazer c = 1, e ento 3n3 + 2n2 n3 para n 0. Seja f(n) = n para n mpar (n 1) e f(n) = (n2)/10 para n par (n 0).
Neste caso f(n) (n2), bastando considerar c = 1/10 e n = 0, 2, 4, 6, ...
PAA - Adaptado de Prof. Loureiro dcc/ufmg 20

Limites do algoritmo de ordenao por insero


O tempo de execuo do algoritmo de ordenao por insero est entre (n) e O(n2). Estes limites so assintoticamente os mais firmes possveis.
Por exemplo, o tempo de execuo deste algoritmo no (n2), pois o algoritmo executa em tempo (n) quando a entrada j est ordenada.

No contraditrio dizer que o tempo de execuo deste algoritmo no pior caso (n2), j que existem entradas para este algoritmo que fazem com que ele execute em tempo (n2).
PAA - Adaptado de Prof. Loureiro dcc/ufmg 21

Funes de custo (n de comparaes) do algoritmo de ordenao por insero

PAA - Adaptado de Prof. Loureiro dcc/ufmg

22

Funes de custo e notaes assintticas do algoritmo de ordenao por insero

PAA - Adaptado de Prof. Loureiro dcc/ufmg

23

Teorema
Para quaisquer funes f(n) e g(n), f(n) = (g(n)) se e somente se, f(n) = O(g(n)), e f(n) = (g(n))

PAA - Adaptado de Prof. Loureiro dcc/ufmg

24

Mais sobre notao assinttica de funes


Existem duas outras notaes na anlise assinttica de funes:
Notao o (O pequeno) Notao

Estas duas notaes no so usadas normalmente, mas importante saber seus conceitos e diferenas em relao s notaes O e , respectivamente.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 25

Notao o
O limite assinttico superior definido pela notao O pode ser assintoticamente firme ou no.
Por exemplo, o limite 2n2 = O(n2) assintoticamente firme, mas o limite 2n = O(n2) no .

A notao o usada para definir um limite superior que no assintoticamente firme. Formalmente a notao o definida como:
f(n) = o(g(n)), para qq c > 0 e n0|0 f(n) < cg(n), pt n n
0

Exemplo, 2n = o(n2) mas 2n2 o(n2).


PAA - Adaptado de Prof. Loureiro dcc/ufmg 26

Notao o
As definies das notaes O (o grande) e o (o pequeno) so similares. A diferena principal que em f(n) = O(g(n)), a expresso 0 f(n) cg(n) vlida para todas constantes c > 0. Intuitivamente, a funo f(n) tem um crescimento muito menor que g(n) quando n tende para infinito. Isto pode ser expresso da seguinte forma:

lim

f ( n) 0 g ( n)

Alguns autores usam este limite como a definio de o.


PAA - Adaptado de Prof. Loureiro dcc/ufmg 27

Notao
Por analogia, a notao est relacionada com a notao da mesma forma que a notao o est relacionada com a notao O. Formalmente a notao definida como: f(n) = (g(n)), para qq c > 0 e n0|0 cg(n) < f(n), p t n n0 Por exemplo, (n2)/2 = (n), mas (n2)/2 (n2). A relao f(n) = (g(n)) implica em

f ( n) lim n g ( n)
se o limite existir.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 28

Comparao de programas
Podemos avaliar programas comparando as funes de complexidade, negligenciando as constantes de proporcionalidade. Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2). Porm, as constantes de proporcionalidade podem alterar esta considerao. Exemplo: um programa leva 100n unidades de tempo para ser executado e outro leva 2n2. Qual dos dois programas melhor? Depende do tamanho do problema. Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n. Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2). Entretanto, quando n cresce, o programa com tempo de execuo O(n2) leva muito mais tempo que o programa O(n).

PAA - Adaptado de Prof. Loureiro dcc/ufmg

29

Classe de comportamento assintticos Complexidade constante


f(n) = O(1)
O uso do algoritmo independe do tamanho de n. As instrues do algoritmo so executadas um nmero fixo de vezes.

Exemplo
O que significa um algoritmo ser O(2) ou O(5)?

PAA - Adaptado de Prof. Loureiro dcc/ufmg

30

Classe de comportamento assintticos complexidade logartmica


f(n) = O(log n)
Ocorre tipicamente em algoritmos que resolvem um problema transformando-o em problemas menores. Nestes casos, o tempo de execuo pode ser considerado como sendo menor do que uma constante grande.

Supondo que a base do logaritmo seja 2:


Para n = 1 000, log2 ~ 10. Para n = 1 000 000, log2 ~ 20.

Exemplo:
Algoritmo de pesquisa binria.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 31

Classe de comportamento assintticos complexidade linear


f(n) = O(n)
Em geral, um pequeno trabalho realizado sobre cada elemento de entrada. Esta a melhor situao possvel para um algoritmo que tem que processar/produzir n elementos de entrada/sada. Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.

Exemplos:
Algoritmo de pesquisa seqencial. Algoritmo para teste de planaridade de um grafo.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 32

Classe de comportamento assintticos complexidade linear logartmica


f(n) = O(n log n) Este tempo de execuo ocorre tipicamente em algoritmos que resolvem um problema quebrando-o em problemas menores, resolvendo cada um deles independentemente e depois agrupando as solues. Caso tpico dos algoritmos baseados no paradigma diviso-econquista. Supondo que a base do logaritmo seja 2: Para n = 1.000.000, log2 ~ 20.000.000. Para n = 2.000.000, log2 ~ 42.000.000. Exemplo: Algoritmo de ordenao MergeSort.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

33

Classe de comportamento assintticos complexidade quadrtica


f(n) = O(n2) Algoritmos desta ordem de complexidade ocorrem quando os itens de dados so processados aos pares, muitas vezes em um anel dentro do outro Para n = 1.000, o nmero de operaes da ordem de 1.000.000. Sempre que n dobra o tempo de execuo multiplicado por 4. Algoritmos deste tipo so teis para resolver problemas de tamanhos relativamente pequenos. Exemplos: Algoritmos de ordenao simples como seleo e insero.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 34

Classe de comportamento assintticos complexidade cbica


f(n) = O(n3) Algoritmos desta ordem de complexidade geralmente so teis apenas para resolver problemas relativamente pequenos. Para n = 100, o nmero de operaes da ordem de 1.000.000 Sempre que n dobra o tempo de execuo multiplicado por 8. Algoritmos deste tipo so teis para resolver problemas de tamanhos relativamente pequenos. Exemplo: Algoritmo para multiplicao de matrizes.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 35

Classe de comportamento assintticos complexidade exponencial


f(n) = O(2n)
Algoritmos desta ordem de complexidade no so teis sob o ponto de vista prtico. Eles ocorrem na soluo de problemas quando se usa a fora bruta para resolv-los. Para n = 20, o tempo de execuo cerca de 1.000.000. Sempre que n dobra o tempo de execuo fica elevado ao quadrado.

Exemplo:
Algoritmo do Caixeiro Viajante
PAA - Adaptado de Prof. Loureiro dcc/ufmg 36

Classe de comportamento assintticos complexidade exponencial


f(n) = O(n!)
Um algoritmo de complexidade O(n!) dito ter complexidade exponencial, apesar de O(n!) ter comportamento muito pior do que O(2n). Geralmente ocorrem quando se usa fora bruta na soluo do problema.

Considerando:
n = 20, temos que 20! = 2.432.902.008.176.640.000, um nmero com 19 dgitos. n = 40 temos um nmero com 48 dgitos.
PAA - Adaptado de Prof. Loureiro dcc/ufmg 37

Comparao de funes de complexidades

PAA - Adaptado de Prof. Loureiro dcc/ufmg

38

You might also like