Você está na página 1de 39

Programação Avançada

Prof. Maurício Aldenor


040601707@prof.unama.br

2022
Contagem de instruções
• Voltando...................
• Dois passos:
• Contar o número de instruções;
• Analisar o crescimento em função do tamanho da entrada.
Análise de funções
• Análise da função f(n) = 6n² + 100n + 300

f(n)

n
Análise de funções
• Análise da função f(n) = (6n²/10) + (100n + 300)*10

f(n)

n
Notação assintótica
• É uma notação que permite descartar os termos constantes e
menos significativos de f(n);
• Foco no que é realmente relevante!
Notação assintótica
• Motivação:
• Para valores suficientemente pequenos de n, qualquer
algoritmo custa pouco para ser executado.
• Mesmo os ineficientes!
• A escolha do algoritmo não é um problema crítico para
problemas de tamanho pequeno.
Notação assintótica
• Custo assintótico de funções:
• Estamos interessados em saber como a função de
complexidade de tempo se comporta quando n tende ao
infinito;
• Se um algoritmo é mais rápido que outro para uma grande
quantidade de dados de entrada, então é provável que ele
continue sendo para uma quantidade de dados menor.
Notação assintótica
• Analisando assintoticamente a função abaixo:

n
f(n) = 4n + 3

f(n) = 4 +3
Notação assintótica
• Custo assintótico de funções:
• Descartar os termos constantes e menos significativos;
• Manter apenas o que cresce mais rápido à medida que o n é
maior.
Notação assintótica
• Analisando assintoticamente as funções de complexidade
abaixo, risque o que deve ser descartado e mantenha o que
deve ser considerado quando n cresce indefinidamente.
a) f(n) = 2n² + n/2 + 9
b) f(n) = 5 + n/2
c) f(n) = 2n³ + n² + 2n + 7
d) f(n) = 57
f(n) = 1 d)
f(n) = n³ c)
f(n) = n b)
Pausa para você
f(n) = n² a) tentar.
Respostas: Agora é a sua
vez!
DÚVIDAS?
Programação Avançada

Prof. Maurício Aldenor

040601707@prof.unama.br

2022
Notação assintótica
• É uma abstração que nos permite focar no que ocorre com f(n)
quando n cresce indefinidamente
• Termos de menor ordem não importam
• Constantes não importam
• f(n) = 2n3 + 4000n2 + 10000n - 47
Notação assintótica
• Notações
• As mais conhecidas são:

