MO417
Ata de Aula

Data: 28/02/2003
Redatora: Camila Ribeiro Rocha

Capítulo 3: Crescimento de Funções

Tópicos:

    1. Notação Θ
    2. Notação O
    3. Notação Ω
    4. Notação assintótica em igualdades
    5. Notação o
    6. Notação ω
    7. Comparação de funções
    8. Novidades da Seção 3.2: Notações padrão e funções comuns


Notação Θ

Uma função f(n) é Θ(g(n)) se existem constantes positivas c1 e c2 tal que, multiplicadas por g(n), c1g(n) e c2g(n) limitem f(n) acima e abaixo, para um valor a partir de um determinado no.

Segundo o prof. Meidanis, a expressão f(n) = Θ(g(n)) significa que as funções f(n) e g(n) possuem a mesma ordem de crescimento, isto é, crescem de forma equiparável. As funções n2 e 5n2, por exemplo, crescem em ritmo quadrático.


Notação O

Quando uma função f(n) é O(g(n)), a função g(n) impõe a f(n) um limite assintótico superior. Ou seja, multiplicada por uma constante c, a função g(n) limita superiormente a função f(n), a partir de um determinado  no.

A expressão f(n) = O(g(n)) significa que f(n) não cresce mais que g(n), podendo crescer de forma igual ou inferior.

Quando questionado sobre a relação da notação O com o pior caso de um algoritmo, o prof. Meidanis respondeu que essa é a notação mais utilizada na análise de complexidade de algoritmos em geral, normalmente para pior caso (entretanto, há casos como o QuickSort, por exemplo, que a notação O também é utilizada para o caso médio). As outras são raramente utilizadas: a notação Ω é usada algumas vezes para definição de limites inferiores. Porém, é importante lembrar que as definições de notações são independentes da análise de algoritmos, podendo ser utilizados para outros fins.


Notação Ω

A notação Ω é similar à notação O: uma função f(n) é Ω(g(n)) quando a função g(n) impõe a f(n) um limite assintótico inferior, que significa que, sendo a função g(n) multiplicada por uma constante c, a função f(n) nunca será inferior a c g(n), a partir de um determinado no.

A expressão f(n) = Ω(g(n)) significa que a ordem de crescimento de f(n) é maior ou igual à ordem de g(n).


Notação assintótica em igualdades

Ao estar presente em uma equação, um elemento de notação assintótica não deve ser interpretado como um componente normal da equação, e sim como um elemento de complexidade. 

Porém, há diferentes significados para a presença da notação assintótica na equação. Se estiver do lado direito da igualdade e fizer parte de uma expressão, ela é interpretada como alguma função anônima de determinada ordem de grandeza, eliminando detalhes não essenciais. Por exemplo, a recorrência T(n) = 2T(n/2) + Θ(n) pode ser interpretada como T(n) = 2T(n/2) + f(n), sendo a função f(n) uma função particular de ordem de crescimento n. A notação Θ aparece para eliminar detalhes da equação.

Outro exemplo de utilização no lado direito: ni=1  O(i)
Para essa equação, pode-se chegar a várias interpretações diferentes. Porém, a interpretação correta é que trata-se de um somatório de tamanho n de uma única função f(n), de ordem de crescimento n.

Quando a notação encontra-se sozinha do lado esquerdo da igualdade, a notação exprime a ordem de crescimento de toda a equação, como representado nas seções sobre as notações Θ, O e Ω.

Na análise de algoritmos, essa substituição das funções pela notação é utilizada para eliminar detalhes da equação que não influenciam no resultado final da análise (como as constantes), sendo o resultado final a ordem de crescimento da equação.


Notação o

Assim como a notação O, a notação o também denota um limite assintótico superior. Porém, quando f(n) é o(g(n)), para qualquer constante c > 0 que multiplique g(n) existe um n0 tal que para todo n ≥ no, o valor f(n) é menor que c g(n). Ou seja, se f(n) = O(g(n)), a ordem de crescimento de f(n) nunca será maior que a de g(n), podendo ser igual. Entretanto, se f(n) = o(g(n)), a ordem de crescimento de f(n) nunca será maior nem igual à de g(n).

Observando os limites das notações O e o, é possivel perceber a diferença das duas notações. Na notação o, à medida que n se aproxima do ∞, f(n) se torna insignificante em relação à g(n):

lim    f(n) = 0, isto é, g(n) cresce muito mais que f(n).
n->
∞ g(n)

Já com notação O, a medida que se aproxima do ∞, não necessariamente f(n) se tornará insignificante em relação a g(n):

lim    f(n) = 0 ou lim    f(n) = c, isto é, g(n) cresce mais ou igualmente que f(n).
n->∞ g(n)              n->∞ g(n)

A notação o oferece uma análise menos exata que a notação O, por isso geralmente não é utilizada em análise de algoritmos. Um exemplo dessa deficiência é a comparação abaixo:

Para análise de algoritmos, as notações mais utilizadas são O (para um limite superior) e Θ (para um limite exato). As notações o e ω são raramente utilizadas.


Notação ω

A notação ω denota um limite assintótico inferior, assim como Ω. A diferença é que, se f(n) = ω(g(n)), para qualquer constante c > 0 que multiplique g(n) existe um n0 > 0 tal que para todo n ≥ no, f(n) nunca será menor nem igual a g(n). Assim, diferentemente de Ω, o crescimento da função f(n) nunca se igualará ao de g(n).


Comparação de funções

Foram abordados aspectos sobre as regras de transitividade e a analogia com a comparação de números reais. Para a demonstração da regra de transitividade, foi utilizado o gráfico:

g(n) = O(f(n))

f(n) = O(h(n))

então:

g(n) = O(h(n))


A analogia com números reais tornou o entendimento das notações mais intuitivo, com a visualização das regras:


Novidades da Seção 3.2: Notações padrão e funções comuns

Esta seção do livro revê funções e notações matemáticas padrão e explora os relacionamentos entre elas. Como a maioria dos assuntos já foi estudado anteriormente, apenas aqueles que eram novidades foram abordados pelo prof. Meidanis, e serão relatados.