Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

50

Click here to load reader

description

Complexidade de Algoritmos;Notação assintótica; Algoritmos polinomiais e intratáveis

Transcript of Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

Page 1: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Complexidade de Algoritmos: Tempo e espaço; Notação assintótica; Algoritmospolinomiais e intratáveis

Professor: José Fernando Rodrigues Júnior

Universidade de São Paulo

Page 2: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Introdução Algoritmos e funções Notação Assintótica – Interpretação

matemática Notação Assintótica – Aplicação a algoritmos Notação Assintótica – Interpretação

algorítmica Notação Assintótica – Limitações Notação Assintótica – Um indicador geral Algoritmos Polinomiais e Exponenciais Conclusões

Page 3: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Introdução

Porquê o estudo da Complexidade?

Escolher entre vários algoritmos o mais eficiente;

Desenvolver algoritmos mais eficientes;

Complexidade Computacional - torna possível determinar se a definição de determinado algoritmo é viável.

Page 4: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

Todo algoritmo define uma função matemática f(n)= # de instruções

Ex.:void Algoritmo1(int n)

int contador = 0;

for(int i = 0; I < n; I++)

contador++;

n passos para terminar

Page 5: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

Todo algoritmo define uma função matemática f(n)= # de instruções

Ex.:void Algoritmo2(int n)

int contador = 0;

for(int i = 0; i < n; i++)

for(int j = 0; j < n; j++)

contador++;

n*n passos para terminar

Page 6: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e FunçõesTodo algoritmo define uma função matemática

f(n)= # de instruções

Ex.:void Algoritmo3(int n)

int contador = 0;

for(int i = 0; i < n; i++)

for(int j = 0; j < n; j++)

for(int k = 0; k < n; k++)

contador++;

n*n*n passos para terminar

Page 7: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

Algoritmo1 Algoritmo2 Algoritmo3

n = 1 1 1 1

n = 10 10 102 103

n = 1000 103 106 109

n = 106 106 1012 1018

f(n) = n f(n) = n2 f(n) = n3

Page 8: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

Qual algoritmo você escolheria?

R.: basta olhar na função definida por cada algoritmo

A função de um algoritmo melhor algoritmo para um dado problema

Fatores: tempo de processamento, memória, acessos a disco, largura de banda, entre outros

Page 9: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

A prática de se reduzir um algoritmo a uma função matemática denomina-se

“Análise de complexidade de algoritmos”

Page 10: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos e Funções

Mas como se faz a análise de um algoritmo, matematicamente falando?

R.: Notação Assintótica: como estabelecer uma relação de ordem entre funções matemáticas?

Funções não são números!

Page 11: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica – Interpretação matemática

Caracterização de funções de 3 maneiras: limites assintóticos superior, inferior e estrito

Page 12: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica – Interpretação matemática

1) Limite assintótico superior: O(g(n))Uma função f(n) = O(g(n)), se f(n) ≤ c1*g(n) para uma

constante c1 > 0 e para n ≥ n0

n0

Page 13: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica – Interpretação matemática

2) Limite assintótico inferior: Ω(g(n))Uma função f(n) = Ω(g(n)), se f(n) ≥ c1*g(n) para uma

constante c1 > 0 e para n ≥ n0

Page 14: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica – Interpretação matemática

3) Limite assintótico estrito: θ(g(n))Uma função f(n) = θ(g(n)), se c1*g(n) ≤ f(n) ≤ c2*g(n)

para um constantes c1 e c2 > 0 e para n ≥ n0

Page 15: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica – Interpretação matemática

Principais limites assintóticos:

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(2n)

Page 16: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

Exemplo: suponha um algoritmo para calcular a soma de uma seqüência de números

Page 17: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

AlgForcaBruta(int n)

soma = 0

for(i = 1 to n)

soma = soma + i

1 n n

Custo total: 1 + n + n = 2n + 1

f(n) = 2n + 1

Page 18: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

AlgInstataneo(int n)

soma = n*(n+1)/2

4

Custo total: 4

f(n) = 4

Page 19: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

AlgBobo(int n)

soma = 0

for(i = 0 to n)

for(j = 1 to i)

soma = soma + 1

1 n n((n+1)/2) n((n+1)/2)

Custo total: 1 + n + n((n+1)/2) + n((n+1)/2)

