Sei sulla pagina 1di 10

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

Matemtica Aplicada
Professores autores Umberto Souza da Costa Natlia dos Santos Lucena Neta

Aula 10 - Anlise de Algoritmos


Apresentao
Sabemos que um algoritmo um conjunto de instrues que definem passos para a resoluo de um problema. O estudo de algoritmos envolve dois aspectos bsicos: a correo e a eficincia. A correo de um algoritmo refere-se exatido da soluo que ele oferece para um determinado problema, ou seja, analisa se o algoritmo resolve o problema sem erros. Por outro lado, a eficincia de um algoritmo considera se a soluo que ele prope utiliza os recursos computacionais, especialmente memria e tempo de processamento, de maneira adequada e econmica. Uma das formas mais simples de avaliar a eficincia de um algoritmo atravs da anlise emprica, isto , por meio da experimentao e observao da execuo do programa correspondente ao algoritmo. Esse tipo de avaliao enfrenta grandes desafios, pois se baseia no desenvolvimento de uma implementao correta e completa do algoritmo e depende no apenas da natureza dos dados de entrada utilizados durante a experimentao, mas tambm de outros fatores que tm influncia no experimento. Por exemplo, ao comparar algoritmos empiricamente necessrio levar em conta o ambiente de execuo utilizado, considerando as mquinas, os compiladores e os sistemas utilizados durante os experimentos. Portanto, um dos possveis problemas da anlise emprica que uma implementao pode ter sido realizada com mais cuidado (otimizada) do que a outra, levando a comparaes equivocadas. A anlise matemtica de algoritmos uma alternativa anlise emprica, sendo especialmente til quando a anlise experimental consome uma quantidade significativa de tempo ou quando necessitamos de alguma indicao de eficincia antes de qualquer investimento de desenvolvimento. Nesta aula, voc vai aprender noes sobre anlise matemtica da eficincia de algoritmos.

Objetivos
Ao final desta aula, voc dever: entender o que a anlise matemtica de algoritmos; conhecer as funes de complexidade mais utilizadas na anlise de algoritmos; determinar a complexidade temporal de algoritmos simples; comparar algoritmos a partir de suas funes de complexidade.

Anlise matemtica de algoritmos


A qualidade de um programa de computador depende da eficincia de seu algoritmo para resolver o problema ao qual ele prope soluo. Do ponto de vista do usurio de um programa, a qualidade pode ser medida em termos de diversos fatores, como interface, robustez, compatibilidade, desempenho, consumo de recursos, entre outros. Do ponto de vista do programador, a qualidade de um programa pode estar relacionada a critrios como portabilidade, clareza e reuso. Por outro lado, a anlise matemtica de algoritmos baseia-se em critrios mais gerais para medir a qualidade de um algoritmo. O custo exigido pela maioria dos algoritmos geralmente pode ser definido matematicamente em funo de seu principal dado de entrada, ao qual chamaremos de parmetro primrio do algoritmo. Em nossa aula, faremos consideraes sobre o tamanho do parmetro primrio, onde esse tamanho corresponde ao nmero de elementos que compem o parmetro primrio. Por exemplo, se o parmetro primrio de um algoritmo for um vetor de inteiros, representaria o nmero de elementos desse vetor. Portanto, o tamanho do parmetro primrio afeta diretamente o custo de execuo do algoritmo, sendo diretamente proporcional a ele. O objetivo da anlise matemtica expressar a necessidade de recursos de um programa (tempo de execuo e/ou espao de memria) em termos desse parmetro primrio .

Quando comparada anlise emprica, que uma anlise baseada na experimentao e na observao da execuo do programa que implementa um algoritmo, a anlise matemtica de algoritmos faz uma avaliao mais informativa e mais barata, pois uma anlise independente da mquina, compilador ou sistema e no exige a criao e execuo de um programa correspondente.

Atividade 1
Usando suas prprias palavras, responda as seguintes questes: a. O que o parmetro primrio de um algoritmo? b. Quais so as vantagens da anlise matemtica sobre a anlise emprica?

1 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

