You are on page 1of 38

03  Anlise de Algoritmos (parte 3)

SCC201/501 - Introduo Cincia de Computao II

Prof. Moacir Ponti Jr.

www.icmc.usp.br/~moacir
Instituto de Cincias Matemticas e de Computao  USP
2010/2

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

1 / 38

Sumrio

Anlise Assinttica de Algoritmos Crescimento de funes Notao assinttica O Notao assinttica Notao assinttica Notaes o e Regras

Uso e relao entre as notaes O ,

2 3

Funes

Dicas de anlise na prtica

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

2 / 38

Prvias: notcias e pginas interessantes a visitar

Foi provado que qualquer posio do Cubo Mgico pode ser resolvida com 20 movimentos.

http://www.reddit.com/tb/cz0ll

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

3 / 38

Crescimento de funes

Anlise assinttica de algoritmos


geralmente baseada em uma descrio em pseudo-cdigo (ao invs de cdigo fonte em determinada linguagem) caracteriza a

complexidade de tempo como uma funo do tamanho da entrada,


n

um algoritmo assintoticamente mais eciente a melhor escolha para todas as entradas, exceto as de tamanho pequeno. permite analisar a complexidade de um algoritmo independente do sistema computacional utilizado

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

4 / 38

Sumrio

Anlise Assinttica de Algoritmos Crescimento de funes Notao assinttica O Notao assinttica Notao assinttica Notaes o e Regras

Uso e relao entre as notaes O ,

2 3

Funes

Dicas de anlise na prtica

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

5 / 38

Notao assinttica:

O (big oh)

Para uma dada funo g (n ), denotamos O (g (n )) o conjunto de


funes :

O g n

( ( )) = {f (n) : existem constantes positivas c e n0 0 f (n ) c g (n ) para todo n n0 }

tais que

uma funo f (n ) pertence ao conjunto O (g (n )) se existe uma constante positiva c de forma que ela possa estar limitada por c para um valor de n sucienemente grande podemos dizer que f (n )
f

g (n)

O (g (n)),

mas em geral se escreve

(n) = O (g (n))

(abuso da notao de igualdade, no simtrico)

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

6 / 38

Notao assinttica:

O (big oh)
Para todos os valores de n direita de n0 , o valor de f (n ) reside em
c

g (n )

ou abaixo desse.

Formalmente, a funo g (n ) um

limitante assinttico superior para


f

(n )
2

Exemplo: 2n

= O (n3 )
2

 podemos pensar nessa equao

2 2n
Fonte da gura: CORMEN et al.(2002)

como sendo 2n

3 O (n )

O (n 3 )

ou

 a taxa de crescimento de 2n

menor ou igual
03Anlise de Algoritmos (p3)

3 taxa de n

Moacir Ponti Jr. (ICMCUSP)

2010/2

7 / 38

Notao assinttica:
Exemplo 1: 2n

O (big oh)  exemplos


O (n )

+ 10

podemos realizar uma manipulao para encontrar 2

a armao vlida para

n + 10 c n c n 2n 10 (c 2)n 10 n c102
2

c e n0 :

c = 3 e n0 = 10.

Exemplo 2: n

O n

( )

c que seja sempre maior ou igual a n para todo n0 : n2 c n n c impossvel pois c deve ser constante.
preciso encontrar valor de um

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

8 / 38

Notao assinttica:
Exemplo 3: 3n

O (big oh)  exemplos


O (n

+ 20n2 + 5

3)

n n0 n3 + 20n2 + 5 (3 + 20 + 5) n3 , podemos tomar c = 28 e qualquer n0 > 1


para como 3

preciso encontrar

c > 0 e n0 1 tais que 3n3 + 20n2 + 5 c n3

Exemplo 4: 3 log n

+5

O (log n )

preciso encontrar todo

n n0

c > 0 e n0 1 tais que 3 log +5 c log n para

note que 3 log

basta tomar, por exemplo,

n + 5 (3 + 5) log n se n > 1 (log 1 = 0) c = 8 e qualquer n0 2


