BCC202 - Estrutura de Dados I

Documentos relacionados
BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I

Análise de Algoritmos

Medida do Tempo de Execução de um Programa

ANÁLISE DE ALGORITMOS: PARTE 3

Complexidade Assintótica

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

André Vignatti DINF- UFPR

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Aula 1. Teoria da Computação III

Análise e Projeto de Algoritmos

André Vignatti DINF- UFPR

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Análise de Algoritmos

Complexidade de algoritmos Notação Big-O

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

Elementos de Análise Assintótica

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Projeto e Análise de Algoritmos

Melhores momentos AULA 1. Algoritmos p.38/86

Quantidade de memória necessária

Análise de Algoritmos

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

Análise de Algoritmos

Análise de algoritmos

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I

1 a Lista de Exercícios

MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II

Lista de Exercícios 6: Soluções Funções

Notação Assintótica Letícia Rodrigues Bueno

Teoria dos Grafos Aula 7

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Análise de Algoritmos

Teoria da Computação Aula 9 Noções de Complexidade

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Análise de algoritmos. Parte I

Capítulo 6 Análise de Algoritmos Capítulo 6

BCC202 - Estrutura de Dados I

Análise de Algoritmos Estrutura de Dados II

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Análise de algoritmos. Parte I

Lista de Exercícios 6 Funções

PCC104 - Projeto e Análise de Algoritmos

INF 1010 Estruturas de Dados Avançadas

O Teorema Mestre da Complexidade

Análise de algoritmos

Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo

Análise e Projeto de Algoritmos P R O F : L O A N A T. N O G U E I R A

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos

3. ANÁLISE DE COMPLEXIDADE PESSIMISTA

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

INF 1010 Estruturas de Dados Avançadas

Universidade Federal de Alfenas

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

Algoritmos e Complexidade

Notas sobre crescimento de função

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

BCC202 - Estrutura de Dados I

7. Introdução à Complexidade de Algoritmos

ANÁLISE DE ALGORITMOS

Comportamento assintótico

PCC104 - Projeto e Análise de Algoritmos

PROGRAMAÇÃO E ALGORITMOS (LEII) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

Complexidade de Algoritmos

Resposta da pergunta 2: Θ(n 3 ). Resposta da pergunta 8: 1. 7 O(n). Sim. 22. n log n O(1). Não. 3. n + 7 O(n). Sim. 4. n + 7 O(1). Não.

Introdução à Análise de Algoritmos

Técnicas de projeto de algoritmos: Indução

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Algoritmos de Ordenação: QuickSort

Técnicas de Projeto de Algoritmos

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Introdução à Análise Algoritmos

7. Introdução à Complexidade de Algoritmos

4º 20/10/2003. ÍNDICE

Lista de Exercícios 2

Capítulo. Análise de Algoritmos. 6.1 Complexidade de Algoritmos 6.1

Classes, Herança e Interfaces

Construção de Algoritmos II Aula 06

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

2. Complexidade de Algoritmos

Algoritmos de Ordenação

Programação II Aula 07

Análise de Algoritmos Parte 4

Complexidade de Algoritmos

Introdução. Última alteração: 10 de Outubro de Transparências elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani

Transcrição:

BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) ASN Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Material elaborado com base nos slides do Prof. Reinaldo Fortes (curso de 2016/01).

Conteúdo 1 Comportamento Assintótico de Funções 2 Dominação Assintótica Notação Ω (Ômega) Notação Θ (Theta) Resumo 3 Conclusão 4 Exercícios BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (2)

Conteúdo 1 Comportamento Assintótico de Funções 2 Dominação Assintótica Notação Ω (Ômega) Notação Θ (Theta) Resumo 3 Conclusão 4 Exercícios BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (3)

Comportamento Assintótico de Funções Função de Complexidade Na aula passada aprendemos a calcular a função de complexidade f (n). Observações importantes: 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. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (4)

Comportamento Assintótico de Funções Comportamento Assintótico 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 das funções para valores grandes de n. O comportamento assintótico de f (n) representa o limite do comportamento do custo quando n cresce. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (5)

Comportamento Assintótico de Funções Crescimento e Domínio Assintótico 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). A próxima seção detalha esta definição... BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (6)

Conteúdo 1 Comportamento Assintótico de Funções 2 Dominação Assintótica Notação Ω (Ômega) Notação Θ (Theta) Resumo 3 Conclusão 4 Exercícios BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (7)

Dominação Assintótica 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). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (8)

Dominação Assintótica Dominação Assintótica: Exemplo Sejam g(n) = (n + 1) 2 e f (n) = n 2. As funções g(n) e f (n) dominam assintoticamente uma à outra, desde que: (n + 1) 2 <= 4 n 2, para n >= 1. n 2 <= (n + 1) 2, para n >= 0. g(n) <= c f (n) para n >= m; c = 4 e m = 1 f (n) <= c g(n) para n >= m; c = 1 e m = 1 BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (9)

