Você está na página 1de 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

Uso e relao entre as notaes O ,


Notaes o e

Regras

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.

Moacir Ponti Jr. (ICMCUSP)

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

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)

complexidade de tempo como uma funo do


tamanho da entrada,

caracteriza a

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

Uso e relao entre as notaes O ,


Notaes o e

Regras

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 :

( ( )) = {f (n) : existem constantes positivas c e n0


0 f (n ) c g (n ) para todo n n0 }

O g n

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

g (n)

para um valor de n sucienemente grande


podemos dizer que f (n )
f

(n) = O (g (n))

Moacir Ponti Jr. (ICMCUSP)

O (g (n)),

mas em geral se escreve

(abuso da notao de igualdade, no simtrico)

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 )

Exemplo: 2n

= O (n3 )

 podemos pensar nessa equao


como sendo 2n

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

Moacir Ponti Jr. (ICMCUSP)

3
O (n )

O (n 3 )

ou

 a taxa de crescimento de 2n

menor ou igual
03Anlise de Algoritmos (p3)

3
taxa de n

2010/2

7 / 38

O (big oh)  exemplos

Notao assinttica:
Exemplo 1: 2n

+ 10

O (n )

podemos realizar uma manipulao para encontrar

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

c e n0 :

a armao vlida para

Exemplo 2: n

c = 3 e n0 = 10.

( )

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

+ 20n2 + 5

preciso encontrar

O (n

3)

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

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

como 3

+5

Exemplo 4: 3 log n

preciso encontrar
todo

n n0

note que 3 log

O (log n )

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

n + 5 (3 + 5) log n se n > 1 (log 1 = 0)


c = 8 e qualquer n0 2

basta tomar, por exemplo,

Exemplo 5: 2
preciso

n +2

(2n )

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

note que 2

n+2

= 22 2n = 4 2n

assim, basta tomar, por exemplo,

Moacir Ponti Jr. (ICMCUSP)

c = 4 e qualquer n0

03Anlise de Algoritmos (p3)

2010/2

9 / 38

*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 )

signica que existe um h (n )

O (n2 )

de forma que f (n )

= n 3 + h (n ).

Exemplo 7:
n

+ O (n) = O (n2 )

signica que, para qualquer f (n )

2
forma que n

O (n)

existe h (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

Uso e relao entre as notaes O ,


Notaes o e

Regras

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 :

(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

(g (n))

tais que

se existem uma

constante positiva c tais que ela possa estar limitada por c

g (n )

para

um valor de n sucienemente grande

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

g (n )

ou acima

desse.
Exemplo: 3n

+ n = (n)

 podemos pensar nessa equao


como sendo 3n

+ n (n),

 ou seja, a taxa de crescimento


de 3n

+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))

c lg(n)

para c

>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

c3

para n0

=1

temos de pegar c

Moacir Ponti Jr. (ICMCUSP)

=3

03Anlise de Algoritmos (p3)

2010/2

14 / 38

Notao assinttica:

(theta)

Para uma dada funo g (n ), denotamos

(g (n))

o conjunto de

funes :

(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

(g (n))

que

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)

dentro de um fator constante.

limite
assintoticamente restrito para
( )

g n

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

para todo n

n0 .

1 2
2

3n c2 n2 ,

Dividindo por n :

c1

1
2

3
n

c2 ,

a desigualdade do lado direito pode ser considerada vlida para n


escolhendo c2
para n

para c2

1/2,

escolhendo c1

= 1/2,

Moacir Ponti Jr. (ICMCUSP)

=7

e a do lado esquerdo pode ser considerada vlida

e c1

1/14.
= 1/14,

temos:

03Anlise de Algoritmos (p3)

1 2
2n

3n = (n2 )
2010/2

17 / 38

Notao assinttica:

(theta)

tambm possvel mostrar que 6n

