Algoritmos Crescimento de Funções

17
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

description

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. - PowerPoint PPT Presentation

Transcript of Algoritmos Crescimento de Funções

Page 1: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

AlgoritmosCrescimento de Funções

Estruturas Discretas e Lógica Matemática

Dep. de Informática – UFMA

Prof. Anselmo Paiva

Page 2: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.

Page 3: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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}

Page 4: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.

Page 5: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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

Page 6: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.

Page 7: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

Prof. Anselmo Paiva

Complexidade

• Comparação: complexidade de tempo dos algoritmos A e B

Algoritmo AAlgoritmo A Algoritmo BAlgoritmo BEntradaEntrada

nn

1010

100100

1,0001,000

1,000,0001,000,000

5,000n5,000n

50,00050,000

500,000500,000

5,000,0005,000,000

55101099

1.11.1nn33

2.52.510104141

13,78113,781

4.84.810104139241392

Page 8: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.

Page 9: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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

Page 10: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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) Cg(x) whenever x > k,• porque C não cresce com x.• Estamos somente interessados em valores

grandes de x, assim está OK sef(x) > Cg(x) for x k.

Page 11: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

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

Page 12: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

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

Page 13: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

Prof. Anselmo Paiva

Crescimento de Funções

• Funções g(n) “Populare”

n log n, 1, 2n, n2, n!, n, n3, log n

Page 14: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.

Page 15: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

E D

L

M

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

Page 16: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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.5n2 – 0.5n• Complexidade de Tempo é O(n2).

Page 17: Algoritmos Crescimento de Funções

Dep

art

am

en

to d

e In

form

áti

ca –

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