5cop096 teoria da computação - sylvio barbon junior · 5cop096 –teoria da computação aula 3...

25
5COP096 –Teoria da Computação Aula 3 –Comportamento Assintótico 5COP096 Teoria da Computação Teoria da Computação Aula 3 Prof. Dr. Sylvio BarbonJunior 1 Sylvio Barbon Jr – [email protected]

Upload: nguyenkiet

Post on 11-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

5COP096 Teoria da ComputaçãoTeoria da Computação

Aula 3

Prof. Dr. Sylvio Barbon Junior

1Sylvio Barbon Jr – [email protected]

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Sumário

1) Exercícios Medida de Tempo de Execução.

2) Comportamento Assintótico de Funções.

3) Exercícios sobre Comportamento Assintótico de Funções.

2Sylvio Barbon Jr – [email protected]

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Medida de Tempo de Execução1- Calcule a função de tempo de execução do seguinte código:

(1) menor= i;(2) for(j = i+1; j < n; j++)(3) if (A[j] < A[menor])(4) menor = j;(5)

3Sylvio Barbon Jr – [email protected]

2 – Obtenha o T(n) do seguinte algoritmo:

(1) for(int i=0; i<n-1; i++)(2) int min=1;(3) for(int j=i+1; j<n; j++)(4) if(v[j]<v[min])(5) min = j;(6) int x = v[min];(7) v[min] = v[i];(8) v[i] = x;(9)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Medida de Tempo de Execução3- Qual a função de tempo de execução do seguinte código:

(1) void pesquisa(n)(2) if(n<=1)(3) n+1;(4) else (5) pesquisa(n/3)(6)

4Sylvio Barbon Jr – [email protected]

(6) (7)

4- Descreva a função de tempo de execução do seguinte código:(1) float RaizQ(int x, float x0, float e)(2) if(fabs(x0*x0-x)<=e)(3) return x0;(4) else(5) RaizQ(x, ((x0*x0)+x)/(2*x0) , e);(6) (7)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções-O custo para obter uma solução para um dado problema aumenta com o tamanho n do problema;

-O parâmetro n fornece uma medida da dificuldade para se resolver o problema;

-A escolha de um algoritmo se torna relevante quando o problema tem grandes valores para n, para isso estuda-se o comportamento assintótico das funções de custo.

5Sylvio Barbon Jr – [email protected]

para n, para isso estuda-se o comportamento assintótico das funções de custo.

-O comportamento assintótico de f(n) representa o limite do comportamento, quando n cresce.

Uma função f(n) domina assintoticamente outra função g(n) se existem duas constantes positivas c e m tais que, para n ≥ m, temos |g(n) | ≤ c|f(n)|

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções

DEFINIÇÃO DA NOTAÇÃO ”O” (BIG Oh)Uma função g(n) é O(f(n)) se existirem duas constantes c e m tais que g(n) ≤ c

f(n), para todo n ≥ m

6Sylvio Barbon Jr – [email protected]

Dominação Assintótica de f(n) sobre g(n)

ou

g(n) = O(f(n))

Lê –se: g(n) é da ordem máxima f(n)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesExemplo: Seja g(n) = (n+1)². Logo g(n) é O(n²), quando m =1 e c=4, isso porque (n+1)² ≤ 4n² para n ≥ 1.

Exemplo: A função g(n) = 3n³+2n²+n é O(n³), para confirmar tal afirmação basta mostrar que 3n³+2n²+n ≤ 6n³, para n ≥ 0. A função g(n) = 3n³+2n²+n é também O(n4), entretanto essa afirmação é fraca, quando comparada a g(n) ser O(n³).

7Sylvio Barbon Jr – [email protected]

Definições:

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções

Definição da notação “Ω” (Big Omega) Uma função g(n) é Ω(f(n)) se existirem duas constantes c e m tais que g(n) ≥ c f(n), para

todo n ≥ m.

8Sylvio Barbon Jr – [email protected]

Exemplo: Para mostrar que g(n) = 3n³+2n² éΩ(n³), basta fazer c = 1, e então 3n³+2n² ≥ n³ para n ≥

0.

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções

Definição da notação “Θ” (Big Theta) Uma função g(n) é Θ(f(n)) se existirem duas constantes positivas c1, c2 e m tais que 0 ≤

c1f(n) ≤ g(n) ≤ c2f(n), para todo n ≥ m.

9Sylvio Barbon Jr – [email protected]

Exemplo: Para mostrar que g(n) = n²/3 - 2n éΘ(n²), basta fazer c1, c2 e m

tais que:

C1n² ≤ n²/3 - 2n ≤ c2n²

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções-O limite assintótico superior definido pela notação O pode ser assintoticamente firme

(tight) ou não.

Assintóticamente FIRME2n² = O(n²)

10Sylvio Barbon Jr – [email protected]

2n² = O(n²)

Não é Assintóticamente FIRME2n = O(n²)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções

Definição da notação “o” (Little oh) Uma função g(n) é o(f(n)) se existirem duas constantes c > 0 tais que 0 ≤ g(n) < c

f(n), para todo n ≥ m

Exemplo: 2n = o(n²), mas 2n² ≠ o(n²)

11Sylvio Barbon Jr – [email protected]

Definição da notação “ω” (Little omega) Uma função g(n) é ωωωω(f(n)) se existirem duas constantes c > 0 tais que 0 ≤ c f(n) <

g(n), para todo n ≥ m

Exemplo: n²/2 = ω(n), mas n²/2 ≠ ω(n²)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de Funções

12Sylvio Barbon Jr – [email protected]

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de comportamento Assintótico

Se f é a função de complexidade para o algoritmo F, então O(f) é considerada a complexidade assintótica ou o comportamento assintótico do algoritmo F.

