1 / 25

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

Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www.decom.ufop.br/toffolo. Como escolher o algoritmo mais adequado para uma situação? (Continuação). Comportamento Assintótico de Funções. Nas aulas passadas aprendemos: Como calcular a função de complexidade f(n).

adanne
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aula T05 – BCC202 Análise de Algoritmos (Parte 3)Túlio Toffolowww.decom.ufop.br/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] < *pMin só é necessária quando 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 assintoticamenteg(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(n2)

  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). • Para ser Ө(f(n)), uma função deve ser ao mesmo tempo O(f(n)) e Ω(f(n)).

  15. Notação Ө Ω(n), se considerarmos apenas entradas ímpares Ω(n2), se considerarmos apenas entradas pares Se considerarmos qualquer entrada possível, então g(n) é Ω(n) • Para mostrar que g(n) = 3n3 + 2n2 é Ω(n3) basta fazer:c = 1, e então 3n3 + 2n2 ≥ n3 para n ≥ 0. • Seja g(n) = n2 para n par (n ≥ 0) g(n) = n para n ímpar (n ≥ 1).Neste caso g(n) poderá ser:

  16. Perguntas.... • n é O(n log n)? Esta afirmação é útil? • n3 é Ω(n)? Esta afirmação é útil? • n é O(n)? • n é Ω(n)? • n é Ө(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: www.decom.ufop.br/toffolo • Listas de exercício estarão disponíveis aindahoje 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 e-mail para tulio@toffolo.com.br 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: www.decom.ufop.br/toffolo

  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(n2)? É Ω(n3)? • O algoritmo é Ө(n3)? 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. Exercício 2 • Indique se as afirmativas a seguir são verdadeiras ou falsas e justifique a sua resposta • É melhor um algoritmo que requer 2n passos do que um que requer 10n10 passos. • 2n+1 = O(2n). • 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))

More Related