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

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

Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www.decom.ufop.br/toffolo.

Apresentações semelhantes


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

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

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

3 Comportamento Assintótico de Funções Nas aulas passadas aprendemos: Como calcular a função de complexidade f(n). Melhor caso x Caso médio x Pior caso Qual a influência desta função em algoritmos aplicados sobre problemas de tamanho pequeno? E sobre problemas grandes? Estuda-se o comportamento assintótico das funções de custo. O que isto significa?

4 Qual a função de complexidade para 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]; } 2*(n-1)

5 Exemplo - Maior e Menor Elemento (2) MaxMin1 pode ser facilmente melhorado: a comparação A[i] *pMax dá falso. void MaxMin2(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]; else if (A[i] < *pMin) *pMin = A[i]; }

6 Qual a função de complexidade para MaxMin2? Melhor caso: quando os elementos estão em ordem crescente; f(n) = n – 1 Pior caso: quando o maior elemento é o primeiro no vetor; f(n) = 2(n – 1) Caso médio: No caso médio, A[i] é maior do que Max a metade das vezes. f(n) = 3n/2 – 3/2 void MaxMin2(int* A, int n, int* pMax, int* pMin) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > *pMax) *pMax = A[i]; else if (A[i] < *pMin) *pMin = A[i]; }

7 Comportamento Assintótico de Funções Nas aulas passadas também aprendemos: Comportamento assintótico das função de complexidade f(n). Dominação Assintótica Notação O. ΩӨ. Notação Ω e Notação Ө.

8 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)|.

9 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.

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

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

12 Exercício da Última Semana... 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 )

13 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)|.

14 Notação Ө ӨExemplo gráfico de dominação assintótica que ilustra a notação Ө. Especifica um limite assintótico firme para g(n). Ө(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)).

15 Notação Ө 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 2 para n par (n 0) g(n) = n para n ímpar (n 1). Neste caso g(n) poderá ser: Ω(n 2 ), se considerarmos apenas entradas pares Ω(n), se considerarmos apenas entradas ímpares Se considerarmos qualquer entrada possível, então g(n) é Ω(n)

16 Perguntas.... n é O(n log n)? Esta afirmação é útil? n 3 é Ω(n)? Esta afirmação é útil? n é O(n)? n é Ω(n)? Ө(n)?n é Ө(n)? Ө(n log n)?n é Ө(n log n)?

17 Data da Prova 1 Quanto mais longe, mais matéria acumula =( Tipo Abstrato de Dados Análise de Algoritmos Função de complexidade ӨNotações O, Ω e Ө Classes de comportamento assintótico Limites inferiores Alocação Dinâmica Recursividade Valor: 2,0 pontos

18 Data da Prova 1 Site: Listas de exercício estarão disponíveis ainda hoje no site Próximas aulas Classes de comportamento assintótico Limites inferiores Alocação Dinâmica (reforço em TAD e ponteiros) Recursividade Aula de dúvidas para a prova Sugestão de data para a prova: até dia 21/Setembro

19 Horários de Monitoria Kayran (4h/semana) Terça-feira: 19h – 21h Quinta-feira: 19h – 21h Tiago (8h/semana) Segunda-feira: 19h – 21h Terça-feira: 19h – 21h Quarta-feira: 19h – 21h Quinta-feira: 19h – 21h

20 Aula(s) Extra(s) Presença não obrigatória Tema: Reforço sobre algoritmos e programação Interessados: Enviar para com o assunto [BCC202 – Aula Extra] Provavelmente próxima sexta-feira (manhã ou tarde). Data/horário a serem decididos por votação no site:

21 Quem vê, entende... Mas é quem faz que aprende!

22 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; }

23

24 Exercício 2 Indique se as afirmativas a seguir são verdadeiras ou falsas e justifique a sua resposta É melhor um algoritmo que requer 2 n passos do que um que requer 10n 10 passos. 2 n+1 = O(2 n ). f(n) = O(u(n)) e g(n) = O(v(n)) => f(n) + g(n) = O(u(n) + v(n)) f(n) = O(u(n)) e g(n) = O(v(n)) => f(n) - g(n) = O(u(n) - v(n))

25


Carregar ppt "Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www.decom.ufop.br/toffolo."

Apresentações semelhantes


Anúncios Google