You are on page 1of 30

Anlise e Projeto de Algoritmos

Prof. Eduardo Barrre

eduardo.barrere@ice.ufjf.br www.barrere.ufjf.br www.ufjf.br/pgcc www.dcc.ufjf.br

Consumo de tempo assinttico


Seja A um algoritmo para um problema P. A quantidade de tempo que A consome para processar uma dada instncia de P depende da mquina usada para executar A. Mas o efeito da mquina se resume a uma constante multiplicativa: se A consome tempo t numa determinada mquina, consumir tempo 2t numa mquina duas vezes mais lenta e t/2 numa mquina duas vezes mais rpida. Para eliminar o efeito da mquina, basta discutir o consumo de tempo de A sem as constantes multiplicativas. A notao assinttica ( - micron, - mega, - teta) ideal para fazer isso.
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Comparao assinttica de funes

desejvel exprimir o consumo de tempo de um algoritmo de uma maneira que no dependa da linguagem de programao, nem dos detalhes de implementao, nem do computador empregado. Para tornar isto possvel, preciso introduzir um modo grosseiro de comparar funes. (dependncia entre o consumo de tempo de um algoritmo e o tamanho de sua entrada)

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Comparao assinttica de funes

Essa comparao s leva em conta a velocidade de crescimento das funes. Assim, ela despreza fatores multiplicativos (pois a funo 2n2, por exemplo, cresce to rpido quanto 10n2) e despreza valores pequenos do argumento (a funo n2 cresce mais rpido que 100n, embora n2 seja menor que 100n quando n pequeno). Dizemos que esta maneira de comparar funes assinttica. H trs tipos de comparao assinttica: uma com sabor de , outra com sabor de , e uma terceira com sabor de =.

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Anlise assinttica: ordens , Omega e Theta


Ao ver uma expresso como n+10 ou n+1, a maioria das pessoas pensa automaticamente em valores pequenos de n, prximos de zero. A anlise de algoritmos faz exatamente o contrrio: ignora os valores pequenos e concentra-se nos valores enormes de n. Para esses valores, as funes: n , (3/2)n , 9999n , n/1000 , n+100n , etc. crescem todas com a mesma velocidade e portanto so todas "equivalentes". Esse tipo de matemtica, interessado somente em valores enormes de n, chamado assinttica. Nessa matemtica, as funes so classificadas em "ordens"; todas as funes de uma mesma ordem so "equivalentes". As cinco funes acima, por exemplo, pertencem mesma ordem.

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao (micron grego maisculo) (big O)


Convm restringir a ateno a funes assintoticamente no negativas, ou seja, funes f tais que f(n) 0 para todo n suficientemente grande. Mais explicitamente: f assintoticamente no negativa se existe n0 tal que f(n) 0 para todo n maior que n0.

Definio: Dadas funes assintoticamente no negativas f e g, dizemos que f est na ordem de g e escrevemos f = (g) se f(n) c g(n) para algum c positivo e para todo n suficientemente grande. Em outras palavras, existe um nmero positivo c e um nmero n0 tais que f(n) c g(n) para todo n maior que n0.

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Diagrama

F est em (G) tem sabor de F G tem sabor de F no cresce mais que G conceito sob medida para tratar de consumo de tempo de algoritmos
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Notao : Exemplo 1

n2 +10n = (n2) (f = (g))


Prova: se n 10 ento n2 +10n 2*n2 resumo: n2 +10n 2n2 para todo n 10

f(n) c g(n)

Como sabemos que 2 e 10 so bons valores para c e N? queremos: n2 +10n c.n2 dividindo por n2, temos: 1+10/n c se n 10 ento 1+10/n 2 parece que basta tomar c 2 e N 10

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 2

9n+9 = (n2)

Prova: para todo n 1: 9n+9 18n2

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 3

100n est em (n2)


Prova: Para todo n 100 100n n * n = n2 = 1 * n2

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 4

2n3 + 100n est em (n3)


Prova: Para todo n 1 2n3 + 100n 2n3 + 100n3 102n3 Outra prova: Para todo n 100 2n3 + 100n 2n3 + n * n * n 3n3

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 5

lg n est em (n)
Prova: para todo n 1 n 2n lg n lg 2n lg n n

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 6

n1.5 est em (n2)


Prova: para todo n 1 n1.5 n0.5*n1.5 n2

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 7

