Algoritmos Crescimento de Funções

Slides:



Advertisements
Apresentações semelhantes
COMPARAÇÃO MÉTODOS DIRETOS E ITERATIVOS
Advertisements

Analise de Algoritmos e Notação Assintótica
Data: 10 a 12 de fevereiro de 2009 e
Construção de Aplicativos Computacionais METEOROLOGIA
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
A Classe de Problemas NP
Engenharia de Computação.
PERCEPTRON (CONTINUAÇÃO)
Programação Linear Método Simplex
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.
Curso Superior de Tecnologia em Automação Industrial Prof. Leo Weber
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
Medida do Tempo de Execução de um Programa
Complexidade de Algoritmos
Ajuste de Curvas e Interpolação
Capítulo 3 - Russell e Norvig
Crescimento de Funções
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
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.
Problemas NP-completo
Programação Dinámica Análise de algoritmos UNISUL
1 4.6 – Variáveis - introdução Nesta altura (ao nível da programação) interessa saber que um computador tem: Nesta altura (ao nível da programação) interessa.
INTRODUÇÃO À PROGRAMAÇÃO
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www
Algoritmos e Estrutura de Dados: Uma pequena motivação
Complexidade de Algoritmos
Informática Teórica Engenharia da Computação
Comandos de Repetição Comando Para-Faça
ICC2 Aula 7 Fábio Nakano.
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
TRABALHO MATEMÁTICA DISCRETA
GERADORES DE ESPAÇOS VETORIAIS.
Informática Teórica Engenharia da Computação
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Introdução a Programação
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
Algoritmos e Programação de Computadores
Indução Matemática Recursão
Funções Rosen 5th ed., §1.8 Estruturas Discretas e Lógica Matemática
Campus de Caraguatatuba Aula 12: Sistemas de Equações Lineares (2)
Inteligência Artificial
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Complexidade computacional
Complexidade de Algoritmos
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
1.2- Propriedades dos Limites
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
DCC 001 Programação de Computadores
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Como analisar um algoritmo
Universidade Federal de Pernambuco Anjolina Grisi de Oliveira 2007
Crescimento de Funções
INE Fundamentos de Matemática Discreta para a Computação
Números Primos – algoritmos e aplicações
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.
Programação de Computadores - 1
Analise de Algoritmos e Notação Assintótica
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Análise e Complexidade de Algoritmos
Curso Programadores de Informática
Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos
Comportamento Assintótico
Disciplina: Estrutura de dados e Algoritmos Docentes: MSc. Manuel Zunguze.
Transcrição da apresentação:

Algoritmos Crescimento de Funções Estruturas Discretas e Lógica Matemática Dep. de Informática – UFMA Prof. Anselmo Paiva

Algoritmos Um conjunto finito de instruções precisas para que um computador realize uma computação e resolva um problema. Prof. Anselmo Paiva

Exemplo: encontrar o maior elemento de uma sequência Algoritmos Exemplo: encontrar o maior elemento de uma sequência Procedure max(a1, a2, …, an: integers) max := a1 for i := 2 to n if max < ai then max := ai {max is the largest element} Prof. Anselmo Paiva

Complexidade Em geral nao estamos preocupados com o tempo e/ou a memória que um algoritmo utiliza para pequenas entradas de dados. Por exemplo: Enquanto a diferença em complexidade de tempo entre a busca linear e a busca binária para uma sequência com n=10 números é insgnificante, ela é gigante para n = 230. Prof. Anselmo Paiva

Complexidade Sejam A e B dois algoritmos que resolvem a mesma classe de problemas. A complexidade de tempo de A é 5.000n, e a de B é 1.1n para uma entrada com n elementos. Para n = 10 A requer 50,000 passos B requer somente 3 B parece ser superior a A. Para n = 1000 A requer 5,000,000 passos B requer 2.51041 Prof. Anselmo Paiva

Assim, algoritmo B não pode ser usado em grandes conjuntos de dados Complexidade Assim, algoritmo B não pode ser usado em grandes conjuntos de dados O que é importante é o crescimento da função de complexidade. O crescimento do tempo e espaço(memória) em relação ao crescimento do tamanho da entrada n é um bom mecanismo para comparar algoritmos. Prof. Anselmo Paiva