6= (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

maior do que g para valores pequenos de n

cresce mais rapidamente, e nalmente resultar em maiores valores,

sendo o ponto de mudana n

= 1.000

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

f (n )

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


constantes e considerando n0

= 1.000

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

e c

= 1:

1000

o que signica que para n

1000,

2 um limitante superior para

1000n .
o mesmo aconteceria para n0

Moacir Ponti Jr. (ICMCUSP)

= 10

e c

= 100.

03Anlise de Algoritmos (p3)

2010/2

19 / 38

Notao assinttica: relaes e teorema

Analogias
O

Teorema (1)

( )

para duas funes g n


f

(n) = O (g (n))

(n) = (g (n)).

e f

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

se e somente se:

Utilidade
utilizamos o teorema para demonstrar

limites assintoticamente

restritos a partir de limites assintotitos superiores e inferiores.

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

20 / 38

Sumrio

Anlise Assinttica de Algoritmos


Crescimento de funes
Notao assinttica O
Notao assinttica
Notao assinttica

Uso e relao entre as notaes O ,


Notaes o e

Regras

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 :

( ( )) = {f (n) : para qualquer c > 0 e n0 > 0 tais


0 f (n ) < c g (n ) para todo n n0 }

o g n

(g (n))

o conjunto de funes :

(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 )

que

o (f (n))

Intuitivamente, (se o limite existe),


para

(g (n)),

f (n)
lim
n0 g (n)

Moacir Ponti Jr. (ICMCUSP)

, e

para o (g (n ))

03Anlise de Algoritmos (p3)

f (n)
lim
n g (n)

=0
2010/2

22 / 38

Notaes

oe

Exemplo 1 : 2n

2n
2n2
n2

( 3)

o n

n2 sempre menor que n3 para um n sucientemente grande, preciso


apenas determinar n0 em funo de c

< c n3
3
< cnn2

<c n

2
n

<c

a desigualdade vale para n0


Exemplo 2 : 2n

3 no

e c

=2

( 3)

o n

(ignorando as constantes) no podemos dizer que


que

3 para um

Exemplo 3:

1 2
2n

1 2
no
2

o (n

Moacir Ponti Jr. (ICMCUSP)

n sucientemente grande.

(n2 ),

mas

2 ), e 1 2 no
2

n3 sempre menor

(n2 )

03Anlise de Algoritmos (p3)

2010/2

23 / 38

Sumrio

Anlise Assinttica de Algoritmos


Crescimento de funes
Notao assinttica O
Notao assinttica
Notao assinttica

Uso e relao entre as notaes O ,


Notaes o e

Regras

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:

( ) = (x n ).

T x

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

a0 = 0)

2: polinmio quadrtico
3: polinmio cbico

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

26 / 38

Funes importantes (1/3)


Constante:

independente do tamanho de

n, operaes executadas um nmero xo

de vezes.

Logartmica:

logb n

tpica de algoritmos que resolvem um problema transformando-o em


problemas menores.

n2

para dobrar log2


preciso fazer log2
.
a base tambm muda pouco os valores: log2

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

Moacir Ponti Jr. (ICMCUSP)

n elementos de sada.

03Anlise de Algoritmos (p3)

n elementos de

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:

n log2 n preciso fazer aproximadamente n log2 2n.

n2

ocorre frequentemente quando os dados so processados aos pares,


com laos de repetio aninhados.
sempre que

n dobra, o tempo de execuo multiplicado por 4.

podem ser teis para resolver problemas de tamanho relativamente


pequeno.

Cbica:

n3

ocorre em multiplicaes de matrizes, com trs estruturas de repetio


aninhadas.
sempre que

n dobra, o tempod e execuo multiplicado por 8.

podem ser teis para resolver problemas de tamanho relativamente


pequeno (ou quando no se tem outra opo!).

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

28 / 38

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

1,5 ,

enquanto um algoritmo novo proposto da ordem de n log n :


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

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

g 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

d)

despreze os termos de menor ordem


despreze os fatores constantes

Use a menor classe de funes possvel

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

Use a expresso mais simples

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

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


Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

33 / 38

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

100 o nmero estimado (por alguns astrnomos) como

No entanto, 10

o limite superior para a quantidade de tomos no universo observvel

n log n > 10100 n apenas para n > 21099

10

Moacir Ponti Jr. (ICMCUSP)

03Anlise de Algoritmos (p3)

2010/2

34 / 38

Dicas de anlise na prtica

Repeties:

o tempo de execuo pelo menos o tempo dos

comandos dentro da repetio multiplicada pelo nmero de vezes que


executada.
o exemplo abaixo

O (n )

para i de 1 ate n faca


a = a*i

Repeties aninhadas:

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 exemplo abaixo

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:

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


seno
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

Você também pode gostar