Escrevemos g(n) = O(f (n) para expressar que f (n) domina assintoticamente g(n). Lê-se g(n) é da ordem de no máximo f (n). Exemplo: Quando dizemos que o tempo de execução T (n) de um programa é O(n 2 ), significa que existem constantes c e m tais que, para valores de n >= m, T (n) <= cn 2. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (10)

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). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (11)

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) <= cf (n), para todo n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (12)

Operações f (n) = O(f (n)) c O(f (n)) = O(f (n)), c = constante O(f (n)) + O(f (n)) = O(f (n)) O(O(f (n))) = O(f (n)) O(f (n)) + O(g(n)) = O(max(f (n), g(n))) O(f (n)) O(g(n)) = O(f (n) g(n)) f (n) O(g(n)) = O(f (n) g(n)) BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (13)

Exemplo 01: g(n) = (n + 1) 2 e f (n) = n 2 g(n) é O(n 2 ) quando m = 1 e c = 4. Isto porque sabe-se que (n + 1) 2 <= 4n 2. Ou seja, existem as constantes positivas c e m tal que g(n) <= cf (n), para n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (14)

Exemplo 01: g(n) = (n + 1) 2 e f (n) = n 2 g(n) é O(n 2 ) quando m = 1 e c = 4. Isto porque sabe-se que (n + 1) 2 <= 4n 2. Ou seja, existem as constantes positivas c e m tal que g(n) <= cf (n), para n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (14)

Exemplo 02: g(n) = n e f (n) = n 2 Sabemos que g(n) é O(n 2 ), pois para n >= 1, n <= n 2. Entretanto f (n) não é O(n). Suponha que existam constantes c e m tais que para todo n >= m, n 2 <= cn. Se c >= n para qualquer n >= m, então deveria existir um valor para c que pudesse ser maior ou igual a n para todo n. Portanto, não existe a constante positiva c tal que g(n) <= cf (n), para n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (15)

Exemplo 02: g(n) = n e f (n) = n 2 Sabemos que g(n) é O(n 2 ), pois para n >= 1, n <= n 2. Entretanto f (n) não é O(n). Suponha que existam constantes c e m tais que para todo n >= m, n 2 <= cn. Se c >= n para qualquer n >= m, então deveria existir um valor para c que pudesse ser maior ou igual a n para todo n. Portanto, não existe a constante positiva c tal que g(n) <= cf (n), para n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (15)

Exemplo 03: g(n) = 3n 3 + 2n 2 + n Sabemos que g(n) é O(n 3 ). g(n) também é O(n 4 ). Entretanto, esta afirmação é mais fraca do que dizer que g(n) é O(n 3 ). g(n) também é O(n 40 )? BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (16)

Exemplo 03: g(n) = 3n 3 + 2n 2 + n Sabemos que g(n) é O(n 3 ). g(n) também é O(n 4 ). Entretanto, esta afirmação é mais fraca do que dizer que g(n) é O(n 3 ). g(n) também é O(n 40 )? Sim! É fácil mostrar que existem as constantes positivas c e m tal que g(n) <= cf (n), para n >= m. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (16)