O

Exemplo 5: 2
preciso

n +2
n+2

(2n )

c > 0 e n0 1 tais que 2n+2 c 2n para todo n n0


= 22 2n = 4 2n

note que 2

assim, basta tomar, por exemplo,

c = 4 e qualquer n0
2010/2 9 / 38

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

*Notao de igualdade para conjuntos de funes*:


a igualdade nesse tipo de caso ser utilizada no sentido de representatividade e pode ser lida como  .

um conjunto em uma frmula representa uma funo annima naquele conjunto. Exemplo 6:
f

(n) = n3 + O (n2 ) O (n2 )


de forma que f (n )

signica que existe um h (n ) Exemplo 7:


n

= n 3 + h (n ).

+ O (n) = O (n2 ) O (n)


existe h (n )

signica que, para qualquer f (n )

2 forma que n

O (n2 )

de

+ f (n) = h(n).

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

10 / 38

Sumrio

Anlise Assinttica de Algoritmos Crescimento de funes Notao assinttica O Notao assinttica Notao assinttica Notaes o e Regras

Uso e relao entre as notaes O ,

2 3

Funes

Dicas de anlise na prtica

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

11 / 38

Notao assinttica:

(omega)

Na maiora dos casos estamos interessados no limite superior, pois queremos saber no pior caso, qual a complexidade de tempo Em alguns casos tambm podemos analisar o limite assinttico inferior para expressar algo que esteja pelo menos em um dado comportamento. Para uma dada funo g (n ),

(g (n))

o conjunto de funes : tais que

(g (n)) = {f (n) : existem constantes positivas c e n0 0 c g (n ) f (n ) para todo n n0 }


uma funo f (n ) pertence ao conjunto um valor de n sucienemente grande

(g (n))

se existem uma

constante positiva c tais que ela possa estar limitada por c

g (n )

para

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

12 / 38

Notao assinttica:

(omega)

Para todos os valores de n direita de n0 , o valor de f (n ) reside em c desse. Exemplo: 3n

g (n )
2

ou acima

+ n = (n)
2

 podemos pensar nessa equao como sendo 3n de 3n

+ n (n),

 ou seja, a taxa de crescimento

+n

maior ou igual

taxa de n
Fonte da gura: CORMEN et al.(2002)

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

13 / 38

*Notao de igualdade para conjuntos de funes*:


Exemplo 1: como

= (lg(n))
para c

c lg(n)

>0

podemos ler: raiz de n , pelo menos, omega de lg(n ) para um n sucientemente grande (n

2 Exemplo 2: 3n 3n2 +n n
3n
n

n0 ).

+ n = (n)

cnn

c 3 =1
temos de pegar c

para n0

=3

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

14 / 38

Notao assinttica:

(theta)

Para uma dada funo g (n ), denotamos


funes :

(g (n))

o conjunto de

(g (n)) = {f (n) : existem constantes positivas c1 , c2 e n0 tais 0 c1 g (n ) f (n ) c2 g (n ) para todo n n0 }


uma funo f (n ) pertence ao conjunto

que

(g (n))

se existem constantes

positivas c1 e c2 tais que ela possa estar limitada entre c1 g (n ) e


c2 g n

( )

para um valor de n sucientemente grande

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

15 / 38

Notao assinttica:

(theta)

Para todos os valores de n direita de n0 , o valor de f (n ) reside em c1 g (n ) ou acima dele e em c2 g (n ) ou abaixo desse. para todo n

n0 , f (n) = g (n)

limite assintoticamente restrito para


g n

dentro de um fator constante.

( )

um

(n)

Fonte da gura: CORMEN et al.(2002)

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

16 / 38

Notao assinttica:

(theta)

Foi dito que poderamos descartar os termos de mais baixa ordem e coecientes do termo de mais alta ordem. para mostrar formalmente que, por exemplo,

1 2 2n

3n = (n2 ):

deniremos constantes positivas c1 , c2 e n 0 tais que:

c1 n