Suponha que f(n) = 2n + 3n + 4 e g(n) = n. Observe que:

2n2 + 3n + 4 2n2 + 3n2 + 4n2 = 9n2 desde que n 1.


Resumindo, f(n) 9 g(n) para todo 1. Portanto, f(n) = (g(n)).

(f = (g))

f(n) c g(n)

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 8

Suponha que f(n) = 3 + 2/n e que g(n) = n0, ou seja, g(n)=1. Ento, para n 2 : 3 + 2/n 3 + 1 = 4 = 4n0

Resumindo, f(n) 4 g(n) para todo n 2. Portanto, f(n) = (g(n)).

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Algumas Operaes com a Notao O

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplo 9
Procedure Verifica_Item(Lista: TipoLista; x: TipoItem; pos: integer); Var i: integer; Begin i:=1; O(1) achou := false; while (i <= Lista.Tamanho) and not achou do O(N) if Lista.Item[i] = x then achou := true; if achou then O(1) pos := i else for i:= Lista.Tamanho +1 to MaxTam; O(N) Lista.Item[i] := x; O(1) f(N) = O(7 * O(1) + 2*O(N)) = O(O(1) + (O(N)) = O(N)
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Notao Assinttica
Terminologia de classes mais comuns de funes:

Logartmica - O(log n) Linear - O(n) Quadrtica - O(n2) Polinomial O(nk), com k1 Exponencial O(an), com a>1

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Ordens mais comuns


2n (exponencial) n2 (quadrtica)

n log n f n (linear) log n (logartmica) 1 (constante)

Fonte: Sahni, "Data Structures, Algorithms and Applications in C++"


Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Eficincia de um Algoritmo
Trs algoritmos para calcular: 1 + 2 + n para um n > 0

O(n)

O(n2)

O(1)

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Eficincia de um Algoritmo

O nmero de operaes em funo de n


Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Eficcia

O(n)

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Eficcia

O(n2)
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Notao (mega)

Dadas funes F e G de N> em R, dizemos que F est em (G) se existe c em N> tal que: F(n) c G(n), para todo n suficientemente grande. claro que inversa de O, ou seja, uma funo F est em (G) se e somente se G est em O(F) (F=(G) se e somente se G=O(F)) Exemplo: n3 + 100n est em (n3), pois n3 + 100n 1n3, para todo n (n 1).

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao : Exemplos

n2 est em (n), pois n2 n n lg n est em (n). De fato, para todo n2 tem-se: lg n 1, portanto n lg n n. ..........................

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Notao (Teta)

Dizemos que f = (g) se f = (g) e f = (g)

Provar que:
Para qualquer a em R> e qualquer b em R, a funo an2 + bn est em (n2).

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre

Consumo de tempo de algoritmos


Seja A um algoritmo para um problema cujas instncias tm tamanho n. Se a funo que mede o consumo de tempo de A no pior caso est em (n2), por exemplo, podemos usar expresses como: A consome (n2) unidades de tempo no pior caso e A consome tempo (n2) no pior caso.

Podemos usar expresses semelhantes com ou no lugar de e melhor caso no lugar de pior caso.
APA / Barrre

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

Consumo de tempo de algoritmos


Algoritmo linear: consome (n) unidades de tempo no pior caso n multiplicado por 10 -> tempo multiplicado por 10 algoritmos lineares so considerados muito rpidos Algoritmo quadrtico: consome (n2) no pior caso n multiplicado por 10 -> tempo multiplicado por 100 se o tamanho multiplicado por uma constante c, o consumo multiplicado por c2.
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Consumo de tempo de algoritmos


Algoritmo ene-log-ene: consome (n log n) unidades de tempo no pior caso n multiplicado por 2 -> tempo multiplicado por 2n se o tamanho multiplicado por uma constante c, o consumo multiplicado por c e acrescido de um pouco mais que cn.

Algoritmo polinomial: consome tempo O(nk) para algum k exemplos: O(n), O(n lg n), O(n2), O(n100) algoritmos polinomiais so considerados rpidos.
Programa de Ps-Graduao em Cincia da Computao DCC UFJF APA / Barrre

Consumo de tempo de algoritmos


Algoritmo exponencial: consome tempo (an) para algum a > 1 exemplos: (2n), (1.1n) n multiplicado por 10 -> tempo elevado a 10.

Programa de Ps-Graduao em Cincia da Computao DCC UFJF

APA / Barrre