A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www.decom.ufop.br.

Apresentações semelhantes


Apresentação em tema: "Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www.decom.ufop.br."— Transcrição da apresentação:

1 Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo

2 Como escolher o algoritmo mais adequado para uma situação? (Continuação)

3 Comportamento Assintótico de Funções Na aula passada aprendemos como calcular a função de complexidade f(n). Algumas observações: Para valores pequenos de n, praticamente qualquer algoritmo custa pouco para ser executado. Logo: a escolha do algoritmo tem pouquíssima influência em problemas de tamanho pequeno.

4 Comportamento Assintótico de Funções A análise de algoritmos deve ser realizada para valores grandes de n. Para isso, estuda-se o comportamento assintótico das funções de custo. Comportamento de suas funções para valores grandes de n O comportamento assintótico de f(n) representa o limite do comportamento do custo quando n cresce.

5 Comportamento Assintótico de Funções A análise de um algoritmo geralmente conta com apenas algumas operações elementares. A medida de custo ou medida de complexidade relata o crescimento assintótico da operação considerada. Definição: 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)|.

6 Dominação Assintótica f(n) domina assintoticamente g(n) se: Existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f(n)|.

7 Exemplo: Sejam g(n) = (n + 1)² e f(n) = n². As funções g(n) e f(n) dominam assintoticamente uma a outra, desde que |(n + 1)²| 4|n²| para n 1 |n²| |(n + 1)²| para n 0 |g(n)| c x |f(n)|, para n m c = 4 e m =1 |g(n)| c x |f(n)|, para n m c = 1 e m =0 Dominação assintótica

8 Notação O Escrevemos g(n) = O(f(n)) para expressar que f(n) domina assintoticamente g(n). Lê-se g(n) é da ordem no máximo f(n). Exemplo: Quando dizemos que o tempo de execução T(n) de um programa é O(n²), significa que existem constantes c e m tais que, para valores de n m, T(n) cn².

9 Notação O Exemplo gráfico de dominação assintótica que ilustra a notação O. Abaixo, a função f(n) domina assintoticamente a função g(n).

10 Notação O O valor da constante m mostrado é o menor valor possível, mas qualquer valor maior também é válido. Definição: uma função g(n) é O(f(n)) se existem duas constantes positivas c e m tais que g(n) c f(n), para todo n m.

11 Operações com a Notação O

12 Exemplo: g(n) = (n + 1) 2. – Logo g(n) é O(n 2 ), quando m = 1 e c = 4. – Isto porque (n + 1) 2 4n 2 para n 1. Exemplo de Notação O existe c tal que g(n) c f(n) para n m

13 Exemplo: g(n) = n e f(n) = n 2. – Sabemos que g(n) é O(n 2 ), pois para n 1, n n 2. – Entretanto f(n) não é O(n). – Suponha que existam constantes c e m tais que para todo n m, n 2 cn. – Logo c n para qualquer n m, e não existe uma constante c que possa ser maior ou igual a n para todo n. Exemplo de Notação O não existe c tal que g(n) c f(n) para n m

14 Exemplo: g(n) = 3n 3 + 2n 2 + n é O(n 3 ). – Basta mostrar que 3n 3 + 2n 2 + n 6n 3, para n 0. – A função g(n) = 3n 3 + 2n 2 + n é também O(n 4 ), entretanto esta afirmação é mais fraca do que dizer que g(n) é O(n 3 ). Exemplo de Notação O existe c tal que g(n) c f(n) para n m

15 Exemplo: g(n) = log 5 n é O(log n). – O log b n difere do log c n por uma constante que no caso é log b c. – Como n = c logc n, tomando o logaritmo base b em ambos os lados da igualdade, temos que log b n = log b c log c n = log c n x log b c. Exemplo de Notação O existe c tal que g(n) c f(n) para n m

