Friday, October 05, 2012

Desenvolvimento de Algoritmos

(1) Dado um problema, como encontramos um algoritmo eficiente para sua solução?
(2) Encontrado um algoritmo, como comparar este algoritmo com outros algoritmos que solucionam o mesmo problema?
(3) Como deveríamos julgar a qualidade de um algoritmo?
(4) Qual é o algoritmo de menor custo possível para resolver um problema particular?

Questões desta natureza são de interesse para programadores e cientistas da computação. Algoritmos podem ser avaliados por uma variedade de critérios. Na maioria das vezes estamos interessados na taxa de crescimento do tempo ou de espaço necessário para a solução de grandes problemas.

Uma maneira de comparar algortimos é por meio da notação O. Abaixo temos uma tabela com os comportamentos mais comuns relacionados ao tempo para execução de um algoritimo.

Tabela 1- Comportamentos comuns em consumo de tempo
Função Significado ( tamanho da entrada = n)
1 tempo constante – o número de operações é o mesmo para qualquer tamanho da entrada
n tempo linear – se n dobra, o número de operações também dobra
n2 tempo quadrático – se n dobra, o número de operações quadruplica
log n tempo logarítmico – se n dobra, o número de operações aumenta de uma constante
nlog n tempo n log n - se n dobra, o número de operações ultrapassa o dobro do tempo da entrada de tamanho n
2n tempo exponencial - se n dobra, o número de operações é elevado ao quadrado

Algumas expressões de O são tão freqüentes que receberam denominações próprias:

Tabela 2- Algumas expressões de O
Expressão Nome
O(1) Constante
O(log n) Logarítmica
O(log2n) Log quadrado
O(n) Linear
O(nlog n) n log n
O(n2) Quadrática
O(n3) Cúbica
O(2n) Exponencial

A Figura 1 mostra esse comportamento de maneira gráfica.

Figura 1 - Represetação gráfica da Tabela 1

No comments: