Complexidade de Algoritmos: 
Tempo e espaço; Notação 
assintótica; Algoritmos 
polinomiais e intratáveis 
Professor: José Fernando Rodrigues Júnior 
Universidade de São Paulo 
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 
http://www.icmc.usp.br/pessoas/junio
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.
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++){ 
http://www.icmc.usp.br/pessoas/junio 
contador++; 
} 
} 
 n passos para terminar
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++; 
http://www.icmc.usp.br/pessoas/junio 
} 
} 
} 
 n*n passos para terminar
Algoritmos e Funções 
Todo 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++; 
http://www.icmc.usp.br/pessoas/junio 
} 
} 
} 
} 
 n*n*n passos para terminar
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 
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 
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” 
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! 
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 
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 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica – Interpretação 
matemática 
2) Limite assintótico inferior: W(g(n)) 
Uma função f(n) = W(g(n)), se f(n) ≥ c1*g(n) para uma 
constante c1 > 0 e para n ≥ n0 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica – Interpretação 
matemática 
3) Limite assintótico estrito: q(g(n)) 
Uma função f(n) = q(g(n)), se c1*g(n) ≤ f(n) ≤ c2*g(n) 
para um constantes c1 e c2 > 0 e para n ≥ n0 
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) 
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 
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 
http://www.icmc.usp.br/pessoas/junio 
} 
 1 
 n 
 n 
 Custo total: 1 + n + n = 2n + 1 
 f(n) = 2n + 1
Notação Assintótica 
Aplicação a algoritmos 
AlgInstataneo(int n){ 
soma = n*(n+1)/2 
 4 
} 
http://www.icmc.usp.br/pessoas/junio 
 Custo total: 4 
 f(n) = 4
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 
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 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Aplicação a algoritmos 
O AlgForcaBruta tem complexidade 
f(n) = q(g(n))= q(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 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Aplicação a algoritmos 
O AlgInstantaneo tem complexidade 
f(n) = q(g(n))= q(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 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Aplicação a algoritmos 
O AlgBobo tem complexidade 
f(n) = q(g(n))= q(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 
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 = q(n) 
AlgInstantaneo: f(n) = 4 = q(1) 
AlgBobo: f(n) = n2 + n +1 = q(n2) 
Analisando-se o que a notação assintótica define, 
verificam-se dois fatos: 
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. 
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) 
lim 
n¥ = 0 
http://www.icmc.usp.br/pessoas/junio 
h(n) 
Ex.: f(n) = n2 > h(n) = n 
para n = 1010, temos n = 1010 = 0 
n2 10100 
~
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)... 
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” 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Interpretação algorítmica 
Exemplo: algoritmo de ordenação Quicksort 
Possíveis circunstâncias: 
1) ordenar uma seqüência que já está em ordem 
o Quicksort tem custo n2 
2) ordenar uma seqüência totalmente embaralhada 
o Quicksort tem custo n*logn 
 como n2 é o pior que o Quicksort pode fazer, ele 
terá sempre 
f(n) ≤ n2  O(n2) 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Interpretação algorítmica 
• Limite assintótico inferior: W(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” 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Interpretação algorítmica 
Exemplo: algoritmo de ordenação Quicksort 
Possíveis circunstâncias: 
1) ordenar uma seqüência que já está em ordem 
o Quicksort demora n2 
2) ordenar uma seqüência totalmente embaralhada 
o Quicksort demora n*logn 
 como n*logn é o melhor que o Quicksort pode 
