Data: 28/02/2003
Redatora: Camila Ribeiro Rocha
Tópicos:
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.
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.