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

Apresentações semelhantes


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

1 Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www
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?
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) 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.

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?
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]; } 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

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

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 Se considerarmos qualquer entrada possível, então g(n) é Ω(n)
Notação Ө 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: Ω(n2), 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?
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 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) Tiago (8h/semana)
Terça-feira: 19h – 21h Quinta-feira: 19h – 21h Tiago (8h/semana) Segunda-feira: 19h – 21h Quarta-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 Mas é quem faz que aprende!
Quem vê, entende... Mas é quem faz que aprende!

22 Exercício 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 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; } 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 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))

25


Carregar ppt "Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www"

Apresentações semelhantes


Anúncios Google