fazer, ele terá sempre 
f(n) ≥ n*logn  W(n*logn) 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Interpretação algorítmica 
• Limite assintótico estrito: q(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)” 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Interpretação algorítmica 
Exemplo: algoritmo de ordenação Heapsort 
Possíveis circunstâncias: 
1) seqüência já ordenada  custo n*logn 
2) seqüência em ordem inversa  custo n*logn 
3) 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  q(n*logn) 
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-sort 
Possíveis circunstâncias 
1) seqüência já ordenada  custo n 
2) 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 
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 W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
1) já ordenada  custo n 
2) em ordem inversa  custo n2 
3) toda embaralhada  custo n + d 
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 W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
1) já ordenada  custo n 
2) em ordem inversa  custo n2 
3) toda embaralhada  custo n + d 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
1) já ordenada  custo n 
2) em ordem inversa  custo n2 
3) toda embaralhada  custo n + d 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
1) já ordenada  custo n 
2) em ordem inversa  custo n2 
3) toda embaralhada  custo n + d 
• considerando-se apenas as piores entradas, pode-se 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio”
Notação Assintótica 
Interpretação algorítmica 
• Para o Insertion-sort valem as seguintes afirmações: 
Intuição geral: 
• ele é, ao mesmo tempo, O(n2) e W(n) 
• considerando-se apenas as melhores entradas, 
pode-se dizer: 
“q(n) no melhor caso” 
• considerando-se apenas as piores entradas, pode-se 
http://www.icmc.usp.br/pessoas/junio 
dizer: 
“q(n2) no pior caso” 
• considerando-se apenas as demais entradas, que 
são a maioria mais provável, pode-se dizer: 
“q(n + d) no caso médio” 
• 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
Notação Assintótica 
Limitações 
• Como se pode ver, a notação assintótica tem 
expressividade limitada 
1) por si só, ela não apresenta dados a respeito da 
qualidade da entrada 
2) a notação oculta fatores importantes que podem 
fazer diferença na escolha de um algoritmo 
Por exemplo: 
se um algoritmo tem complexidade n2 = q(n2) 
e outro algoritmo tem complexidade 100n = q(n) 
 entradas de tamanho até 100, é melhor usar o 
primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Limitações 
• Como se pode ver, a notação assintótica tem 
expressividade limitada 
1) por si só, ela não apresenta dados a respeito da 
qualidade da entrada 
2) a notação oculta fatores importantes que podem 
fazer diferença na escolha de um algoritmo 
Por exemplo: 
se um algoritmo tem complexidade n2 = q(n2) 
e outro algoritmo tem complexidade 100n = q(n) 
 entradas de tamanho até 100, é melhor usar o 
primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Limitações 
• Como se pode ver, a notação assintótica tem 
expressividade limitada 
1) por si só, ela não apresenta dados a respeito da 
qualidade da entrada 
2) a notação oculta fatores importantes que podem 
fazer diferença na escolha de um algoritmo 
Por exemplo: 
se um algoritmo tem complexidade n2 = q(n2) 
e outro algoritmo tem complexidade 100n = q(n) 
 entradas de tamanho até 100, é melhor usar o 
primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 
http://www.icmc.usp.br/pessoas/junio
Notação Assintótica 
Limitações 
• Como se pode ver, a notação assintótica tem 
expressividade limitada 
1) por si só, ela não apresenta dados a respeito da 
qualidade da entrada 
2) a É notação preciso oculta conhecer fatores bem o importantes problema que que se 
podem 
fazer tem, diferença para que na se escolha possa fazer de um uma algoritmo 
boa 
Por exemplo: 
escolha. 
se um algoritmo tem complexidade n2 = q(n2) 
e outro algoritmo tem complexidade 100n = q(n) 
 entradas de tamanho até 100, é melhor usar o 
primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 
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 
http://www.icmc.usp.br/pessoas/junio
Algoritmos Polinomiais e 
Exponenciais 
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!!! 
http://www.icmc.usp.br/pessoas/junio
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

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

  • 1.
    Complexidade de Algoritmos: Tempo e espaço; Notação assintótica; Algoritmos polinomiais e intratáveis Professor: José Fernando Rodrigues Júnior Universidade de São Paulo http://www.icmc.usp.br/pessoas/junio
  • 2.
     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 http://www.icmc.usp.br/pessoas/junio
  • 3.
    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.
  • 4.
    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++){ http://www.icmc.usp.br/pessoas/junio contador++; } }  n passos para terminar
  • 5.
    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++; http://www.icmc.usp.br/pessoas/junio } } }  n*n passos para terminar
  • 6.
    Algoritmos e Funções Todo 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++; http://www.icmc.usp.br/pessoas/junio } } } }  n*n*n passos para terminar
  • 7.
    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 http://www.icmc.usp.br/pessoas/junio
  • 8.
    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 http://www.icmc.usp.br/pessoas/junio
  • 9.
    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” http://www.icmc.usp.br/pessoas/junio
  • 10.
    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! http://www.icmc.usp.br/pessoas/junio
  • 11.
    Notação Assintótica –Interpretação matemática  Caracterização de funções de 3 maneiras:  limites assintóticos superior, inferior e estrito http://www.icmc.usp.br/pessoas/junio
  • 12.
    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 http://www.icmc.usp.br/pessoas/junio
  • 13.
    Notação Assintótica –Interpretação matemática 2) Limite assintótico inferior: W(g(n)) Uma função f(n) = W(g(n)), se f(n) ≥ c1*g(n) para uma constante c1 > 0 e para n ≥ n0 http://www.icmc.usp.br/pessoas/junio
  • 14.
    Notação Assintótica –Interpretação matemática 3) Limite assintótico estrito: q(g(n)) Uma função f(n) = q(g(n)), se c1*g(n) ≤ f(n) ≤ c2*g(n) para um constantes c1 e c2 > 0 e para n ≥ n0 http://www.icmc.usp.br/pessoas/junio
  • 15.
    Notação Assintótica –Interpretação matemática Principais limites assintóticos: O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(2n) http://www.icmc.usp.br/pessoas/junio
  • 16.
    Notação Assintótica Aplicaçãoa algoritmos Exemplo: suponha um algoritmo para calcular a soma de uma seqüência de números http://www.icmc.usp.br/pessoas/junio
  • 17.
    Notação Assintótica Aplicaçãoa algoritmos AlgForcaBruta(int n){ soma = 0 for(i = 1 to n) soma = soma + i http://www.icmc.usp.br/pessoas/junio }  1  n  n  Custo total: 1 + n + n = 2n + 1  f(n) = 2n + 1
  • 18.
    Notação Assintótica Aplicaçãoa algoritmos AlgInstataneo(int n){ soma = n*(n+1)/2  4 } http://www.icmc.usp.br/pessoas/junio  Custo total: 4  f(n) = 4
  • 19.
    Notação Assintótica Aplicaçãoa 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 http://www.icmc.usp.br/pessoas/junio
  • 20.
    Notação Assintótica Aplicaçãoa algoritmos O que temos então:  AlgForcaBruta: f(n) = 2n + 1  AlgInstantaneo: f(n) = 4  AlgBobo: f(n) = n2 + n +1 http://www.icmc.usp.br/pessoas/junio
  • 21.
    Notação Assintótica Aplicaçãoa algoritmos O AlgForcaBruta tem complexidade f(n) = q(g(n))= q(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 http://www.icmc.usp.br/pessoas/junio
  • 22.
    Notação Assintótica Aplicaçãoa algoritmos O AlgInstantaneo tem complexidade f(n) = q(g(n))= q(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 http://www.icmc.usp.br/pessoas/junio
  • 23.
    Notação Assintótica Aplicaçãoa algoritmos O AlgBobo tem complexidade f(n) = q(g(n))= q(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 http://www.icmc.usp.br/pessoas/junio
  • 24.
    Notação Assintótica Aplicaçãoa algoritmos O que temos então: AlgForcaBruta: f(n) = 2n + 1 = q(n) AlgInstantaneo: f(n) = 4 = q(1) AlgBobo: f(n) = n2 + n +1 = q(n2) Analisando-se o que a notação assintótica define, verificam-se dois fatos: http://www.icmc.usp.br/pessoas/junio
  • 25.
    Notação Assintótica Aplicaçãoa 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. http://www.icmc.usp.br/pessoas/junio
  • 26.
    Notação Assintótica Aplicaçãoa 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) lim n¥ = 0 http://www.icmc.usp.br/pessoas/junio h(n) Ex.: f(n) = n2 > h(n) = n para n = 1010, temos n = 1010 = 0 n2 10100 ~
  • 27.
    Notação Assintótica Interpretaçãoalgorítmica Os limites assintóticos têm a seguinte interpretação com relação a algoritmos. Dado um algoritmo com função f(n)... http://www.icmc.usp.br/pessoas/junio
  • 28.
    Notação Assintótica Interpretaçãoalgorí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” http://www.icmc.usp.br/pessoas/junio
  • 29.
    Notação Assintótica Interpretaçãoalgorítmica Exemplo: algoritmo de ordenação Quicksort Possíveis circunstâncias: 1) ordenar uma seqüência que já está em ordem o Quicksort tem custo n2 2) ordenar uma seqüência totalmente embaralhada o Quicksort tem custo n*logn  como n2 é o pior que o Quicksort pode fazer, ele terá sempre f(n) ≤ n2  O(n2) http://www.icmc.usp.br/pessoas/junio
  • 30.
    Notação Assintótica Interpretaçãoalgorítmica • Limite assintótico inferior: W(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” http://www.icmc.usp.br/pessoas/junio
  • 31.
    Notação Assintótica Interpretaçãoalgorítmica Exemplo: algoritmo de ordenação Quicksort Possíveis circunstâncias: 1) ordenar uma seqüência que já está em ordem o Quicksort demora n2 2) ordenar uma seqüência totalmente embaralhada o Quicksort demora n*logn  como n*logn é o melhor que o Quicksort pode fazer, ele terá sempre f(n) ≥ n*logn  W(n*logn) http://www.icmc.usp.br/pessoas/junio
  • 32.
    Notação Assintótica Interpretaçãoalgorítmica • Limite assintótico estrito: q(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)” http://www.icmc.usp.br/pessoas/junio
  • 33.
    Notação Assintótica Interpretaçãoalgorítmica Exemplo: algoritmo de ordenação Heapsort Possíveis circunstâncias: 1) seqüência já ordenada  custo n*logn 2) seqüência em ordem inversa  custo n*logn 3) 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  q(n*logn) http://www.icmc.usp.br/pessoas/junio
  • 34.
    Notação Assintótica Interpretaçãoalgorítmica • Pior caso, melhor caso e caso médio Exemplo: algoritmo de ordenação Insertion-sort Possíveis circunstâncias 1) seqüência já ordenada  custo n 2) 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 http://www.icmc.usp.br/pessoas/junio
  • 35.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 36.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) 1) já ordenada  custo n 2) em ordem inversa  custo n2 3) toda embaralhada  custo n + d http://www.icmc.usp.br/pessoas/junio
  • 37.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se 1) já ordenada  custo n 2) em ordem inversa  custo n2 3) toda embaralhada  custo n + d http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 38.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se 1) já ordenada  custo n 2) em ordem inversa  custo n2 3) toda embaralhada  custo n + d http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 39.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” 1) já ordenada  custo n 2) em ordem inversa  custo n2 3) toda embaralhada  custo n + d • considerando-se apenas as piores entradas, pode-se http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 40.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 41.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio”
  • 42.
    Notação Assintótica Interpretaçãoalgorítmica • Para o Insertion-sort valem as seguintes afirmações: Intuição geral: • ele é, ao mesmo tempo, O(n2) e W(n) • considerando-se apenas as melhores entradas, pode-se dizer: “q(n) no melhor caso” • considerando-se apenas as piores entradas, pode-se http://www.icmc.usp.br/pessoas/junio dizer: “q(n2) no pior caso” • considerando-se apenas as demais entradas, que são a maioria mais provável, pode-se dizer: “q(n + d) no caso médio” • 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
  • 43.
    Notação Assintótica Limitações • Como se pode ver, a notação assintótica tem expressividade limitada 1) por si só, ela não apresenta dados a respeito da qualidade da entrada 2) a notação oculta fatores importantes que podem fazer diferença na escolha de um algoritmo Por exemplo: se um algoritmo tem complexidade n2 = q(n2) e outro algoritmo tem complexidade 100n = q(n)  entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 http://www.icmc.usp.br/pessoas/junio
  • 44.
    Notação Assintótica Limitações • Como se pode ver, a notação assintótica tem expressividade limitada 1) por si só, ela não apresenta dados a respeito da qualidade da entrada 2) a notação oculta fatores importantes que podem fazer diferença na escolha de um algoritmo Por exemplo: se um algoritmo tem complexidade n2 = q(n2) e outro algoritmo tem complexidade 100n = q(n)  entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 http://www.icmc.usp.br/pessoas/junio
  • 45.
    Notação Assintótica Limitações • Como se pode ver, a notação assintótica tem expressividade limitada 1) por si só, ela não apresenta dados a respeito da qualidade da entrada 2) a notação oculta fatores importantes que podem fazer diferença na escolha de um algoritmo Por exemplo: se um algoritmo tem complexidade n2 = q(n2) e outro algoritmo tem complexidade 100n = q(n)  entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 http://www.icmc.usp.br/pessoas/junio
  • 46.
    Notação Assintótica Limitações • Como se pode ver, a notação assintótica tem expressividade limitada 1) por si só, ela não apresenta dados a respeito da qualidade da entrada 2) a É notação preciso oculta conhecer fatores bem o importantes problema que que se podem fazer tem, diferença para que na se escolha possa fazer de um uma algoritmo boa Por exemplo: escolha. se um algoritmo tem complexidade n2 = q(n2) e outro algoritmo tem complexidade 100n = q(n)  entradas de tamanho até 100, é melhor usar o primeiro algoritmo, pois n2 ≤ 100n, para n ≤ 100 http://www.icmc.usp.br/pessoas/junio
  • 47.
    Notação Assintótica Umindicador 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 http://www.icmc.usp.br/pessoas/junio
  • 48.
    Algoritmos Polinomiais e Exponenciais http://www.icmc.usp.br/pessoas/junio
  • 49.
    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!!! http://www.icmc.usp.br/pessoas/junio
  • 50.
    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