You are on page 1of 10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

Complexidade de Algoritmos
A complexidade de um algoritmo consiste na quantidade de trabalho necessrio para a sua execuo, expressa em funo das operaes fundamentais, as quais variam de acordo com o algoritmo e em funo do volume de dados. Um algoritmo tem duas medidas de complexidade: A complexidade temporal, que aproximadamente o nmero de instrues (tempo) que ele executa. A complexidade espacial, que a quantidade de memria que ele utiliza durante sua execuo. Ambas as complexidades so funes que tem como parmetro o tamanho da entrada a ser tratada. A complexidade, tanto espacial quanto temporal, de um algoritmo estimada em funo do tamanho da entrada. Logo importante estabelecer de que forma o tamanho da entrada influi no comportamento do algoritmo. Assim, se o algoritmo no recursivo, no contm iteraes e tambm no utiliza algoritmos que tem essas caractersticas, ento o nmero de passo independente do tamanho da entrada e digamos que a complexidade (temporal) constante.

Por exemplo, a rotina busca realiza sempre um teste na linha 5, e o nmero de atribuies sempre um ou zero. Nesse caso, o tempo de execuo independente do tamanho dos dados de entrada, e como o tempo de execuo vai variar dentro de uma faixa constante, considerada constante a complexidade temporal. 1/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

Por exemplo, suponha que um algoritmo consiste em uma iterao sobre os elementos de um vetor, e que a cada passo da iterao seja executado um nmero fixo k de instrues. Ento a complexidade do algoritmo ser em funo de n, o tamanho do vetor.

2/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro


A avaliao do tempo de execuo pode ser realizada atravs de uma anlise da rotina maior. Atribuio de inicializao da linha 6 executado em um tempo constante k1. O lao da linha 7 at a linha 11 executado n-1 vezes e realiza os seguintes passos: 1. Atribuio da varivel i na linha 7 para 1 (ou i+1) em um tempo constante k2. 2. Teste da condio de parada na linha 7 em um tempo constante k3. 3. Teste na linha 8 em um tempo constante k4. 4. Se o teste da linha 8 for verdadeiro, realiza a atribuio da linha 9 em um tempo constante k5. Conseqentemente, o tempo total de execuo t : t <= k1 + (n-1) * (k2 + k3 + k4 + k5) t <= n * (k2 + k3 + k4 + k5) + (k1 k2 k3 k4 k5) t <= n * k, onde k uma constante. Neste caso a complexidade temporal kn, uma constante multiplicada pelo tamanho do vetor, e digamos que a complexidade temporal linear. Em relao ao espao ocupado pela rotina, alm dos parmetros, so usados somente as variveis locais. Logo a complexidade espacial tambm linear. Para avaliar a complexidade de uma funo escrita de forma recursiva, preciso analisar quantas vezes a funo deve ser chamada para chegar ao resultado esperado, e quantas operaes so executadas a cada chamada.

3/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

Para cada chamada recursiva de soma diminui em um o parmetro n, com exceo do parmetro zero, no qual o algoritmo termina. Se n o valor inicial, ento o nmero total de chamadas ser de n+1. A cada chamada sero realizadas as seguintes operaes: Teste na linha 5 em um tempo constante k1. Se o teste for verdadeiro, atribuio na linha 7 em um tempo constante k2. Se o teste for falso, atribuio na linha 9 em um tempo constante k3 (desconsiderando o tempo das chamadas recursivas). Logo, a complexidade temporal t deste algoritmo : t <= (n+1) * k1 + k2 + n*k3 t <= n * (k1 + k3) + k1 + k2 t <= n * k, onde k uma constante. O algoritmo tem uma chamada recursiva que diminui de 1 em cada chamada, ento haver n chamadas. Logo o algoritmo tem complexidade temporal linear. Geralmente, quando se avalia a complexidade de um algoritmo, a anlise feita de forma menos precisa. Primeiro porque muito trabalhoso contabilizar cada instruo. Segundo que o custo de executar cada instruo varia dependendo de vrios fatores. Assim, considera-se que um bloco de execues que executam uma nica vez considerado como um custo unitrio. O "custo de executar um lao" considerado como sendo o "custo de executar o bloco" dentro do lao multiplicado pelo nmero de vezes que o bloco executado. Assim, se temos "c" blocos de iteraes aninhadas, e que cada bloco efetua um nmero de iteraes dependendo de "n", a complexidade temporal aproximadamente de "n" elevado a "c" (nc). 4/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro


As funes mais comuns para a classificao de complexidade de algoritmos so: constante um nmero constante de operaes logartimica log n linear n quadrtica n2 cbica n3 polinomial nk, onde k uma constante exponencial en

Podemos caracterizar a complexidade de um algoritmo em: Pior Caso (Grande O O): Procura-se definir um limite superior da complexidade. A notao mais comumente usada para medir complexidade de algoritmos o O, que d um limite superior da complexidade. Caso Mdio (Grande Theta - ): Pretende-se obter uma caracterizao da complexidade para situaes tpicas. Freqentemente a caracterizao do caso mdio problemtica e necessita de uma anlise estatstica. Melhor Caso (Grande mega - ): Pouco usada, pois representa apenas casos especficos e no representativos.

Exemplos: Soma de matrizes: complexidade = O(n2). Produto de matrizes: complexidade = O(n3). f(n) = n2 - 1 = O(n2) f(n) = 123 = O(1) f(n) = 3n + 5log n + 2 = O(n) f(n) = n3 + 1 = O(n3) f(n) = 7 + 5log n + 3log n = O(log n) f(n) = 8 * 3n + 6n7 = O(3 n)

5/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

Algoritmos timos
Se a complexidade de um algoritmo a menor possvel, o algoritmo dito timo.

Otimizao

6/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

7/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

8/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

9/10

Centro de Cincias Exatas e Sociais Aplicadas

Curso de Cincia da Computao Estrutura de Dados II Professor Andre Castro

Exerccio
Pesquisar sobre o Grande Theta e sobre o Grande mega (definio, exemplos, aplicaes, ...).

10/10

You might also like