f(n) = n2 + n +1

Page 20: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

O que temos então:

AlgForcaBruta: f(n) = 2n + 1 AlgInstantaneo: f(n) = 4 AlgBobo: f(n) = n2 + n +1

Page 21: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

O AlgForcaBruta tem complexidade

f(n) = θ(g(n))= θ(n) , isto é, g(n) = n

Mas por quê, se f(n) = 2n + 1?

R.: segundo a definição de limite assintótico estrito c1*g(n) ≤ f(n) ≤ c2*g(n) temos:

1*n ≤ f(n) = 2n + 1 ≤ 3*n

Page 22: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

O AlgInstantaneo tem complexidade

f(n) = θ(g(n))= θ(1) , isto é, g(n) = 1

Mas por quê, se f(n) = 4?

R.: segundo a definição de limite assintótico estrito c1*g(n) ≤ f(n) ≤ c2*g(n) temos:

3*1 ≤ f(n) = 4 ≤ 5*1

Page 23: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

O AlgBobo tem complexidade

f(n) = θ(g(n))= θ(n2) , isto é, g(n) = n2

Mas por quê, se f(n) = n2 + n + 1?

R.: segundo a definição de limite assintótico estrito c1*g(n) ≤ f(n) ≤ c2*g(n) temos:

1* n2 ≤ f(n) = n2 + n + 1 ≤ 2* n2

Page 24: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

O que temos então:

AlgForcaBruta: f(n) = 2n + 1 = θ(n)AlgInstantaneo: f(n) = 4 = θ(1)AlgBobo: f(n) = n2 + n +1 = θ(n2)

Analisando-se o que a notação assintótica define, verificam-se dois fatos:

Page 25: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

Analisando-se o que a notação assintótica define, verificam-se dois fatos:

1) A notação assintótica não está interessada na função específica f(n), mas na sua taxa de crescimento com relação a n. As constantes da função f(n) são ignoradas.

2) Os termos de mais baixa ordem são ignorados.

Page 26: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Aplicação a algoritmos

Mas por quê os termos de mais baixa ordem são ignorados?

R.: a notação considera valores de n arbitrariamente grandes. Se f(n) < h(n), então f(n)

h(n)limn∞

= 0

Ex.: f(n) = n2 > h(n) = npara n = 1010, temos n = 1010 = 0

n2 10100

~

Page 27: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

Os limites assintóticos têm a seguinte interpretação com relação a algoritmos.

Dado um algoritmo com função f(n)...

Page 28: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Limite assintótico superior: O(g(n))Indica que não importam quais as circunstâncias, f(n) ≤ g(n) sempre

“g(n) é o pior que o meu algoritmo pode fazer”

Page 29: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

Exemplo: algoritmo de ordenação QuicksortPossíveis circunstâncias:

1) ordenar uma seqüência que já está em ordemo Quicksort tem custo n2

2) ordenar uma seqüência totalmente embaralhadao Quicksort tem custo n*logn

como n2 é o pior que o Quicksort pode fazer, ele terá sempre

f(n) ≤ n2 O(n2)

Page 30: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Limite assintótico inferior: Ω(g(n))Indica que não importam quais as circunstâncias, f(n) ≥ g(n) sempre

“g(n) é o melhor que o meu algoritmo pode fazer”

Page 31: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

Exemplo: algoritmo de ordenação QuicksortPossíveis circunstâncias:

1) ordenar uma seqüência que já está em ordemo Quicksort demora n2

2) ordenar uma seqüência totalmente embaralhadao Quicksort demora n*logn

como n*logn é o melhor que o Quicksort pode fazer, ele terá sempre

f(n) ≥ n*logn Ω(n*logn)

Page 32: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Limite assintótico estrito: θ(g(n))Indica que não importam quais as circunstâncias, c1g(n) ≤ f(n) ≤ c2g(n) sempre

“meu algoritmo não faz nem pior, nem melhor que g(n)”

Page 33: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

Exemplo: algoritmo de ordenação HeapsortPossíveis circunstâncias:

1) seqüência já ordenada custo n*logn2) seqüência em ordem inversa custo n*logn3) seqüência totalmente embaralhada custo n*logn

em todos os casos n*logn é sempre o que o meu algoritmo faz