Comparação: complexidade de tempo dos algoritmos A e B Entrada Algoritmo A Algoritmo B n 5,000n 1.1n 10 50,000 3 100 500,000 13,781 1,000 5,000,000 2.51041 1,000,000 5109 4.81041392 Prof. Anselmo Paiva

Crescimento de Funções Em geral é descrito usando a notação big-O. Definição: Seja f e g funções de inteiros em reais. Dizemos que f(x) é O(g(x)) se existem constantes C e k tais que |f(x)|  C|g(x)| sempre que x > k. Prof. Anselmo Paiva

Crescimento de Funções Quando analizamos o crescimento de funções de complexidade, f(x) e g(x) são sempre positivas. Podemos então simplificar a notação big-O para: f(x)  Cg(x) sempre que x > k. Para mostrar que f(x) é O(g(x)), temos somente que encontrar um par (C, k) (o qual nunca é único unique). Prof. Anselmo Paiva

Crescimento de Funções A Idéia por trás da notação big-O é estabelecer um limite superior (upper boundary) para o crescimento da função f(x) para grandes valores de x. Este limite é definido pela função g(x) que é usualmente mais simples que f(x). Aceitamos a constante C no requisito f(x)  Cg(x) whenever x > k, porque C não cresce com x. Estamos somente interessados em valores grandes de x, assim está OK se f(x) > Cg(x) for x  k. Prof. Anselmo Paiva

Crescimento de Funções Exemplo: Mostre que f(x) = x2 + 2x + 1 é O(x2). Para x > 1 temos: x2 + 2x + 1  x2 + 2x2 + x2  x2 + 2x + 1  4x2 Assim, para C = 4 e k = 1: f(x)  Cx2 whenever x > k.  f(x) is O(x2). Prof. Anselmo Paiva

Crescimento de Funções Se f(x) é O(x2), tambem é O(x3)? Sim. x3 cresce mais rápido que x2, assim x3 cresce mais rápido que f(x). Mas estamos interessados sempre na menor função g(x) que cresce mais rápido que f(x). Prof. Anselmo Paiva

Crescimento de Funções Funções g(n) “Populare” n log n, 1, 2n, n2, n!, n, n3, log n Prof. Anselmo Paiva

Crescimento de Funções Um problema que pode ser resolvido em tempo polinomial é denominado tratável. Problemas com complexidade maior são denominados intratáveis. Problemas que não possuem um algoritmo que o resolvam são denominados não computáveis Mais sobre isso é uma disciplina de Teoria da Computação ou Computabilidade. Prof. Anselmo Paiva

Regras Úteis para Big-O Para qualquer polinômio f(x)= anxn + an-1xn-1 + … + a0, onde a0, a1, …, an são números reais, f(x) is O(xn). Se f1(x) é O(g1(x)) e f2(x) é O(g2(x)), então (f1 + f2)(x) é O(max(g1(x), g2(x))) Se f1(x) é O(g(x)) e f2(x) é O(g(x)), então (f1 + f2)(x) é O(g(x)). Se f1(x) é O(g1(x)) e f2(x) é O(g2(x)), então (f1f2)(x) é O(g1(x) g2(x)). Prof. Anselmo Paiva

Exemplos de Complexidade O que o seguinte algoritmo computa? proc who_knows(a1, a2, …, an: integers) m := 0 for i := 1 to n-1 for j := i + 1 to n if |ai – aj| > m then m := |ai – aj| {m é a maior diferença entre dois números na sequência de entrada} Comparações: n-1 + n-2 + n-3 + … + 1 = (n – 1)n/2 = 0.5n2 – 0.5n Complexidade de Tempo é O(n2). Prof. Anselmo Paiva

Complexity Examples Outro algoritmo para o mesmo problema: proc max_diff(a1, a2, …, an: integers) min := a1 max := a1 for i := 2 to n if ai < min then min := ai else if ai > max then max := ai m := max - min Comparações: 2n - 2 Complexidade de tempo é O(n). Prof. Anselmo Paiva