Exemplo 04: g(n) = log 5 n é O(log n) Recorrendo às propriedades logaritmicas, a mudança de base é definida por: log a x = log bx log b a. Assim, observa-se que log 5 n = log 5 2 log n. Logo, log 5 2 é a constante c, e será fácil encontrar um m que comprove que g(n) é O(log n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (17)

Exemplo 04: g(n) = log 5 n é O(log n) Recorrendo às propriedades logaritmicas, a mudança de base é definida por: log a x = log bx log b a. Assim, observa-se que log 5 n = log 5 2 log n. Logo, log 5 2 é a constante c, e será fácil encontrar um m que comprove que g(n) é O(log n). Generalizando log b n = log b c log c n. Logo, a constante c será log b c e deverá ser definida a constante m que comprove que log b n é O(log c n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (17)

Exemplo 05: Ordem de complexidade do MaxMin1 1 int MaxMin1 ( int * A, int n, int * pmax, int * pmin ) { 2 int i; 3 * pmax = A [0]; 4 * pmin = A [0]; 5 for ( i = 1; i < n; i ++) 6 if (* pmax < A[ i]) // Comparação envolvendo os elementos 7 * pmax = A[i]; 8 if (* pmin > A[ i]) // Comparação envolvendo os elementos 9 * pmin = A[i]; 10 } Como vimos anteriormente, f (n) = 2(n 1) para n > 0, para o melhor caso, pior caso e caso médio. Então, MaxMin1 é O(n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (18)

Exemplo 05: Ordem de complexidade do MaxMin1 1 int MaxMin1 ( int * A, int n, int * pmax, int * pmin ) { 2 int i; 3 * pmax = A [0]; 4 * pmin = A [0]; 5 for ( i = 1; i < n; i ++) 6 if (* pmax < A[ i]) // Comparação envolvendo os elementos 7 * pmax = A[i]; 8 if (* pmin > A[ i]) // Comparação envolvendo os elementos 9 * pmin = A[i]; 10 } Como vimos anteriormente, f (n) = 2(n 1) para n > 0, para o melhor caso, pior caso e caso médio. Então, MaxMin1 é O(n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (18)

Exemplo 06: Operações com a notação O Regra da soma O(f (n)) + O(g(n)). Suponha três trechos cujos tempos de execução são O(n), O(n 2 ) e O(n log n). O tempo de execução dos dois primeiros trechos é O(max(n, n 2 )), que é O(n 2 ). O tempo de execução de todos os três trechos é então O(max(n, n 2, n log n)), que é O(n 2 ). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (19)

Notação Ω (Ômega) Notação Ω (Ômega) 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 2 ), significa que existem constantes c e m tais que, para valores de n >= m, T (n) >= c n 2. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (20)

Notação Ω (Ômega) Exemplo gráfico Na figura abaixo, a função f (n) é dominada assintoticamente pela função g(n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (21)

Notação Ω (Ômega) Exemplos 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, para n ímpar (n >= 1) e g(n) = n 2 para n par (n >= 0). Neste caso g(n) é Ω(n 2 ), bastando considerar c = 1 e m = 2, 4, 6,... BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (22)

Notação Θ (Theta) Notação Θ (Theta) Especifica um limite assintótico firme para g(n). Definição: Uma função g(n) é Θ(f (n)) se: Existem três constantes positivas c 1, c 2 e m, tais que, para n >= m, temos: 0 <= c 1 f (n) <= g(n) <= c 2 f (n). Isto é, para todo n >= m, a função g(n) é igual a f (n) a menos de uma constante. BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (23)

Notação Θ (Theta) Exemplo gráfico Na figura abaixo, a função f (n) é um limite assintótico firme para a função g(n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (24)

Notação Θ (Theta) Relação com O e Ω Para uma função ser Θ(f (n)) ela deverá ser, ao mesmo tempo, O(f (n)) e Ω(f (n)). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (25)

Notação Θ (Theta) Exemplo: Algoritmos MinMax Relembre as funções de complexidade: Algoritmo Melhor caso Pior caso Caso médio MaxMin1 2 (n-1) 2 (n-1) 2 (n-1) MaxMin2 n - 1 2 (n-1) 3 n/2-3/2 MaxMin3 3 n/2-2 3 n/2-2 3 n/2-2 Observe que todos os algoritmos tem a mesma complexidade assintótica. Todos são O(n) e Ω(n). Portanto, são Θ(n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (26)

Resumo Notações O, Ω (Ômega) e Θ (Theta) Notação Ω (Ômega) Notação Θ (Theta) 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). 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). Uma função g(n) é Θ(f (n)) se: Existem três constantes positivas c 1, c 2 e m, tais que, para n >= m, temos: 0 <= c 1 f (n) <= g(n) <= c 2 f (n). BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (27)

Conteúdo 1 Comportamento Assintótico de Funções 2 Dominação Assintótica Notação Ω (Ômega) Notação Θ (Theta) Resumo 3 Conclusão 4 Exercícios BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (28)

Conclusão Conclusão Nesta aula aprendemos a estudar o comportamento assintótico das funções de custo através da dominação assintótica. Foco principal para as notações O, Ω e Θ. Próxima aula: Análise de Algoritmos (Parte 3) Classes de Problemas. Dúvidas? BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (29)

Conteúdo 1 Comportamento Assintótico de Funções 2 Dominação Assintótica Notação Ω (Ômega) Notação Θ (Theta) Resumo 3 Conclusão 4 Exercícios BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (30)

Exercícios propostos Exercício 01 Obtenha a função de complexidade f (n) dos algoritmos abaixo. Considere apenas as operações envolvendo as variáveis x e y. Para cada algoritmo, responda: O algoritmo é O(n 2 )? É Ω(n 3 )? É Θ(n 3 ). 1 void Procedimento1 ( int n) { 2 int i, j, x, y; 3 x = y = 0; 4 for (i = 1; i <= n; i ++) { 5 for ( j = i; j <= n; j ++) 6 x = x + 1; 7 for ( j = 1; j < i; j ++) 8 y = y + 1; 9 } 10 } 1 void Procedimento2 () { 2 int i, j, k, x; 3 x = 0; 4 for (i = 1; i <= n; i ++) { 5 for ( j = 1; j <= n; j ++) 6 for ( k = 1; k <= j; k ++) 7 x = x + j + k; 8 x = i; 9 } BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (31)

Exercícios propostos Exercício 02 Obtenha a ordem de complexidade do algoritmo abaixo, definido em função dos dois procedimentos do Exercício 01. 1 void Procedimento ( int n) { 2 Procedimento1 ( n); 3 Procedimento2 ( n); 4 } BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) (32)