Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aula 2
Definição 1. Sejam f e g funções do conjunto dos inteiros (ou dos reais) nos reais. Diremos
que f (x) é O(x) se existem as constantes C e k tais que
|f (x)| ≤ C|g(x)
0 ≤ x2 + 2x + 1 ≤ x2 + 2x2 + x2 = 4x2
0 < x2 + 2x + 1 ≤ x2 + x2 + x2 = 3x2
7x2 < x · x2 = x3
1
Exemplo 5. É verdade que x3 é O(7x2 )?
Solução: Suponhamos por absurdo que sim, isto é, existe C, k tais que x3 ≤ C · 7x2 para
x > k. Assim,
x3 < C · 7x2 |{z}
⇒ x < 7c
÷x2
|f (x)| = |an xn + · · · + a1 x + a0
≤ |an |xn + · · · |a1 |x + |a0 |
= xn |an | + · · · + |a1 |/xn−1 + |a0 |/xn
1 + 2 + · · · + n ≤ n + n + · · · + n = n(1 + 1 + · · · + 1) = n · · · n = n2 .
n! = 1 · 2 · 3 · · · n
≤ n · n · n···n
= nn
2
Exemplo 9. Mostre que log(n) é O(n).
Solução: Note que,
log(n) n 1
logb (n) = ≤ = n
log(b) log(b) log(b)
1
Assim, basta tomar C = log(b)
e n > 1 (k = 1) para termos que logb (n) é O(n).
A notação big − oh é usada para estimar o número de operações necessárias para se resolver
um problema usando um procedimento especı́fico ou um algoritmo. Algumas funções usadas
para tais estimativas são:
1, log(n), n, nlog(n), n2 , 2n , n!.
Agora, vejamos alguns teoremas para estimarmos big-oh para uma combinação de funções.
Teorema 10. Suponha que f1 (x) é O(g1 (x)) e que f2 (x) é O(g2 (x)). Então (f1 + f2 )(x) é
O (max(|g1 (x)|, |g2 (x)|)).
Temos que
em que g(x) = maxO (|g1 (x)|, |g2 (x)|). Assim, basta tomar C = C1 + C2 e x > k = max(k1 , k2 )
para termos que (f1 + f2 )(x) é O (max(|g1 (x)|, |g2 (x)|)).
Teorema 11. Suponha que f1 (x) é O(g1 (x)) e que f2 (x) é O(g2 (x)). Então (f1 f2 )(x) é
O (g1 (x)g2 (x)).
3
Temos que
Assim, basta tomar C = C1 C2 e k = max(k1 , k2 ) para termos que f1 f2 (x) é O((g1 g2 )(x)).
3nlog(n!) ≤ 3nlog(nn )
= 3n · nlog(n)
= 3n2 log(n)
Assim, basta tomar C = 3 e k = 1 para termos que 3nlog(n!) é O(n2 log(n)). Por outro lado,
n2 + 3 ≤ 2n2 para n > 2(k = 2). Assim, basta tomar C = 2 e k = 2 para termos que
n2 + 3 é O(n2 ). Pelo Teorema 11, temos que (n2 + 3)log(n) é O(n2 log(n)). Pelo Teorema 10
(trivialmente), temos que 3nlog(n!) + (n2 + 3)log(n) é O(n2 log(n)).
Solução: Temos que x + 1 é O(x) e que x2 + 1 ≤ 2x2 desde que x > 1(k = 1). Portanto,
log(x2 + 1) ≤ log(2x2 )
= log(2) + log(x2 )
= log(2) + 2log(x)
= 3log(x)
desde que x > 2. Isto mostra que log(x2 + 1) é O(log(x)). Segue do Teorema 11 que
(x + 1)log(x2 + 1) é O(xlog(x)). Como 3x2 é O(x2 ) o Teorema 10 nos assegura que (x +
1)log(x2 + 1) + 3x2 é O(max(xlog(x), x2 )). Como xlog(x) ≤ x2 para x > 1, temos que f (x) é
O(x2 ).
4
Definição 14. Sejam f e g funções do conjunto dos inteiros (ou dos reais) no conjunto do
reais. Dizemos que f (x) é Ω(g(x)) se existem constantes positivas C, k tais que
|f (x)| ≥ C|g(x)|
Exemplo 15. Note que f (x) = 8x3 + 5x2 + 7 é Ω(g(x)) em que g(x) = x3 . De fato, f (x) =
8x3 + 5x2 + 7 ≥ 8x3 (C = 3) para todo x > 0(k = 0).
Definição 16. Sejam f e g funções do conjunto dos inteiros (ou dos reais) no conjunto dos
reais. Nós dizemos que f (x) é Θ(g(x)) se f (x) é O(g(x)) e f (x) é Ω(g(x)). Neste caso, dizemos
que ”f (x) é big-Theta de g(x)”, ou que f (x) e g(x) têm a mesma ordem.
Pode-se mostrar que f (x) é Θ(g(x)) se, e somente se, existem constantes reais positivas C1 ,
C2 , k tais que
C1 |g(x)| ≤ f (x) ≤ C2 |g(x)|
sempre que x > k. Isto é equivalente a dizer que f (x) é Θ(g(x)) se, e somente se, f (x) é O(g(x))
e g(x) é O(f (x)).
Exemplo 17. Mostre que a soma dos n primeiros inteiros positivos tem ordem n2 .
Solunção: No Exemplo 7 vimos que f (n) = 1 + 2 + · · · + n é O(n2 ). Agora, basta obtermos
C tal que f (n) > Cn2 para k > n (n suficientemente grande). Note que
hni h n i h n i
1 + 2 + ··· + n = + +1 + + 2 + ··· + n
2 h n i2 h n i 2
= n− +1
2 2
n n
≥ ·
2 2
n2
=
4
1
Logo, f (n) é Ω(n2 ) em que C = 4
e n > k = 1. Assim, f (n) tem ordem n2 , ou equivalentemente,
f (n) é Θ(n2 ).
n
Observação 18. A notação 2
usada no Exemplo 17 é usada para indicar a parte inteira da
divisão de n por 2. A exemplo, temos:
4 7
= 2, = 3.
2 2
5
Exemplo 19. Mostre que 3x2 + 8xlog(x) é Θ(x2 ).
Solução: Para x > 1(k = 1), temos que
0 ≤ 8xlog(x) ≤ 8x · x = 8x2
3x2 ≤ 8xlog(x) + 3x2 ≤ 8x2 + 3x2 = 11x2
Assim, 3x2 + 8xlog(x) é O(x2 ). Por outro lado, para x > 1, temos que x2 ≤ 3x2 + 8xlog(x) e
portanto, x2 é O(3x2 + xlog(x)). Consequentemente, 3x2 + 8xlog(x) é Θ(x2 ).
1.3 Exercı́cios
Exercı́cio 1. Determine em cada caso se a função dada é O(x).
a) f (x) = 10 b) f (x) = 3x + 7 c) f (x) = x2 + x + 1 d) f (x) = 5log(x)
Exercı́cio 3. Exiba o menor inteiro n tal que f (x) seja O(xn ) para cada função dada:
a) f (x) = 2x3 + x2 log(x)
b) f (x) = 3x3 + (log(x))4
x4 +x2 +1
c) f (x) = x3 +1
Exercı́cio 5. Arrume as funções a seguir em uma lista de modo que cada uma seja O da
próxima:
√ n n n2
n, 1000log(n), nlog(n), 2n!, 2 , 3 ,
1000
Exercı́cio 6. Dê a melhor estimativa para O para cada uma das funções:
a) (n2 + 8)(n + 1)
b) (nlog(n) + n2 )(n3 + 1)
c) (n! + 2n )(n3 + log(n2 + 1))
d) (nlog(n) + 1)2 + (log(n) + 1)(n2 + 1)