Análise de Algoritmos Análise assintótica Profa. Sheila Morais de Almeida DAINF-UTFPR-PG março - 2016
f (n) = 5n 3 + 3n 2 + 20. g(n) = 2n 3 + n 2. Estamos interessados em comparar essas funções quando o tamanho da entrada for muito grande.
É comum que T (n) tenha constantes sendo somadas ou multiplicadas pelos seus termos. Exemplos: T (n) = f (n) = 5n 3 + 3n 2 + 20. T (n) = g(n) = 2n 3 + n 2. Nesse link, observe como cada um dos termos de um polinômio influencia no crescimento da função. Note como uma multiplicação pelo termo de maior grau tem maior poder de alterar o comportamento da função.
Primeira regra: Como os termos de menor valor (de menor grau, no caso dos polinômios) tem pouca influência no comportamento da função. Os mesmos são desconsiderados na análise assintótica.
Imagine que para uma determinada constante (a) foram determinados os números de instruções que os algoritmos executam: ax 2, ax 3, ax 4 e ax 10, todos em função do tamanho da entrada (x). Observando o mesmo link, veja como a alteração na constante a, que multiplica o termo de maior grau, não modifica a ordem de crescimento das funções. Ou seja: a função que cresce mais rápido, continua crescendo mais rápido e a que cresce mais devagar, continua crescendo mais devagar. Segunda regra: O polinômio de maior grau sempre cresce mais rápido.
Agora, nesse link, considere a comparação das funções polinomial (ax b ) e exponencial (ab x ), onde x é o tamanho da entrada. Veja como a constante que multiplica os termos (a) influencia menos o comportamento das funções que a constante b, usada como expoente em uma função e como base na outra.
Veja como as constantes tem pouca influência na velocidade de crescimento das funções.
Terceira regra: Para fazer a análise pode-se desconsiderar até mesmo as constantes que multiplicam os termos de maior ordem.
Análise de Algoritmos Vamos comparar algumas funções comuns que representam número de instruções:
Análise de Algoritmos Vamos comparar algumas funções comuns que representam número de instruções:
Notação O Uma função f (x) pertence à O(g(x)), se existem duas constantes positivas c e n tais que f (x) c.g(x), para todo x n. Denota-se f (x) O(g(x)). Um abuso de notação (muito usado): f (x) = O(g(x)),
Notação O No geogebra, veja um exemplo de uma função f (x) O(g(x)).
Teorema 3.1 (U. Mamber) para todas as constantes c > 0 e a > 1, e para todas as funções f (n) monótonas crescentes, (f (n)) c O(a f (n) ). Veja no Geogebra um exemplo! Quarta regra: uma função exponencial cresce mais rápido que uma polinomial.
Teorema 3.1 (U. Mamber) para todas as constantes c > 0 e a > 1, e para todas as funções f (n) monótonas crescentes, (f (n)) c O(a f (n) ). Aplicando o Teorema 3.1 em f (n) = n: n c O(a n ). Aplicando o Teorema 3.1 em f (n) = log a n: (log a n) c O(a log a n ) = O(n).
Lema 3.2 (U. Mamber) Se f (n) O(p(n)) e g(n) O(q(n)), então f (n) + g(n) O(p(n) + q(n)) e f (n) g(n) = O(p(n) q(n)).
prova: Por definição da notação O, existem constantes c 1, n 1, c 2 e n 2, tais que f (n) c 1 p(n), para todo n n 1 e g(n) c 2 q(n), para todo n n 2. Então, f (n) + g(n) c 1 p(n) + c 2 q(n). Seja c = max c 1, c 2. Então, f (n) + g(n) c 1 p(n) + c 2 q(n) cp(n) + cq(n) = c(p n ) + q(n)). Portanto, f (n) + g(n) c(p(n) + q(n)) e, por definição, f (n) + g(n) O(p(n) + q(n)).
Além disso, f (n) g(n) c 1 p(n) c 2 q(n) = c 1 c 2 p(n) q(n). Considere a constante c = c 1 c 2. Então, f (n) g(n) c 1 c 2 p(n) q(n) = c p(n) q(n). Então, f (n) g(n) c p(n) q(n) e, por definição, f (n) g(n) O(p(n) q(n)).
Notação Ω Uma função f (x) pertence à Ω(g(x)), se existem duas constantes positivas c e n tais que f (x) c.g(x), para todo x n. Denota-se f (x) Ω(g(x)). Um abuso de notação (muito usado): f (x) = Ω(g(x)),
Notação Ω Uma função f (x) pertence à Ω(g(x)), se existem duas constantes positivas c e n tais que f (x) c.g(x), para todo x n.
Notação Ω O exemplo apresentado no Geogebra é um pouco menos intuitivo.