O
θ
Ω
Notação O [Big-O, Ozão ou Ozão de n]
• Definição
• Seja n um inteiro positivo e sejam f(n) e g(n) funções positivas.
Dizemos que
f(n) = O(g(n)) [ou f(n) é O(g(n))]
se existem constantes positivas c e n0 tais que
f(n) ≤ c.g(n) | n ≥ n0
Notação O [Big-O, Ozão ou Ozão de n]
• Informalmente, dizemos que se f(n) ∊ O(g(n)), então f(n) cresce
no máximo tão rapidamente quanto g(n).
• f(n) é um limite assintótico superior para g(n).
• Utilização:
• O Big-O representa o limite superior (pior caso)!
Notação O [Big-O, Ozão ou Ozão de n]
• Exemplo:
• Suponha um algoritmo X com tempo de execução O(n2):
• Os dados de entrada que geram o pior caso do algoritmo
X tem tempo de execução O(n2).
OU
• Não importando como os dados de entrada estão
organizados o algoritmo X possui tempo de execução
O(n2).
Notação O [Big-O, Ozão ou Ozão de n]
• Prova - Exemplo 1:
f(n) = 2n + 4
g(n) = n2 // achar c para satisfazer f(n) <= c.g(n):
Temos:
2n + 4 <= c.n2
2n + 4 <= 6.n2, sendo n >= 1
f(n) < 6.g(n) <-> f(n) < c.g(n), sendo c = 6
f(n) é O(g(n))
Notação O [Big-O, Ozão ou Ozão de n]
• Prova - Exemplo 2:
f(n) = 2n + 4
g(n) = n // achar c para satisfazer f(n) <= c.g(n):
Temos:
2n + 4 <= c.n => Se c for 4 = 4.g(n) para todo n >= 3
g(n) domina assintoticamente f(n) ou
f(n) é O(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação O [Big-O, Ozão ou Ozão de n]
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = √n // achar c para satisfazer f(n) <= c.g(n):
Temos:
2n + 4 <= c.√n => Não existe um c capaz de “dominar”, portanto:
f(n) não é O(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação O [Big-O, Ozão ou Ozão de n]
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = n.log2n // achar c para satisfazer f(n) <= c.g(n):
Temos:
2n + 4 <= c.n.log2n => 4.n.log2n, para n >= 2
f(n) é O(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
DÚVIDAS?
Notação Ω (ômega)
• Definição
• Seja n um inteiro positivo e sejam f(n) e g(n) funções positivas.
Dizemos que
f(n) = Ω(g(n)) [ou f(n) é Ω(g(n))]
se existem constantes positivas c e n0 tais que
f(n) ≥ c.g(n) | n ≥ n0
Notação Ω (ômega)
• Definição:
• Informalmente, dizemos que se f(n) ∊ Ω(g(n)), então f(n)
cresce no mínimo tão lentamente quanto g(n).
• f(n) é um limite assintótico inferior para g(n).
• Utilização:
• O Ω representa o limite inferior (melhor caso)!
Notação Ω (ômega)
• Exemplo:
• Suponha um algoritmo Y com tempo de execução Ω(n):
• Os dados de entrada que geram o melhor caso do
algoritmo Y tem tempo de execução Ω(n).
Notação Ω (ômega)
• Prova - Exemplo 1:
f(n) = 2n + 4
g(n) = n2 // achar c para satisfazer f(n) >= c.g(n):
Temos:
2n + 4 >= c.n2 => Neste caso, não existe uma constante que
permita considerar a condição, portanto:
f(n) não é Ω(g(n))
Notação Ω (ômega)
• Prova - Exemplo 2:
f(n) = 2n + 4
g(n) = n // achar c para satisfazer f(n) >= c.g(n):
Temos:
2n + 4 >= c.n => Se c for 1 = 1.g(n) para todo n >= 1
f(n) é Ω(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação Ω (ômega)
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = √n // achar c para satisfazer f(n) >= c.g(n):
Temos:
2n + 4 >= c.√n => Se c = 6, para n >= 1, satisfaz a condição,
portanto:
f(n) é Ω(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação Ω (ômega)
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = n.log2n // achar c para satisfazer f(n) >= c.g(n):
Temos:
2n + 4 >= c.n.log2n => Não existe uma constante para satisfazer
a condição para algum n >= x
f(n) não é Ω(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
DÚVIDAS?
Notação θ (teta)
• Definição
• Seja n um inteiro positivo e sejam f(n) e g(n) funções positivas.
Dizemos que
f(n) = θ(g(n)) [ou f(n) é θ(g(n))]
se existem constantes positivas c1, c2 e n0 tais que
c1.g(n) ≤ f(n) ≤ c2.g(n) | n ≥ n0
Obs: f(n) é θ(g(n)) se, e somente se, f(n) é O(g(n)) e é Ω(g(n))
Notação θ (teta)
• Definição:
• Informalmente, dizemos que se c1.g(n) <= f(n) <= c2.g(n),
então f(n) cresce no máximo tão rapidamente quanto c1.g(n) e
no mínimo tão lentamente quanto c2.g(n).
• f(n) é um limite assintótico médio para g(n).
• Utilização:
• O θ representa o limite médio (caso médio)!
Notação θ (teta)
• Prova - Exemplo 1:
f(n) = 2n + 4
g(n) = n2 // achar c1 e c2 para satisfazer c1.g(n) <= f(n) <= c2.g(n):
Temos:
c1.n2 <= 2n + 4 <= c2.n2 => Neste caso, não existem constantes
que permitam considerar a condição, portanto:
f(n) não é θ(g(n))
Notação θ (teta)
• Prova - Exemplo 2:
f(n) = 2n + 4
g(n) = n // achar c1 e c2 para satisfazer c1.g(n) <= f(n) <= c2.g(n):
Temos:
c1.n <= 2n + 4 <= c2.n => Se c1 for 1 e c2 for 6 para todo n >= 1
Portanto:
f(n) é θ(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação θ (teta)
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = √n // achar c1 e c2 para satisfazer c1.g(n) <= f(n) <= c2.g(n):
Temos:
c1.√n <= 2n + 4 <= c2.√n => Nós vimos que f(n) não é O(√n), portanto:
f(n) não é θ(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação θ (teta)
• Prova - Exemplo 3:
f(n) = 2n + 4
g(n) = n.log2n // achar c1 e c2 para satisfazer c1.g(n) <= f(n) <=
c2.g(n):
Temos:
c1.n.log2n <= 2n + 4 <= c2.n.log2n => Vimos que f(n) não é
Ω(g(n)), portanto:
f(n) não é θ(g(n))

Pausa para você


tentar.
Agora é a sua
vez!
Notação assintótica
Resumo

(a) A notação θ (teta) limita uma função entre fatores constantes.


(b) A notação O dá um limite superior para uma função dentro de um fator constante.
(c) A notação Ω (ômega) dá um limite inferior para uma função dentro de um fator constante.

Extraída de Cormen (2012).


DÚVIDAS?
Referências
Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. Algoritmos
- teoria e prática. 3ª edição. Rio de Janeiro: Elsevier, 2012.
Notas de aula do professor Antonio Jacob (UEMA).
Notas de aula do professor Eduardo Mendes de Oliveira (UFC).

Você também pode gostar