1 2 2
n

3n c2 n2 ,
2

para todo n

n0 .

Dividindo por n : 1 2 3
n

c1

c2 , 1

a desigualdade do lado direito pode ser considerada vlida para n escolhendo c2 para n

1/2,
n

e a do lado esquerdo pode ser considerada vlida

escolhendo c1

1/14. = 1/14,
temos:

para c2

= 1/2,

=7

e c1

1 2 2n

3n = (n2 )
2010/2 17 / 38

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

Notao assinttica:

(theta)
3

tambm possvel mostrar que 6n

= (n2 ):

suponha, a ttulo de contradio, que existam c2 e n0 tais que: 6n

c2 n2

para n

n0 .

mas (aps dividir por n

2 e manipular a desigualdade),

c2 /6

no

vlido para n grande pois c2 constante

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

18 / 38

Exemplo de uso da notao assinttica


Exemplo: para dois algoritmos quaisquer, considere as funes de ecincia:

f (n) = 1000n g (n ) = n 2
= 1.000 f (n )

f g

maior do que g para valores pequenos de n cresce mais rapidamente, e nalmente resultar em maiores valores,

sendo o ponto de mudana n

segundo as notaes vistas, se existe um n0 a partir do qual c constantes e considerando n0


1000

pelo menos to grande quanto g (n ), ento, desprezando os fatores

n = O (n2 ) ou f (n) = O (n2 )


1000, = 10

= 1.000
n

e c

= 1:

o que signica que para n 1000n .

2 um limitante superior para

o mesmo aconteceria para n0

e c

= 100.
2010/2 19 / 38

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

Notao assinttica: relaes e teorema

Analogias
O

Teorema (1)
para duas funes g n f f

( )
e

e f

(n), f (n) = (g (n))

se e somente se:

(n) = O (g (n)) (n) = (g (n)).

Utilidade
utilizamos o teorema para demonstrar

restritos a partir de limites assintotitos superiores e inferiores.


03Anlise de Algoritmos (p3)

limites assintoticamente
2010/2 20 / 38

Moacir Ponti Jr. (ICMCUSP)

Sumrio

Anlise Assinttica de Algoritmos Crescimento de funes Notao assinttica O Notao assinttica Notao assinttica Notaes o e Regras

Uso e relao entre as notaes O ,

2 3

Funes

Dicas de anlise na prtica

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

21 / 38

Notaes

o e :

notaes estritas

Muito parecidas com as notaes O e

respectivamente. No

entanto, a desigualdade deve valer para qualquer constante c : Para uma funo g (n ), denotamos o (g (n )) o conjunto de funes :
o g n

( ( )) = {f (n) : para qualquer c > 0 e n0 > 0 tais 0 f (n ) < c g (n ) para todo n n0 } (g (n))
o conjunto de funes :

que

(g (n)) = {f (n) : para qualquer c > 0 e n0 > 0 tais 0 c g (n ) < f (n ) para todo n n0 }
f

que

(n) (g (n))

se e somente se g (n )

o (f (n))
f (n) lim n g (n)

Intuitivamente, (se o limite existe), para

(g (n)),

f (n) lim n0 g (n)

, e

para o (g (n ))

=0
2010/2 22 / 38

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

Notaes

oe
2
o n

Exemplo 1 : 2n

2n 2n2 n2 2

< c n3
3 < cnn 2

n2 sempre menor que n3 para um n sucientemente grande, preciso apenas determinar n0 em funo de c

( 3)

<c n <c 2
e c

2 n

a desigualdade vale para n0 Exemplo 2 : 2n

=2

3 no

o n

( 3)

(ignorando as constantes) no podemos dizer que que

3 para um

Exemplo 3:

1 2 no 2

1 2 2n

o (n

(n2 ),

n sucientemente grande. n
mas

n3 sempre menor

2 ), e 1 2 no 2

(n2 )
2010/2 23 / 38

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

Sumrio

Anlise Assinttica de Algoritmos Crescimento de funes Notao assinttica O Notao assinttica Notao assinttica Notaes o e Regras