Crescimento de funes
As expresses produzidas pela anlise matemtica da eficincia de um algoritmo geralmente so baseadas em funes matemticas bem conhecidas. Uma das vantagens de associar a eficincia de um algoritmo a essas funes que fica mais fcil entender como seu custo varia em relao ao tamanho do parmetro primrio do algoritmo. Outra vantagem que isso nos permite comparar os custos de diferentes algoritmos com facilidade. A seguir, voc poder ver as funes matemticas normalmente utilizadas na anlise matemtica do custo: : maior parte das instrues executada apenas uma ou um nmero constante de vezes, independente do parmetro primrio de execuo constante); (tempo

: ocorre em algoritmos que resolvem um problema maior transformando-o em uma srie de subproblemas, reduzindo o tamanho do problema por certa constante fracionria a cada passo tempo de execuo logartmico). Sempre que algoritmo aumenta por uma constante, mas no dobra at que o tamanho da entrada seja linear). Corresponde ao menor custo possvel para um algoritmo que deve processar solues (tempo de execuo lineartmico ou que o dobro; log ).Quando ; sadas; dobra, a complexidade do

: acontece quando uma pequena quantidade de processamento deve ser feito para cada elemento da entrada (tempo de execuo entradas ou gerar : ocorre em algoritmos que quebram o problema principal em subproblemas menores, resolvendo-os e depois combinando as dobra, o tempo de execuo do algoritmo aumenta um pouco mais do

: complexidade de algoritmos que processam todos os pares de itens de dados (tempo de execuo quadrtico). Esse tipo de complexidade aceitvel apenas para problemas relativamente pequenos, pois quando dobra, o tempo de execuo aumenta 8 vezes. : corresponde a algoritmos que utilizam fora bruta na soluo de problemas (tempo de execuo exponencial). Algoritmos com esse desempenho so impraticveis para problemas prticos, pois sempre que quadrado. dobra o tempo de execuo do algoritmo elevado ao dobra, o tempo de execuo aumenta 4 vezes; : complexidade de algoritmos que processam todas as combinaes de itens de dados trs a trs (tempo de execuo cbico). Quando

A Figura 1 mostra um grfico onde voc pode analisar como as curvas de crescimento correspondentes a essas funes se comportam medida que aumentamos o tamanho do parmetro primrio do algoritmo. Neste grfico, a curva da funo de custo rotulada como , antecipando a notao que voc conhecer daqui a pouco, ainda nesta aula. Para a maioria dessas funes, quanto maior for o tamanho do parmetro primrio , maior ser o custo computacional do algoritmo. Dessa forma, voc poder ver, por exemplo, que se um algoritmo tem sua expresso de custo correspondente a uma funo constante, ento, ele consome sempre o mesmo tempo, independente do valor de tem uma expresso de custo exponencial, um pequeno aumento no tamanho de . Por outro lado, se o algoritmo tem grande impacto no tempo consumido pelo algoritmo.

Figura 1 Funes de custo tradicionais.

O custo de um algoritmo normalmente descrito por uma expresso formada por alguma dessas funes multiplicada por uma constante. Esta expresso corresponde operao dominante, obtida aps desconsiderar outros termos de menor importncia, que correspondem a operaes de menor impacto no custo do algoritmo. Por exemplo, a expresso poderia ser utilizada para denotar o custo de um algoritmo,

onde seria o parmetro primrio e seriam as constantes multiplicativas que representam tempos de execuo de operaes elementares. Dada a expresso de custo de um algoritmo, o termo de maior importncia para a determinao do custo corresponde operao dominante, geralmente relacionada ao nmero de comandos da instruo de repetio mais interna do algoritmo. Normalmente, representamos o custo do algoritmo de forma simplificada, considerando apenas o termo de maior importncia na expresso de custo global. Assim, a expresso de custo anterior poderia ser simplificada para aumenta. , que o termo que mais influencia no custo media que o tamanho do parmetro primrio

2 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

As constantes de uma expresso de custo representam os tempos de execuo de operaes elementares (atribuio, leitura e escrita simples etc.). Esses tempos normalmente no podem ser determinados apenas pela observao do algoritmo, pois vo depender do ambiente de execuo (velocidade do processador, velocidade de acesso memria do computador etc.).

Simplificaes
As simplificaes das expresses matemticas so necessrias para facilitar o processo de anlise de custos e comparao entre algoritmos. A seguir, mostramos as principais simplificaes aplicadas na anlise matemtica do custo de um algoritmo: a. considere a execuo do algoritmo quando aplicado a quantidades de dados suficientemente grandes. Em outras palavras, assuma que o parmetro primrio tende a infinito; b. ignore constantes aditivas ou multiplicativas na frmula matemtica correspondente ao custo. Essas constantes no interferem no comportamento geral da funo matemtica associada; c. analise o algoritmo dividindo-o em etapas ou passos elementares, sendo que cada passo envolve um nmero fixo de operaes bsicas cujos tempos de execuo so assumidos constantes. Nesse contexto, o que chamamos de operaes bsicas so as operaes muito simples e que no podem ser subdivididas em outros passos, como uma atribuio ou um teste lgico; d. o nmero de passos do algoritmo dado pelo nmero de passos da operao bsica de maior frequncia, comumente chamada de operao dominante.

O custo de um algoritmo normalmente medido em termos de tempo de processamento (complexidade temporal) ou consumo de memria (complexidade espacial). A complexidade temporal uma medida de quanto tempo o algoritmo leva para executar, enquanto a complexidade espacial uma medida de quanto espao de memria o algoritmo precisa para executar at o fim. Na anlise matemtica, ambas as complexidades so determinadas com base no tamanho do parmetro primrio do algoritmo. Daqui em diante, consideraremos o custo do algoritmo sendo medido com base em seu tempo de execuo, portanto, nos concentraremos sobre a complexidade temporal. A seguir, voc ver alguns exemplos de algoritmos e suas complexidades temporais. No se esquea de observar que o custo temporal dado em termos das funes matemticas apresentadas anteriormente, e que aplicamos as regras de simplificao da expresso de custo naturalmente, por exemplo, ao escolher o termo mais importante da expresso de custo para representar a complexidade global do algoritmo.

Exemplo 1 Algoritmo 1: Complexidade Constante Como exemplo de algoritmo com complexidade constante, considere o algoritmo abaixo, utilizado para acessar um elemento em um vetor:

Nesse algoritmo e nos outros mostrados nesta aula, associamos custos s principais instrues, identificados sob a forma de comentrios. Nesse exemplo, o tempo de execuo depende dos valores de e , onde corresponde ao parmetro primrio do algoritmo. Se > ento, dever ser calculado levando em conta o tempo gasto em uma comparao (linha 8) mais o tempo gasto para escrever uma mensagem informando o erro (linha 9); se gasto em um acesso ao vetor ento, dever ser calculado levando em conta o tempo gasto em uma comparao (linha 8) mais o tempo desse algoritmo ser dado por

(linha 11). Dessa forma, o tempo de execuo

, onde representa o valor mximo entre . Note que o tempo de execuo limitado por um nmero fixo de operaes com custos constantes, independente do tamanho da entrada, isto , independente do tamanho do vetor 1). . Se trocarmos todas as constantes anteriores por uma nica constante , a funo de custo reduz a esta constante que represente o valor correspondente expresso . , a complexidade desse algoritmo dita constante (ou seja,

3 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

Exemplo 2 Algoritmo 2: Complexidade Linear Como exemplo de algoritmo com complexidade linear, considere o algoritmo a seguir, responsvel por achar o mximo elemento de um vetor. Neste algoritmo, o tamanho do vetor corresponde ao parmetro primrio.

Considerando

as

constantes

identificadas

nos

comentrios

acima,

tempo

execuo

ser

dado

por

, onde a funo definida anteriormente. Como o termo de maior importncia do custo determinando quando consideramos valores grandes para o parmetro primrio , podemos simplificar a expresso de custo desse algoritmo para onde . Eliminando-se as constantes aditivas (de

acordo com a regra apresentada anteriormente), temos , onde uma constante que depende das caractersticas do sistema onde o algoritmo ser executado. Portanto, a complexidade mxima deste algoritmo linear (ou seja, ).

Exemplo 3 Algoritmo 3: Complexidade Quadrtica Considere o algoritmo abaixo, utilizado para transpor uma matriz quadrada , sendo que esse corresponde a seu parmetro primrio. . Os principais dados do algoritmo so a matriz e seu tamanho

A partir de agora, apenas as instrues que tm maior influncia sobre o custo global do algoritmo tero seu custos individuais identificados. Essa deciso no afetar o clculo do custo global do algoritmo, uma vez que apenas o termo mais significativo considerado na expresso final do

4 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

custo. Nesse algoritmo, o para externo (linha 07) executado

vezes, enquanto a complexidade total do para interno (linha 11) dado por .

uma expresso . Assim, a complexidade global do algoritmo Desenvolvendo essas expresses, teremos:

Por outro lado, sabemos que a cada iterao do para interno a seguinte expresso verdadeira:

Logo, ).

