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

Slides:



Advertisements
Apresentações semelhantes
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Advertisements

Estruturas de Dados e Algoritmos II
COMPARAÇÃO MÉTODOS DIRETOS E ITERATIVOS
Complexidade de Algoritmos
Recursividade Prof. Rosana Palazon.
Capítulo 3 - Aplicações das Derivadas
Nice Maria Americano da Costa
Nice Maria Americano da Costa
Engenharia de Computação.
Sinais e Sistemas – Capítulo 3
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.
Pesquisa em Memória Primária
Medida do Tempo de Execução de um Programa
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária
Complexidade de Algoritmos
Exercícios de revisão.
Crescimento de Funções
Recorrências.
Complexidade de Computação Para avaliar a qualidade de um algoritmo usamos como critério o espaço e o tempo de execução. Ao.
Prof. Roberto Cristóvão
Integrais Duplas sobre Regiões Retangulares
Prof. Roberto Cristóvão
Aulas - 05 Limites, limites laterais, limites infinitos, assíntota vertical e propriedades do limite.
Introdução à Computação II Isadora Alves Cristo Juliana Ap. da Silva
Teorema do Confronto   Se não pudermos obter o limite diretamente, talvez possamos obtê-lo indiretamente com o teorema do confronto. O teorema se refere.
ICC2 Aula 7 Fábio Nakano.
Linguagem de Programação I Parte II
Funções e suas propriedades
Aula 13 Derivação Implícita, derivadas das funções trigonométricas inversas e derivadas de funções logarítmicas.
Aula 07 – Limite e Continuidade
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 08 Medidas de posição - Prof. Diovani Milhorim
Teste da derivada 1ª, Teste da derivada 2ª e construção de gráficos
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Aula T05 – BCC202 Análise de Algoritmos (Parte 3) Túlio Toffolo www
Integral definida Profª Ana Cristina Corrêa Munaretto
Estruturas de Dados, Algoritmos e Complexidade
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
Funções de várias variáveis
Nível : Iniciante (Fácil)
Estruturas de Dados Aula 15: Árvores
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Complexidade em Tempo de um Algoritmo
BCC101 – Matemática Discreta
Como analisar um algoritmo
Crescimento de Funções
Operações Aritméticas AULA 3 Análise de Algoritmos Pós-graduação em Ciência da Computação – UFU Profa. Sandra de Amo.
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.
Exercícios de Fluxo em Redes
Analise de Algoritmos e Notação Assintótica
Professor: André L. R. Didier Autor: Francisco Airton
Cálculo Diferencial e Integral I
ESTUDOS DOS TRIÂNGULOS
TEORIA DOS NÚMEROS Aula 2 – Princípio da Indução Finita
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Aula 8: Completeza em R, Supremos e Ínfimos
ALGEBRA LINEAR UNIDADE 1 MATRIZES
ESTATÍSTICA.
ALGEBRA LINEAR UNIDADE 1 MATRIZES
INTRODUÇÃO AO CÁLCULO CONJUNTOS NUMERICOS.
Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos
Comportamento Assintótico
Medida do Tempo de Execução de um Programa
Transcrição da apresentação:

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

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

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.

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.

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

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

Dominação assintótica 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

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

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

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

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

não existe c tal que g(n) ≤ c f(n) Exemplo de Notação O Exemplo: g(n) = n e f(n) = n2. – Sabemos que g(n) é O(n2), pois para n ≥ 1, n ≤ n2. – Entretanto f(n) não é O(n). – Suponha que existam constantes c e m tais que para todo n ≥ m, n2 ≤ 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. não existe c tal que g(n) ≤ c f(n) para n ≥m

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

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

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

Operações com a Notação O Exemplo: regra da soma O(f(n)) + O(g(n)). Suponha três trechos cujos tempos de execução são O(n), O(n2) e O(n log n). O tempo de execução dos dois primeiros trechos é O(max(n, n2)), que é O(n2). O tempo de execução de todos os três trechos é então O(max(n2, n log n)), que é 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)|. 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².

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

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

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 c1, c2 e m tais que, para n ≥ m, temos: 0 ≤ c1f(n) ≤ g(n) ≤ c2f(n). Isto é, para todo n ≥ m, a função g(n) é igual a f(n) a menos de uma constante.

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

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

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

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