c1n*logn ≤ f(n) ≤ c2n*logn θ(n*logn)

Page 34: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Pior caso, melhor caso e caso médio

Exemplo: algoritmo de ordenação Insertion-sortPossíveis circunstâncias1) seqüência já ordenada custo n2) seqüência em ordem inversa custo n2

3) seqüência toda embaralhada custo n + d, tal que d é o número de operações de rearranjo

Page 35: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

Page 36: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)

1) já ordenada custo n2) em ordem inversa custo n2

3) toda embaralhada custo n + d

Page 37: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

1) já ordenada custo n2) em ordem inversa custo n2

3) toda embaralhada custo n + d

Page 38: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

1) já ordenada custo n2) em ordem inversa custo n2

3) toda embaralhada custo n + d

Page 39: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

1) já ordenada custo n2) em ordem inversa custo n2

3) toda embaralhada custo n + d

Page 40: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

Page 41: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

Page 42: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Interpretação algorítmica

• Para o Insertion-sort valem as seguintes afirmações:• ele é, ao mesmo tempo, O(n2) e Ω(n)• considerando-se apenas as melhores entradas,

pode-se dizer:“θ(n) no melhor caso”

• considerando-se apenas as piores entradas, pode-se dizer:

“θ(n2) no pior caso”• considerando-se apenas as demais entradas, que

são a maioria mais provável, pode-se dizer: “θ(n + d) no caso médio”

Intuição geral:

• quando se diz: “um algoritmo tem complexidade x”

isso é válido para TODAS as entradas

• quando se diz: “um algoritmo tem complexidade x em tal caso”

isso é válido para TODAS as entradas que constituem aquele caso

Page 43: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Limitações

• Como se pode ver, a notação assintótica tem expressividade limitada1) por si só, ela não apresenta dados a respeito da

qualidade da entrada2) a notação oculta fatores importantes que podem

fazer diferença na escolha de um algoritmoPor exemplo:

se um algoritmo tem complexidade n2 = θ(n2) e outro algoritmo tem complexidade 100n = θ(n)

entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100

Page 44: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Limitações

• Como se pode ver, a notação assintótica tem expressividade limitada1) por si só, ela não apresenta dados a respeito da

qualidade da entrada2) a notação oculta fatores importantes que podem

fazer diferença na escolha de um algoritmoPor exemplo:

se um algoritmo tem complexidade n2 = θ(n2) e outro algoritmo tem complexidade 100n = θ(n)

entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100

Page 45: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Limitações

• Como se pode ver, a notação assintótica tem expressividade limitada1) por si só, ela não apresenta dados a respeito da

qualidade da entrada2) a notação oculta fatores importantes que podem

fazer diferença na escolha de um algoritmoPor exemplo:

se um algoritmo tem complexidade n2 = θ(n2) e outro algoritmo tem complexidade 100n = θ(n)

entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100

Page 46: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Limitações

• Como se pode ver, a notação assintótica tem expressividade limitada1) por si só, ela não apresenta dados a respeito da

qualidade da entrada2) a notação oculta fatores importantes que podem

fazer diferença na escolha de um algoritmoPor exemplo:

se um algoritmo tem complexidade n2 = θ(n2) e outro algoritmo tem complexidade 100n = θ(n)

entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100

É preciso conhecer bem o problema que se tem, para que se possa fazer uma boa

escolha.

Page 47: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Notação Assintótica Um indicador geral

• Usada para indicar os requisitos de qualquer fator que creça como uma função de n. Os principais são: • tempo, como já visto• o espaço de memória• o número de acessos a disco• a largura de banda

Page 48: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos Polinomiais e Exponenciais

Page 49: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Algoritmos Polinomiais e Exponenciais

Suponha-se um algoritmo com ordem O(2n)

para n = 100 um computador que realiza 212 operações/segundo

tempo total: 4*1010 anos!!!

Page 50: Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e intratáveis

http://www.icmc.usp.br/pessoas/junio

Conclusões

• A análise de complexidade depende da compreensão de dois fatores:• interpretação matemática• interpretação algorítmica

• Deve-se sempre lembrar que existem outras dimensões envolvidas na análise, como qualidade da entrada e arquitetura computacional

• A análise assintótica fornece um bom parâmetro, mas não deve ser o único a ser considerado