e o algoritmo tem complexidade quadrtica (ou seja,

Atividade 2
Apesar de diferentes, os dois algoritmos seguintes realizam o mesmo clculo: a soma dos elementos da diagonal principal de uma matriz quadrada de ordem . Qual a complexidade de cada algoritmo?

a) Algoritmo 1

b) Algoritmo 2

5 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

Notaes de complexidade
Neste momento, aprofundaremos um pouco mais nossa discusso acerca da complexidade de algoritmos. At o momento, aprendemos a medir a complexidade de um algoritmo, observadas as devidas simplificaes. Agora, conheceremos a notao mais empregada para expressar e comparar complexidades algortmicas. Para tanto, conheceremos as complexidades de pior caso, melhor caso e caso mdio. Nossa discusso seguinte ser concentrada na notao de complexidade de pior caso.

Complexidade de pior caso, melhor caso e caso mdio


Em alguns casos, faz-se necessrio analisar o comportamento de um mesmo algoritmo considerando diferentes entradas de dados e seus impactos sobre o custo do algoritmo. Seja passos efetuados por um algoritmo e . Definimos: o conjunto de todas as entradas possveis de . Entenda por o nmero de

quando a entrada for

complexidade do pior caso: complexidade do melhor caso: complexidade do caso mdio:

