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

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Complexidade de Algoritmos
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Aula 10 Algoritmos de Busca
Recursividade Prof. Rosana Palazon.
Programação de Computadores I Prof. Eduardo 2011
Engenharia de Computação.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Variáveis Dinâmicas Caixas de Nós
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
Aula T11 – BCC202 Pilhas Túlio Toffolo
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Aula T12 – BCC202 Listas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
AED – Algoritmos e Estruturas de Dados
Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www
Aulas - 05 Limites, limites laterais, limites infinitos, assíntota vertical e propriedades do limite.
Algoritmos de Busca Parte II
ICC2 Aula 7 Fábio Nakano.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 6 Vetores e Matrizes
Pesquisa em Memória Primária
Linguagem de Programação II Parte VII
Aula 01 BCC202 - Estrutura de Dados I Túlio Toffolo
Funções e suas propriedades
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www. decom. ufop
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Boa Tarde Galera.! Estou sem voz hoje, então, teremos uma aula um pouco diferente. Quem tiver dúvidas, pode perguntar, mas por favor, só se for realmente.
Algoritmos Crescimento de Funções
Mediana É um valor real que separa o rol em duas partes deixando à sua esquerda o mesmo número de elementos que a sua direita. Portanto, a mediana é um.
Estruturas de Dados Aula 9: Listas (parte 1)
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Nível : Iniciante (Fácil)
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Aula 10 Algoritmos de Busca
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Como analisar um algoritmo
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Analise de Algoritmos e Notação Assintótica
Linguagem de Programação II Apresentação
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
INTRODUÇÃO AO CÁLCULO CONJUNTOS NUMERICOS.
Estrutura de Dados Prof. André Cypriano M. Costa
Álgebra Vetorial e Linear para Computação
Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos
UNIVERSIDADE FEDERAL DE MINAS GERAIS Exercícios de Revisão 1 Crisitano Arbex Valle Vinicius Fernandes dos Santos
Comportamento Assintótico
Medida do Tempo de Execução de um Programa
Transcrição da apresentação:

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

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.

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

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

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

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

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.

Operações com a Notação O

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.

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)

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

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

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)

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

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

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

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

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

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

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

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