Uso e relao entre as notaes O ,

2 3

Funes

Dicas de anlise na prtica

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

24 / 38

Notao assinttica

Algumas regras
Se T1 (n )

= O (f (n)) e T2 (n) = O (g (n)), ento: ( ) + T2 (n) = max [O (f (n)), O (g (n))] e T1 (n ) T2 (n ) = O (f (n ) g (n )).


T1 n

logk n

= O (n )

para qualquer k pois logaritmos crescem muito

lentamente

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

25 / 38

Notao assinttica

... Algumas regras


Se T (x ) um polinmio de grau n , ento:
T x

( ) = (x n ).

Relembrando
um polinmio de grau n uma funo na forma:
f

(x ) = an x n + an1 x n1 + + a0 x + a0

classicao em funo do grau


0: polinmio constante 1: funo am (ou polinmio linear, se 2: polinmio quadrtico 3: polinmio cbico

a0 = 0)

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

26 / 38

Funes importantes (1/3)


Constante:

independente do tamanho de de vezes.

n, operaes executadas um nmero xo

Logartmica:

logb n

tpica de algoritmos que resolvem um problema transformando-o em problemas menores. para dobrar log2 preciso fazer log2 . a base tambm muda pouco os valores: log2

n2

n = 1.000.000.
Linear:

n 20 e log10 n 6 para

em geral, uma certa quantidade de operaes realizada sobre cada um dos elementos de entrada. melhor situao para quando preciso processar entrada e obter

n elementos de sada.

n elementos de

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

27 / 38

Funes importantes (2/3)


Log linear (ou n-log-n):

n logb n

tpico de algoritmos que resolvem um problema transformando-o em problemas menores, resolvem cada um de forma independente e depois ajunta as solues. para dobrar

Quadrtica:

n2

n log2 n preciso fazer aproximadamente n log2 2n.

ocorre frequentemente quando os dados so processados aos pares, com laos de repetio aninhados. sempre que pequeno.

n dobra, o tempo de execuo multiplicado por 4.

podem ser teis para resolver problemas de tamanho relativamente

Cbica:

n3

ocorre em multiplicaes de matrizes, com trs estruturas de repetio aninhadas. sempre que

n dobra, o tempod e execuo multiplicado por 8.


03Anlise de Algoritmos (p3) 2010/2 28 / 38

podem ser teis para resolver problemas de tamanho relativamente pequeno (ou quando no se tem outra opo!).

Moacir Ponti Jr. (ICMCUSP)

Funes importantes (3/3)


Exponencial:

an

geralmente ocorre quando se usa uma soluo de fora bruta. n para o caso 2 , sempre que dobra, o tempo de execuo elevado ao

quadrado. no so teis do ponto de vista prtico.

Fatorial:

n!

muitas vezes dito ter complexidade exponencial, apesar de o fatorial ter comportamento muito pior. geralmente ocorre quando se usa uma soluo de fora bruta.

n = 20, n! 2, 4 1018 , 47  para o dobro n = 40, n! 8, 2 10 .


para

denitivamente, no so teis do ponto de vista prtico.

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

29 / 38

Funes e tempo cronolgico

Fonte da gura: notas de aula do Prof. Ricardo Campello

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

30 / 38

Exerccio
Um algoritmo tradicional e muito utilizado possui complexidade n enquanto um algoritmo novo proposto da ordem de n log n : 1,5

1,5 ,

f (n) = n g (n) = n log n

Qual algoritmo adotar? Uma possvel soluo:


f

1,5 (n) = n n = n0,5

(n0,5 )2 = n

g n

( ) = n log n = log n (log n)2 = log2 n n

Como n cresce mais rapidamente do que qualquer potncia de log, o algoritmo novo mais eciente.

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

31 / 38

Dicas de anlise na prtica


Se f (n ) for um polinmio de grau d ento f (n ) O (n
despreze os termos de menor ordem despreze os fatores constantes

d)

Use a menor classe de funes possvel


