You are on page 1of 5

Estudando complexidade de algoritmos

Danilo de Oliveira Domingos www.dandomin.com.br


Notas de aula de Estrutura de Dados e Anlise de Algoritmos (Professor Andr Balan, mestrado UFABC)

Durante os estudos de complexidade de algoritmos muito comum se deparar com expresses do tipo o grau assinttico linear, o grau assinttico quadrtico, etc. Ento porque no dar uma revisada nas principais curvas envolvidas nessa anlise? A tabela abaixo mostra como determinadas funes se comportam no intervalo de domnio (eixo x) entre 0 e 10. Perceba como o intervalo da imagem (eixo y) varia muito.
Tabela 1. Principais funes utilizadas na comparao de complexidade de algoritmos.

Nome

Caractersticas Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 4.

Equao

Grfico

Logartmico

f (n) = log 2 n

Linear

Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 10.

f ( n) = n

Logartmico vezes Linear

Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 40.

f (n) = n log 2 n

Quadrtico

Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 200.

f ( n) = 2n 2

Cbico

Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 1000.

f ( n) = n 3

Exponencial

Dada a equao, quando n varia de 0 at 10, f(n) varia de 0 at 100000.

f ( n) = 5 n

Antes de continuar vamos verificar todas juntas num s grfico:

Figura 1. Comparao das curvas no mesmo grfico. Eixo Y limitado em 50.

Comparando as curvas do grfico podemos dizer que se o seu algoritmo tem um comportamento quadrtico, no que diz respeito a tempo de processamento em funo do nmero de entradas, ento ele gasta muito mais tempo que um algoritmo linear. claro que existe um jeito melhor de dizer o comportamento do algoritmo, que ser visto adiante (, , O).

No que diz respeito ao grau assinttico de uma funo, apenas o grau da tendncia j o suficiente para comparar algoritmos ento as constantes envolvidas nas funes tendem a ser tratadas como constantes irrelevantes, por exemplo: Grau assinttico Linear: f (n) = 5n + 9 ou f (n) = n so tratados como f (n) = an + b Grau assinttico Logartmico: f (n) = 5 log 2 3n tratado como f (n) = log n Grau assinttico Quadrtico: f (n) = 3n 2 + 2n + 8 tratado como f (n) = n 2 Grau assinttico Cbico: f (n) = n 3 + 2n 2 + 5 tratado como f (n) = n 3 Grau assinttico Exponencial: f (n) = 5 n ou f (n) = 2 n tratado como f (n) = a n

Para os exemplos da Figura 1 (e Tabela 1) podemos dizer que: Para uma entrada de 10 elementos, o algoritmo mais eficiente seria o que faz suas rotinas seguindo uma tendncia logartmica. Para a mesma entrada de 10 elementos, o algoritmo menos eficiente seria o que faz suas rotinas seguindo uma tendncia exponencial. Mas, o que um algoritmo bom ou ruim? Um que mais rpido, porem gasta muito mais memria, ou vice-versa? Isso depende bastante do objetivo e disponibilidade de recursos.

Limites assintticos
Um algoritmo, dado um conjunto de entrada de dados, pode process-los de varias formas. No caso de um algoritmo de ordenao, de uma forma grosseira, se os dados j estiverem ordenados ento nada precisa ser feito, caso contrrio a ordenao necessria. Quando a anlise de complexidade feita, os dois casos extremos so levados em considerao: Limite assinttico superior O: ser uma funo que traduz o grau assinttico do tempo mximo gasto em funo do tamanho da entrada de dados. Exemplo: O(n) ou O(n 2 ) , querem dizer respectivamente, limite assinttico superior linear e limite assinttico superior quadrtico. Geralmente associado ao pior caso de entrada de dados. Limite assinttico inferior : ser uma funo que traduz o grau assinttico do tempo mnimo gasto em funo do tamanho da entrada de dados. Exemplo: (n 2 ) ou (n log n) , querem dizer respectivamente, limite assinttico inferior quadrtico e limite assinttico inferior nlogn. Geralmente associado ao melhor caso de entrada de dados. Limite assinttico restrito : em alguns casos, os limites assintticos superior e inferior tero o mesmo grau, neste caso, temos O(n) = (n) = (n) .

Por exemplo, suponha um algoritmo que apresente O(n 2 ) e (n) , isso significa que o tempo mximo que ele demora a realizar sua tarefa tende a uma curva quadrtica; da

mesma forma que o tempo mnimo que ele demora a realizar sua tarefa tende a uma curva linear. A Figura 2 apresenta esta visualizao graficamente. Voc pode estar se perguntando, mas logo no comeinho do grfico existe um ponto onde os limites assintticos trocam de lugares. Isto est correto, entre 4 e 2 ocorre uma inverso e para entradas de dados inferiores aquele valor o algoritmo ter O(n) e (n 2 ) . Mas o objetivo da anlise de complexidade verificar o tempo de processamento do algoritmo em funo de grandes quantidades de dados, desta forma, o comeo do grfico no ter muita utilidade para 180000 dados de entrada, por exemplo.

Figura 2. Algoritmo com limites assintticos superior e inferior quadrtico e linear, respectivamente. Estes dois limites correspondem ao melhor caso e ao pior caso, mas a rea em azul compreende todos os outros possveis casos.

Figura 3. Grfico para entrada de dados variando de 0 at 180000. Para n = 180000, tempo gasto no pior caso aproximadamente 100.000 vezes maior que o tempo gasto no melhor caso. Para uma melhor visualizao o grfico log-linear.

Para provar os limites assintticos superior, inferior ou restrito, a seguinte demonstrao matemtica deve ser feita: Limite assinttico superior O(g(x)). Dizer que uma funo f(x) tem limite assinttico superior O(g(x)) significa dizer: Existe uma constante positiva c1 e n0 tais que 0 f ( x) c1 g ( x) para n n0 . Ou seja, a funo f(x) sempre menor do que a funo g(x) multiplicada por uma constante, para n n0 No exemplo da Figura 2, n0 corresponde quele ponto entre 2 e 4. Limite assinttico restrito (g(x)). Dizer que uma funo f(x) tem limite assinttico restrito (g(x)) significa dizer: Existem constantes positivas c1 , c2 e n0 tais que 0 c1 g ( x) f ( x) c2 g ( x) para n n0 . Ou seja, a funo f(x) est sempre entre (restrita) duas funes g(x) iguais a menos de uma constante para n n0 . Limite assinttico inferior (g(x)). Dizer que uma funo f(x) tem limite assinttico inferior (g(x)) significa dizer: Existe uma constante positiva c1 e n0 tais que 0 c1 g ( x) f ( x) para n n0 . Ou seja, a funo f(x) sempre maior que g(x) multiplicada por uma constante, para n n0 .

Na maioria dos casos, as condies no so respeitadas para todo o domnio de x, mas basta provar que a partir de certo n0 as condies so vlidas.

Exemplos: (dps eu fao!)

You might also like