A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Departamento de Informática – E D L M Algoritmos Crescimento de Funções Estruturas Discretas e Lógica Matemática Dep. de Informática – UFMA Prof. Anselmo."— Transcrição da apresentação:

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

2 Departamento de Informática – E D L M Prof. Anselmo Paiva Algoritmos Um conjunto finito de instruções precisas para que um computador realize uma computação e resolva um problema.

3 Departamento de Informática – E D L M Prof. Anselmo Paiva 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}

4 Departamento de Informática – E D L M 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.

5 Departamento de Informática – E D L M 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.1 n  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  10 41

6 Departamento de Informática – E D L M Prof. Anselmo Paiva 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.

7 Departamento de Informática – E D L M Prof. Anselmo Paiva Complexidade Comparação: complexidade de tempo dos algoritmos A e B Algoritmo A Algoritmo B Entrada n ,000 1,000,000 5,000n 50, ,000 5,000,000 5  10 9  1.1 n   , 

8 Departamento de Informática – E D L M 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.

9 Departamento de Informática – E D L M 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).

10 Departamento de Informática – E D L M 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.

11 Departamento de Informática – E D L M Prof. Anselmo Paiva Crescimento de Funções Exemplo: Mostre que f(x) = x 2 + 2x + 1 é O(x 2 ). Para x > 1 temos: x 2 + 2x + 1  x 2 + 2x 2 + x 2  x 2 + 2x + 1  4x 2 Assim, para C = 4 e k = 1: f(x)  Cx 2 whenever x > k.  f(x) is O(x 2 ).

12 Departamento de Informática – E D L M Prof. Anselmo Paiva Crescimento de Funções Se f(x) é O(x 2 ), tambem é O(x 3 )? Sim. x 3 cresce mais rápido que x 2, assim x 3 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).

13 Departamento de Informática – E D L M Prof. Anselmo Paiva Crescimento de Funções Funções g(n) “Populare” n log n, 1, 2n, n 2, n!, n, n 3, log n

14 Departamento de Informática – E D L M 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.

15 Departamento de Informática – E D L M Prof. Anselmo Paiva Regras Úteis para Big-O Para qualquer polinômio f(x)= a n x n + a n-1 x n-1 + … + a 0, onde a 0, a 1, …, a n são números reais, f(x) is O(x n ). 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)).

16 Departamento de Informática – E D L M 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.5n 2 – 0.5n Complexidade de Tempo é O(n 2 ).

17 Departamento de Informática – E D L M 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).


Carregar ppt "Departamento de Informática – E D L M Algoritmos Crescimento de Funções Estruturas Discretas e Lógica Matemática Dep. de Informática – UFMA Prof. Anselmo."

Apresentações semelhantes


Anúncios Google