, onde , onde

o maior nmero de passos efetuado por

, correspondente entrada

; ;

o menor nmero de passos efetuado por , onde

, correspondente entrada ;

a probabilidade de ocorrncia da entrada

Para entender melhor o significado desses casos, considere que o algoritmo tem por funo ordenar os elementos de um vetor com inteiros, realizando sucessivas operaes sobre esses elementos na medida em que o vetor ordenado. Sendo o custo desse algoritmo determinado pelo nmero de operaes realizadas, se essas operaes forem realizadas apenas para os elementos desordenados, o melhor caso desse algoritmo ser quando o vetor fornecido na entrada j estiver ordenado. O pior caso ser aquele em que o vetor fornecido na entrada tem seus elementos dispostos na ordem inversa desejada. A complexidade do pior caso considera o nmero de passos que o algoritmo efetua para a entrada mais desfavorvel, para a qual necessrio executar o maior nmero de instrues. Esse o caso onde os dados de entrada fazem com que o algoritmo consuma mais tempo do que para qualquer outra entrada. A complexidade de pior caso uma das anlises mais importantes porque fornece um teto para o nmero de passos que o algoritmo pode efetuar, independente da entrada considerada. Em outras palavras, se voc conhecer a complexidade de pior caso de um algoritmo, saber que seu custo nunca ir superar um determinado limite, tendo assim uma garantia acerca do custo mximo do algoritmo.

Limite superior
A notao mais comumente usada para medir e comparar algoritmos (big-Oh), til para estabelecer uma ordem relativa entre funes, permitindo comparar suas taxas de crescimento. Essa notao a geralmente utilizada para definir a complexidade de pior caso, expressando um limite superior do custo de um algoritmo. Essa notao compara o custo parmetro primrio do algoritmo, informando que o custo superior para o custo . de um algoritmo a um custo . Portanto, , onde corresponde ao

nunca superior ao custo

funciona como um limite

6 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

Formalmente, dizemos que a funo de custo , tais que quando onde e

ou, simplesmente,

, se existir uma constante

e um inteiro

so funes reais positivas de varivel inteira

. A Figura 2 mostra graficamente

o comportamento das funes e onde o eixo das abscissas corresponde ao tamanho do parmetro primrio e o eixo das ordenadas corresponde ao valor de custo dessas funes.

Figura 2 Limite superior de complexidade