2

n O (n), ao invs de 2n O (2n)

Use a expresso mais simples


3

n + 5 O (n), ao invs de 3n + 5 O (3n)

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

32 / 38

Dicas de anlise na prtica

Exemplo:

n2

vs.

10

5 2

n + 108 n

vs.

10

2 2

n + 105
2010/2 33 / 38

Fonte da gura: notas de aula do Prof. Ricardo Campello Moacir Ponti Jr. (ICMCUSP) 03Anlise de Algoritmos (p3)

Dicas de anlise na prtica


H casos em que a anlise assinttica ignora fatores assintoticamente irrelevantes, mas relevantes na prtica: em especial quando temos interesse em entradas relativamente pequenas. Ao comparar dois algoritmos com tempo de execuao:

f (n) = 10100 n, e g (n) = 10n log n

pela anlise assinttica, o primeiro mais eciente No entanto, 10


10

100 o nmero estimado (por alguns astrnomos) como

o limite superior para a quantidade de tomos no universo observvel

n log n > 10100 n apenas para n > 21099

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

34 / 38

Dicas de anlise na prtica

comandos dentro da repetio multiplicada pelo nmero de vezes que executada.


o exemplo abaixo

Repeties:

o tempo de execuo pelo menos o tempo dos

O (n )

para i de 1 ate n faca a = a*i

Repeties aninhadas:
o exemplo abaixo

anlise feita de dentro para fora

o tempo total o tempo de execuo dos comandos multiplicado pelo produto do tamanho de todas as repeties.

O (n 2 )

para i de 1 ate n faca para j de 0 ate n-1 faca a = a*(i+j)


Moacir Ponti Jr. (ICMCUSP) 03Anlise de Algoritmos (p3) 2010/2 35 / 38

Dicas de anlise na prtica

Condies:
seno

o tempo nunca maior do que o tempo do teste mais o

tempo do maior entre os comandos dentro do bloco do ento e do


o exemplo abaixo

O (n )

se (a < b) entao a = a + 1 senao para i de 1 ate n-1 faca a = a*i

Chamadas subrotinas:
a subrotina deve ser analisada primeiro e depois ter suas unidades de tempo incorporadas ao programa que a chamou

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

36 / 38

Exerccio
Quantas unidades de tempo so necessrias para rodar o algoritmo abaixo? Qual a ordem de complexidade de tempo?

01 inicio 02 i, j: inteiro 03 A: vetor inteiro de n posicoes 04 i = 1 05 06 enquanto (i < n) faca 07 A[i] = 0 08 i = i + 1 09 10 para i = 1 ate n faca 11 para j = 1 ate n faca 12 A[i] = A[i] + (i*j) 13 fim
Moacir Ponti Jr. (ICMCUSP) 03Anlise de Algoritmos (p3) 2010/2 37 / 38

Bibliograa
CORMEN, T.H. et al. Algoritmos: Teoria e Prtica (Caps. 13). Campus. 2002. ZIVIANI, N. Projeto de algoritmos: com implementaes em Pascal e C (Cap. 1). 2.ed. Thomson, 2004. FEOFILOFF, P. Minicurso de Anlise de Algoritmos, 2010. Disponvel em:

http://www.ime.usp.br/~pf/livrinho-AA/.

DOWNEY, A.B. Analysis of algorithms (Cap. 2), Em: Computational Modeling and Complexity Science. Disponvel em:

http://www.greenteapress.com/compmod/html/book003.html
ROSA, J.L. Notas de Aula de Introduo a Cincia de Computao II. Universidade de So Paulo. Disponvel em:

http://coteia.icmc.usp.br/mostra.php?ident=639
CAMPELLO, R. Notas de Aula de Introduo a Cincia de
Computao II. Universidade de So Paulo. Disponvel em:

http://coteia.icmc.usp.br/mostra.php?ident=611
Moacir Ponti Jr. (ICMCUSP) 03Anlise de Algoritmos (p3) 2010/2 38 / 38

You might also like