Se g é a função de complexidade para o algoritmo G, então O(g) é considerada a complexidade assintótica ou o comportamento assintótico do algoritmo G.

13Sylvio Barbon Jr – [email protected]

a complexidade assintótica ou o comportamento assintótico do algoritmo G.

f(n) = 3g(n)

F leva 3x o tempo de G,

Porém são de mesma classeO(g(n)) = O(f(n))

* Ou seja, nem sempre a complexidade assintótica é o melhor fator de

comparação entre algoritmos.

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de comportamento Assintótico

Considere o problema f(n) = O(n) e g(n) = O(n²), com f(n) = 100n e g(n) = 2n², qual dos dois algoritmos é o melhor (menor complexidade)?

-Depende do tamanho do problema!

14Sylvio Barbon Jr – [email protected]

- Para problemas n < 50, n² é superior! Ou seja, para pequenas entradas o tempo O(n²) é melhor!

- Caso o n cresça, o ideal seria o problema de classe O(n).

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

15Sylvio Barbon Jr – [email protected]

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

1) f(n) = O(1): Complexidade Constante, independente do tamanho de n, o algoritmo é executado um número fixo de vezes. Exemplos, comparação de números binários, verificar se o topo de uma pilha tem um elemento negativo, verificar se um número binário é par ou ímpar.

16Sylvio Barbon Jr – [email protected]

2) f(n) = O(log n): Complexidade Logarítmica, característica de algoritmos que transformam o problema em menores. Quando n é 1000 e a base do logaritmo é 2, temos log2 n ≈ 10, quando n é 1.000.000, log2 n ≈ 20. Exemplo, pesquisa binária.

3) f(n) = O(n): Complexidade Linear, um pequeno trabalho é realizado sobre cada elemento da entrada. Cada vez que n dobra, o tempo de execução também dobra. Exemplo, percorrer um vetor.

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

4) f(n) = O(nlogn): Essa complexidade ocorre geralmente quando o problema é quebrado em menores, resolvendo cada um independentemente, ao final todos são acumulados. Quando n é 1.000.000, nlog2n ≈ 20.000.000, quando n é 2.000.000, nlog2n ≈ 42.000.000, pouco mais que o dobro. Exemplo algoritmos “dividir e conquistar”.

17Sylvio Barbon Jr – [email protected]

dobro. Exemplo algoritmos “dividir e conquistar”.

5) f(n) = O(n²): Complexidade Quadrática, quando itens são processados aos pares, como um laço dentro de outro. Esses algoritmos são úteis para resolver problemas pequenos. Exemplo, varredura de matriz.

6) f(n) = O(n³): Complexidade Cúbica, úteis para resolver problemas pequenos. Exemplo, multiplicação de matrizes.

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

18Sylvio Barbon Jr – [email protected]

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

19Sylvio Barbon Jr – [email protected]

f(n) = O(n) f(n) = O(n²) f(n) = O(n³)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

20Sylvio Barbon Jr – [email protected]

f(n) = O(n²)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

21Sylvio Barbon Jr – [email protected]

f(n) = O(nLogn) e f(n) = O(n³)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

7) f(n) = O(2n): Complexidade Exponencial, algoritmos dessa complexidade não são praticamente viáveis. Exemplo, resolução do problema do caixeiro viajante com programação dinâmica.

8) f(n) = O(n!): Complexidade Fatorial, algoritmos desta complexidade são, na

22Sylvio Barbon Jr – [email protected]

8) f(n) = O(n!): Complexidade Fatorial, algoritmos desta complexidade são, na maioria dos casos, inviáveis. Exemplo, algoritmos de força bruta.

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

Considere o problema f(n) = 2n e g(n) = n5 + 20n, qual a complexidade e qual o cenário ideal para cada problema.

f(n) é O(2n) – Complexidade Exponencial, ideal para n < 23g(n)é O(n5) – Complexidade n5 , ideal para n ≥ 23

23Sylvio Barbon Jr – [email protected]

g(n)é O(n5) – Complexidade n5 , ideal para n ≥ 23n 2^n n^5+ 20n

1 2 21

2 4 72

3 8 303

5 32 3225

10 1024 100200

15 32768 759675

20 1048576 3200400

21 2097152 4084521

22 4194304 5154072

23 8388608 6436803

25 33554432 9766125-5000000

0

5000000

10000000

15000000

20000000

25000000

30000000

35000000

40000000

0 5 10 15 20 25 30

2^n

n^5+ 20n

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Comportamento Assintótico de FunçõesClasses de Comportamento Assintótico

1) Considere os algoritmos do inicio da aula e descreva quais são as respectivas complexidades.

2) Sejam duas funções não negativas f(n) e g(n). Diz-se que f(n) = Θ(g(n)) se f(n) = O(g(n)) e g(n) = O(f(n)). Mostre que max(f(n), g(n)) = Θ(f(n)+g(n)).

24Sylvio Barbon Jr – [email protected]

f(n) = O(g(n)) e g(n) = O(f(n)). Mostre que max(f(n), g(n)) = Θ(f(n)+g(n)).

3) Considere os algoritmos A e B com funções de complexidade a(n)=n²- n +

549 e b(n) = 49n + 49, respectivamente. Quais os valores de n pertencentes ao conjunto dos números naturais para os quais A leva menos tempo para executar do que B.

4) Comprove que 2n+1 = O(2n)

5COP096 – Teoria da ComputaçãoAula 3 – Comportamento Assintótico

Referências

Ziviani, Nivio. Projeto de algoritmos: com implementações em Java e C. Thomson Learning, 2007.

Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein. Introduction to algorithms. Ed. Thomas H. Cormen. The MIT press, 2001.