Voc est se perguntando o que significam os outros smbolos envolvidos nesse grfico, no mesmo? O grfico nos diz que se o tamanho do parmetro primrio for maior que (esse o significado da expresso , o custo nunca ser maior que o custo (esse (o que .

o significado da expresso importa a taxa de crescimento de Portanto,

), onde a constante estritamente positiva , por isso usamos esse fator de ajuste). A partir de e dizemos que .

funciona como um fator de ajuste para , a funo

fica sempre menor ou igual funo

no cresce mais rapidamente que

Como exemplo, considere que as expresses de custo de dois algoritmos foram medidas como corresponde ao parmetro primrio comum a esses algoritmos. Podemos dizer que primrio for superior a , temos que para

, onde , porque se o tamanho do parmetro

. Portanto,

Expresses do tipo so chamadas de expresses assintticas. A terminologia expresso assinttica comumente utilizada no contexto de anlise de complexidade de algoritmos. Se o custo dado por uma expresso assinttica, ento, o esforo do algoritmo foi medido considerando seu comportamento diante de um tamanho extremamente grande do parmetro primrio. Na verdade, a anlise matemtica feita assumindo que o tamanho do parmetro primrio tende a infinito, ou seja, analisa o algoritmo para grandes entradas de dados. Dessa forma, a anlise considera a execuo do algoritmo em condies extremas, processando grades quantidades de dados. No caso da complexidade de pior caso, alm da grande quantidade de dados assumida, consideramos, tambm, que os dados da entrada esto dispostos da maneira mais desfavorvel possvel para o algoritmo. Existem tambm notaes para anlise de limite inferior (notao big Omega) e para a anlise de limite exato (notao big Theta). Contudo, no discutiremos essas outras formas de anlise, pois a anlise do pior caso a notao mais utilizada e normalmente a mais fcil de ser calculada.

Comparao de algoritmos
Para se comparar dois algoritmos, devemos primeiramente calcular suas complexidades assintticas. Dadas as expresses assintticas de dois algoritmos diferentes, se ; se s vezes inferior a , e vice-versa, e os grficos de e , tm um nmero infinito de intersees, ento, temos um empate, ou seja, a funo de custo no suficiente para escolher entre os dois algoritmos; se valor s vezes inferior a , , e vice-versa, e os grficos de e , tm um nmero finito de pontos de interseo, ento, a partir de certo e , podemos compar-los da seguinte forma: , ou seja, o grfico de est sempre abaixo do grfico de , ento, escolhemos o algoritmo correspondente a

sempre inferior a

sempre superior a

, ou sempre inferior. Neste caso, escolhemos o algoritmo cuja funo inferior para grandes valores

7 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

de

Em algumas estruturas de dados, a complexidade de uma operao pode depender do estado da estrutura. Por exemplo, em determinados momentos, uma insero pode ter um custo constante, em outros momentos, um custo linear. Nesse caso, aplica-se a complexidade amortizada, que permite expressar a complexidade mdia da operao, considerando todos os estados possveis. Essa notao foge ao escopo de nossa discusso atual.

Atividade 3
Dadas as expresses de custo mostradas a seguir, indique a complexidade de pior caso correspondente a cada uma delas :

Leituras complementares
ALBUQUERQUE, Jones. Anlise de complexidade de algoritmos. Disponvel em: <http://www.cin.ufpe.br/~joa/menu_options/school/cursos /ppd/aulas/complexidade.pdf>. Acesso em: 4 mar. 2010. Para se aprofundar mais sobre a anlise de complexidade de algoritmos, consulte a citada fonte. WU, Shin - Ting. Introduo a sistemas de computao digital: dvidas freqentes. Disponvel em: <http://www.dca.fee.unicamp.br/~ting /Courses/ea869/faq1.html>. Acesso em: 4 mar. 2010. Nesta referncia, voc encontra respostas para algumas dvidas sobre complexidade de algoritmos e computabilidade.

Resumo
Na aula de hoje, voc aprendeu algumas noes sobre a anlise de algoritmos. Iniciamos nossa discusso mostrando as vantagens da anlise matemtica sobre a anlise emprica de algoritmos, tanto em termos de generalidade da avaliao produzida, pois no depende das condies do ambiente de realizao de experimentos, como pelo fato de que a anlise matemtica no exige a criao de um programa, podendo servir de critrio para a escolha de algoritmos no incio do processo de desenvolvimento. Em seguida, voc viu as funes matemticas tradicionalmente utilizadas em comparaes de complexidade algortmica, e, por fim, aprendeu a notao para determinao de limites superiores. Os conceitos e notaes da anlise matemtica de algoritmos so importantes porque do ao programador um valioso critrio para a escolha do melhor algoritmo para um dado problema. Se voc conhecer a funo de custo de um algoritmo, voc poder estimar como o custo desse algoritmo ir se comportar medida que o tamanho de seu parmetro primrio aumentar. Voc pode utilizar esse conhecimento como critrio para comparar algoritmos e escolher o melhor para resolver um determinado problema.

Autoavaliao
1. Quais os objetivos da anlise de complexidade de algoritmos? 2. Diferencie a anlise emprica da anlise matemtica de algoritmos. 3. O que so o melhor caso, caso mdio e pior caso de um algoritmo?

8 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

4. Qual a funo matemtica que expressa a complexidade de pior caso do algoritmo abaixo?

5. Quais os valores de k, i, j, x, y, z e a ao final do algoritmo? Qual a complexidade de pior caso desse algoritmo?

9 de 10

17/03/2011 13:14

Metropole Digital

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_...

6. Qual a complexidade de tempo de pior caso para o algoritmo abaixo?

Referncias
SZWARCFITER, Jayme Luiz; MARKENZON, Lilian. Estruturas de dados e seus algoritmos. 2. ed. rev. Rio de Janeiro: Editora LTC, 1994. cap. 1. EDGEWICK, Robert. Algorithms in C: parts 1-4. 3. ed. Reading: Addison-Wesley, 2004.

Voltar

Imprimir

Topo

10 de 10

17/03/2011 13:14

Potrebbero piacerti anche