1 / 17

Algoritmos Crescimento de Funções

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

poppy
Download Presentation

Algoritmos Crescimento de Funções

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

  7. Complexidade • 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

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

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

  10. 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 sef(x) > Cg(x) for x  k. Prof. Anselmo Paiva

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

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

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

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

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

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

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

More Related