A eficiência de um algoritmo depende da quantidade de tempo, armazenamento e outros recursos necessários para executar o algoritmo. A eficiência é medida com a ajuda de notações assimptóticas.
Um algoritmo pode não ter o mesmo desempenho para diferentes tipos de entradas. Com o aumento do tamanho do input, o desempenho será alterado.
O estudo da alteração do desempenho do algoritmo com a alteração da ordem do tamanho do input é definido como análise assimptótica.
Notações assintóticas
Notações assintóticas são as notações matemáticas utilizadas para descrever o tempo de execução de um algoritmo quando o input tende para um determinado valor ou um valor limite.
Por exemplo: Na ordenação de bolhas, quando a matriz de entrada já está ordenada, o tempo gasto pelo algoritmo é linear, ou seja, o melhor caso.
Mas, quando a matriz de entrada está em estado inverso, o algoritmo leva o tempo máximo (quadrático) para ordenar os elementos, ou seja, o pior caso.
Quando a matriz de entrada não está ordenada nem em ordem inversa, então leva o tempo médio. Estas durações são indicadas usando notações assimptóticas.
Existem principalmente três notações assimptóticas:
- Notação de Big-O
- Notação de Omega
- Notação de Theta
Notação de Big-O (Notação O)
Notação de Big-O representa o limite superior do tempo de execução de um algoritmo. Assim, dá o pior caso de complexidade de um algoritmo.
O(g(n)) = { f(n): there exist positive constants c and n0 such that 0 ≤ f(n) ≤ cg(n) for all n ≥ n0 }
A expressão acima pode ser descrita como uma função f(n)
pertence ao conjunto O(g(n))
se existir uma constante positiva c
tal que se situe entre 0
e cg(n)
, para suficientemente grande n
.
Para qualquer valor de n
, o tempo de funcionamento de um algoritmo não ultrapassa o tempo fornecido por O(g(n))
.
Desde que dá o pior caso de tempo de execução de um algoritmo, é amplamente utilizado para analisar um algoritmo, pois estamos sempre interessados no pior caso.
Omega Notation (Ω-notation)
Omega Notation representa o limite inferior do tempo de execução de um algoritmo. Assim, fornece a complexidade do melhor caso de um algoritmo.
Ω(g(n)) = { f(n): there exist positive constants c and n0 such that 0 ≤ cg(n) ≤ f(n) for all n ≥ n0 }
A expressão acima pode ser descrita como uma função f(n)
pertence ao conjunto Ω(g(n))
se existir uma constante positiva c
de tal forma que fique acima cg(n)
, para suficientemente grande n
.
Para qualquer valor de n
, o tempo mínimo requerido pelo algoritmo é dado por Omega Ω(g(n))
.
Theta Notation (Θ-notation)
Theta notation encerra a função de cima e de baixo. Uma vez que representa os limites superior e inferior do tempo de execução de um algoritmo, é utilizada para analisar a complexidade média do caso de um algoritmo.
Para uma função g(n)
Θ(g(n))
é dada pela relação:
Θ(g(n)) = { f(n): there exist positive constants c1, c2 and n0 such that 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) for all n ≥ n0 }
A expressão acima pode ser descrita como uma função f(n)
pertence ao conjunto Θ(g(n))
se existir constantes positivas c1
e c2
de modo a poder ser colada entre c1g(n)
e c2g(n)
, para n.
se uma função f(n)
se encontra em qualquer lugar entre c1g(n)
e c2g(n)
para todos n ≥ n0
, então f(n)
diz-se que é assimptóticamente apertado.