16 Qual a complexidade da função MaxMin1? Seja f(n) o número de comparações entre os elementos de A, se A contiver n elementos. Logo f(n) = 2(n-1) para n > 0, para o melhor caso, pior caso e caso médio. void MaxMin1(int* A, int n, int* pMax, int* pMin) { int i; *pMax = A[0]; *pMin = A[0]; for (i = 1; i < n; i++) { if (A[i] > *pMax) *pMax = A[i]; if (A[i] < *pMin) *pMin = A[i]; } O(n)

17 Exercício da Última Aula... void exercicio1 (int n) { int i, a; a = 0; i = 0; while (i < n) { a += i; i += 2; } void exercicio2 (int n) { int i, j, a; a = 0; for (i = 0; i < n; i++) for (j = 0; j < i; j++) a += i + j; } O(n)O(n 2 )

18 Exemplo: regra da soma O(f(n)) + O(g(n)). Suponha três trechos cujos tempos de execução são O(n), O(n 2 ) e O(n log n). O tempo de execução dos dois primeiros trechos é O(max(n, n 2 )), que é O(n 2 ). O tempo de execução de todos os três trechos é então O(max(n 2, n log n)), que é O(n 2 ). Operações com a Notação O

19 Notação Ω Especifica um limite inferior para g(n). Definição: Uma função g(n) é Ω(f(n)) se: Existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f(n)|. Exemplo: Quando dizemos que o tempo de execução T(n) de um programa é Ω (n²), significa que existem constantes c e m tais que, para valores de n m, T(n) cn².

20 Notação Ω ΩExemplo gráfico de dominação assintótica que ilustra a notação Ω. Abaixo, a função f(n) é dominada assintoticamente pela função g(n).

21 Notação Ω Exemplos: Para mostrar que g(n) = 3n 3 + 2n 2 é Ω(n 3 ) basta fazer c = 1, e então 3n 3 + 2n 2 n 3 para n 0. Seja g(n) = n para n ímpar (n 1) e g(n) = n 2 para n par (n 0). Neste caso g(n) é Ω(n 2 ), bastando considerar c = 1 e n = 0, 2, 4, 6, …

22 Notação Ө Especifica um limite assintótico firme para g(n). ӨDefinição: Uma função g(n) é Ө(f(n)) se: Existem três constantes positivas c 1, c 2 e m tais que, para n m, temos: 0 c 1 f(n) g(n) c 2 f(n). Isto é, para todo n m, a função g(n) é igual a f(n) a menos de uma constante.

23 Notação Ө ӨExemplo gráfico de dominação assintótica que ilustra a notação Ө. Dizemos que g(n) = Ө(f(n)) se existirem constantes c 1, c 2 e m tais que, para todo n m, o valor de g(n) está sobre ou acima de c 1 f(n) e sobre ou abaixo de c 2 f(n).

24 Notação Ө Ө(f(n)), uma função deve ser ao mesmo tempo O(f(n)) e Ω(f(n)).Para ser Ө(f(n)), uma função deve ser ao mesmo tempo O(f(n)) e Ω(f(n)). Exemplos: Para mostrar que g(n) = 3n 3 + 2n 2 é Ω(n 3 ) basta fazer: c = 1, e então 3n 3 + 2n 2 n 3 para n 0. Seja g(n) = n para n ímpar (n 1) e g(n) = n 2 para n par (n 0). Neste caso g(n) é Ω(n 2 ), bastando considerar c = 1 e n = 0, 2, 4, 6, …

25 Exemplo: Algoritmos MinMax Todos os algoritmos tem a mesma complexidade assintótica, ou seja: O(n), Ω(n) e, portanto, Ө(n)Todos são O(n), Ω(n) e, portanto, Ө(n)

26 Exercício 1 void ex1(int n) { int i, j, x, y; x = y = 0; for (i = 1; i <= n; i++) { for (j = i; j <= n; j++) x = x + 1; for (j = 1; j < i; j++) y = y + 1; } Obtenha a função de complexidade f(n) dos algoritmos abaixo. Na função de custo, considere apenas as operações envolvendo as variáveis x e y. Responder também, para cada algoritmo: Qual o valor da variável x ao final da execução do algoritmo? ΩO algoritmo é O(n 2 )? É Ω (n 3 )? Ө(nO algoritmo é Ө(n 3 )? void ex2(int n) { int i, j, k, x; x = 0; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) for (k = 1; k <= j; k++) x = x + j + k; x = i; }


Carregar ppt "Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www.decom.ufop.br."

Apresentações semelhantes


Anúncios Google