You are on page 1of 7

ANAC Uma Ferramenta para Anlise Automtica da

Complexidade de Algoritmos

Marco Antonio de Castro Barbosa


Laira Vieira Toscani
Leila Ribeiro
Universidade Federal do Rio Grande do Sul
Instituto de Informtica
Departamento de Informtica Terica
Porto Alegre-RS, Brasil, CEP 91.501-970
{mantonio,laira,leila}@inf.ufrgs.br

ABSTRACT
This paper presents the conception, project and development of the prototype system ANAC that consists of a tool to be
used in aid to teaching complexity of algorithms. The system has for main objective to guide the user in the process of
analysis of algorithm supplying as result the complexity equations for the average case and worst case.
Key-words: complexity of algorithms, analysis of algorithms, worst case, average case, automatic analysis, aid to
teaching.

RESUMO
Este artigo apresenta a concepo, projeto e desenvolvimento do prottipo de sistema ANAC que consiste de uma
ferramenta a ser utilizada no apoio ao ensino de Complexidade de Algoritmos. O sistema tem por principal objetivo
guiar o usurio no processo de anlise do algoritmo fornecendo como resultado as equaes de complexidade para o pior
caso ou caso mdio.
Palavras Chaves: Complexidade de algoritmos, anlise de algoritmos, apoio ao ensino.
1 INTRODUCO
A anlise de um algoritmo tem por finalidade melhorar, quando possvel, seu desempenho e, quando houver mais de um
algoritmo para a resoluo de um mesmo problema, poder optar pelo melhor dentre os algoritmos existentes. O processo
de anlise, entretanto, uma tarefa que exige conhecimento e percia do analista. Isto tem motivado, ao longo dos anos,
pesquisas com a finalidade de criar mtodos e construir ferramentas que tornem o processo de anlise automtico.
Dentre estes mtodos e ferramentas est o prottipo de sistema ANAC Analisador de Complexidade que o assunto
abordado neste artigo.
O sistema ANAC [2] uma ferramenta de apoio ao clculo da complexidade de algoritmos no recursivos. Os objetivos
deste sistema so:
 Fornecer um ambiente que guie o usurio nos passos necessrios ao desenvolvimento do clculo da complexidade
de algoritmos;
 Servir como ferramenta de apoio ao ensino de complexidade de algoritmos, constituindo-se num ambiente de
aplicao prtica ao embasamento terico adquirido no ensino de complexidade algortmica;
 Calcular a complexidade de algoritmos no Pior Caso ou caso Mdio;
 Estimular o clculo da complexidade de algoritmos, como um meio de tornar programas mais eficientes.

Este artigo est dividido em 5 sees. A seo 2 apresenta alguns dos principais conceitos da Teoria da Complexidade.
A seo 3 aborda a automatizao do processo de anlise de algoritmos. Na seo 4 apresentado o prottipo do sistema
ANAC, seus objetivos, projeto e exemplo de utilizao. Na seo 5 so apresentadas as concluses.

2 A ANLISE DA COMPLEXIDADE DE ALGORITMOS


A anlise de algoritmos uma atividade que contribui para o entendimento fundamental da Cincia da Computao.
Segundo Aho [1], a complexidade o corao da computao.
A construo de um algoritmo visa no apenas soluo de um determinado problema, mas um algoritmo bom, ou seja,
que solucione o problema e seja eficiente. Conhecer a complexidade de um algoritmo importante para poder decidir se
a implementao do algoritmo vivel. A eficincia de um algoritmo , geralmente, uma meta para quem est
desenvolvendo um algoritmo. Entretanto, nem sempre faz parte dos objetivos do projetista fazer o clculo da
complexidade. Esta uma situao contraditria. Em geral, o projetista tem uma idia intuitiva da eficincia de seu
algoritmo, se conforma e no se atreve a desenvolver frmulas matemticas para calcular a complexidade. O sistema
apresentado neste artigo tem por um de seus principais objetivos mudar essa situao. O objetivo do sistema ANAC
facilitar, na medida do possvel, o ensino-aprendizagem da Complexidade de Algoritmos, fazendo com que o aluno crie
a cultura do desenvolvimento de algoritmos eficientes, preocupando-se com a eficincia ainda na fase de projeto e
construo dos mesmos, e leve esta cultura para alm da vida acadmica.
A complexidade de algoritmos consiste na quantidade de trabalho necessria 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. As
operaes fundamentais so aquelas que, dentre as demais operaes que compe o algoritmo, expressam a quantidade
de trabalho, portanto so extremamente dependentes do problema e do algoritmo.
Uma das mais importantes medidas de complexidade de algoritmos a medida de tempo. Isto se justifica em razo de
boa parte da pesquisa em Cincia da Computao consistir do projeto e anlise de algoritmos em relao eficincia, ou
seja, ao projetar-se algoritmos deseja-se que ele fornea a soluo do problema em tempo aceitvel, de tal forma que a
implementao do algoritmo em uma linguagem de programao satisfaa a expectativa do usurio, no s resolvendo o
problema, mas o fazendo com tempo de processamento aceitvel e no menor tempo possvel. Neste trabalho chamar-se-
a de simplesmente complexidade a complexidade de tempo.
Existem duas principais medidas de complexidade de tempo de um algoritmo: complexidade no Pior Caso e
complexidade no Caso Mdio. A complexidade no pior caso geralmente a medida mais empregada na prtica. Fixado
um tamanho de entrada, a anlise no pior caso feita em relao ao nmero mximo de operaes fundamentais
necessrias para a resoluo de qualquer problema do tamanho fixado. Seu valor pode ser considerado como um limite
de complexidade que no ser ultrapassado, sendo portanto, uma garantia de qualidade mnima do algoritmo. O aspecto
negativo da anlise no pior caso que leva em considerao os casos caticos que dificilmente iro ocorrer na prtica. A
complexidade no caso mdio, para determinados algoritmos, mais realstica do que a anlise no pior caso. A anlise no
2
caso mdio baseada nas distribuies probabilsticas dos dados de entrada do algoritmo. Para algoritmos utilizados
freqentemente mais indicado calcular a sua complexidade mdia, pois a probabilidade da situao do pior caso
ocorrer pode ser mnima. A dificuldade no clculo do caso mdio est justamente nas distribuies probabilsticas dos
dados de entrada, que nem sempre so conhecidas. Apesar disto, existem bons exemplos de aplicao deste clculo,
porm utilizando sempre distribuio uniforme. Um exemplo caracterstico o algoritmo de ordenao Quicksort, que
apresenta desempenho mdio O(n log n) [4], enquanto o seu desempenho no pior caso O(n2), mas sabe-se que na
prtica o algoritmo Quicksort raramente ter este desempenho pessimista.
Algoritmos que no contenham nenhuma estrutura condicional tero as complexidades no pior caso e caso mdio iguais,
porque o algoritmo executar sempre o mesmo nmero de operaes para um mesmo tamanho de entrada, pois possui
um s caminho de execuo.
A anlise da complexidade de um algoritmo realizada, usualmente, de maneira muito particular, j que a complexidade
uma medida que tem parmetros bem particulares ao algoritmo (operaes fundamentais e tamanho da entrada).
Apesar disto alguns conceitos so gerais, no sentido que s dependem da estrutura do algoritmo. essa a idia que ser
explorada no sistema ANAC.
Quando existe mais de um algoritmo para a resoluo de um mesmo problema necessrio que o analista possa
identificar qual dos algoritmos o mais indicado, seja em termos de preciso de resposta ou tempo de execuo.
importante salientar que a comparao de algoritmos para resolver um mesmo problema deve se passar no mbito de
algoritmos que tenham mesmas operaes fundamentais e mesma funo de tamanho do problema. Um exemplo de
algoritmos com o mesmo objetivo e que apresentam desempenhos muito diferentes o do clculo da determinante de
uma matriz. Ao se utilizar um computador real para encontrar o determinante de uma matriz 20 x 20 usando a definio
o tempo estimado de 15.225 sculos, enquanto que no mesmo computador usando o mtodo de Gauss o tempo
estimado ser de 38,63 ms. [10]
Algoritmos so desenvolvidos sem a preocupao de clculo de complexidade, porque o clculo difcil, muito
dependente do algoritmo em questo e portanto fica dependente da sensibilidade do projetista, alm disso requer
manipulao de frmulas matemticas, que no esto presentes no dia-a-dia do projetista e muitos timos projetistas tem
verdadeira averso a este tipo de manipulao. As pesquisas desenvolvidas em Teoria da Complexidade tambm no
ajudam o projetista pois, geralmente, estes estudos so realizados para complexidade de problemas especficos, ou
estudos de algoritmos especficos. Poucos so os trabalhos que trazem benefcios diretos ao projetista usual, ou seja que
tratam o assunto de maneira mais geral, mais abrangente e menos direcionada e especfica. Um exemplo o estudo do
problema de classificao de onde saram resultados altamente utilizveis como: no possvel desenvolver algoritmo
de classificao baseado em comparao com complexidade melhor que O(n log n), tanto no pior caso quanto no caso
mdio com distribuio uniforme [1] e portanto algoritmos como Heapsort e Mergesort que possuem essas
complexidades podem ser considerados timos e so largamente usados.

3 ANLISE AUTOMTICA DE ALGORITMOS


Nas ltimas dcadas muitos estudos foram realizados sobre a anlise de algoritmos. Entretanto estes estudos
focalizavam, em sua maioria, anlise de algoritmos especficos, tais como algoritmos de classificao, pesquisa e etc.
Poucos estudos foram destinados automatizao do processo de anlise de forma mais genrica e irrestrita.
Na dcada de 70 surgiram as primeiras tentativas de automatizar o processo de anlise de algoritmos. Algumas destas
tentativas resultaram em sistemas, como o caso dos sistemas METRIC [11], ACE [6] e o Lambda-Upsilon-Omega [3].
O sistema METRIC, desenvolvido por Wegbreit foi o primeiro sistema criado com a finalidade de analisar algoritmos de
forma totalmente mecnica. Este sistema transforma especificaes de programas em equaes de recorrncia e ao
resolver estas equaes obtm a complexidade do programa analisado. O METRIC analisa programas Lisp segundo as
medidas de desempenho apresentadas por Knuth [5], sendo elas a complexidade mnima (melhor caso), a complexidade
mxima (pior caso) e a complexidade mdia. Wegbreit estabeleceu uma anlise mecnica de programas como uma
atividade vivel, o que foi inovador e motivou novas pesquisas neste campo.
O sistema ACE (Automatic Complexity Evaluator), desenvolvido por Le Mtayer possui uma abordagem um tanto
similar ao escopo de Wegbreit aplicada, no entanto, anlise no pior caso. O ACE analisa programas funcionais usando
uma base de dados com regras que convertem as especificaes de programas em equaes de complexidade.
O sistema Lambda-Upsilon-Omega - , desenvolvido por Flajolet, Salvy e Zimmermann um sistema projetado
para realizar anlise automtica de classes restritas de procedimentos puramente funcionais. O sistema baseia-se na
conjuno de duas idias:
3
1) As recentes metodologias em anlise combinatorial, que mostraram uma correspondncia geral entre estruturas de
dados e especificaes de algoritmos e equaes operando sobre funes geradoras. A computao automtica destas
equaes de funes geradoras realizada pelo Sistema Analisador Algbrico - ALAS.
2) As equaes obtidas pelo ALAS so passadas para um Sistema Analtico ANANAS, que uma coleo de rotinas
algbricas escritas na linguagem Maple, para serem resolvidas.
As metodologias de clculo de complexidade de algoritmos para o pior caso, proposta em [9], e para o caso mdio,
proposta em [7], tornaram o processo de clculo de complexidade de algoritmos mais mecnico e possibilitam o
desenvolvimento de um sistema de clculo de complexidade mais abrangente e mais genrico no seu uso.
O sistema ACME Analisador de Complexidade Mdia, desenvolvido por Morelli [8] foi o primeiro sistema criado
utilizando as metodologias desenvolvidas em [9] e [7]. Este sistema realiza a anlise no caso mdio. A sada fornecida
pelo sistema uma equao no simplificada e portanto relativamente complexa de ser analisada, uma vez que o
processo de simplificao fica totalmente a cargo do usurio.

4 O SISTEMA ANAC
A construo de algoritmos que, no apenas solucione determinado problema, mas o faa em tempo vivel, alm de
outros fatores j anteriormente citados, constituram-se em motivao para a construo de um sistema que realiza a
anlise algortmica de forma semi-automtica, o Analisador de Complexidade - ANAC.

Caractersticas do Sistema ANAC


O ANAC baseia-se nas metodologias de clculo de complexidade para estruturas algortmicas proposta em [9] e [7]. O
sistema analisa algoritmos no recursivos escritos em uma linguagem Pascal-like definida para o sistema. Esta
linguagem engloba as principais estruturas presentes em linguagens imperativas: atribuio, seqncia, condicional,
iterao e iterao condicional, calculando de forma semi-automtica a equao de complexidade e resolvendo-a sempre
que forem fornecidos os dados necessrios para este processo. O usurio pode definir procedimentos no sistema, desde
que fornea os dados necessrios para que o sistema possa reconhecer este procedimento e poder calcular a
complexidade do procedimento.
O sistema foi implementado na linguagem de programao Java, pela portabilidade desta linguagem e pelo propsito de
disponibilizar o sistema ANAC atravs da Internet.
O prottipo de sistema ANAC consiste de um processo de anlise-sntese que recebe como entrada uma especificao
algortmica escrita numa linguagem Pascal-like pr-estabelecida e, a medida que a anlise sinttica vai sendo efetuada, a
equao de complexidade vai sendo construda. O processo de anlise sinttica ocorre de maneira top-down e, ao ser
identificada uma instruo, a sua equao de complexidade correspondente construda em forma de rvore e as
variveis de complexidade so geradas e desenvolvidas at sua completa definio. Neste ponto o sistema retorna na
rvore substituindo a varivel pelo seu respectivo valor. Esse processo pode ser visto na seo de exemplo a seguir.
Caso o sistema esteja sintaticamente incorreto o sistema emitir mensagem de erro e ir abortar a processo de anlise do
algoritmo. Aps concludo, com xito, o processo de anlise-sinttica do algoritmo o sistema ter obtido a equao de
complexidade do algoritmo. Essa equao, entretanto, poder estar numa forma bastante complicada, e o sistema ir
simplificar a equao sempre que for possvel faz-lo. Entretanto, o ANAC no se prope a ser um software com grande
capacidade matemtica, por isso sua capacidade de simplificao se resume aos casos mais simples e triviais.
O sistema interage com o usurio sempre que necessrio. Antes de iniciar o processo de anlise necessrio que o
usurio defina em qual medida deseja calcular a complexidade: pior caso ou caso mdio. Caso o usurio no faa esta
definio o sistema ir calcular a complexidade no pior caso. Ao se iniciar o processo de anlise solicitado que o
usurio identifique a varivel que ir representar o tamanho da entrada. Quando o usurio optar pelo clculo da
complexidade mdia, sempre que o sistema encontrar estruturas que apresentam mais de um caminho de execuo, o
sistema ir solicitar as probabilidades de cada um destes caminhos. Ao encontrar uma estrutura com iterao condicional
o sistema solicitar ao usurio uma avaliao pessimista para o nmero de vezes que essa instruo ser executada na
sua aplicao e a complexidade da avaliao de sua condio.

A Interface do Sistema ANAC


O sistema apresenta-se ao usurio como uma ferramenta para edio de textos bastante simples, conforme pode ser
observado na Figura 1, que mostra a janela do sistema com o algoritmo classi analisado.

4
Figura 1 A Interface do Sistema ANAC

No alto da figura 1 pode-se observar no menu de opes os itens Arquivo, Editar, Complexidade, Analisar e Ajuda.
Na opo Arquivo esto presentes os sub-itens: Abrir, Novo, Salvar e Sair. Na opo Editar esto presentes os sub-
itens: Recortar, Copiar e Colar. Na opo Complexidade esto presentes os sub-itens: Pior Caso e Caso Mdio. Para
que o ANAC possa iniciar o seu processo de anlise necessrio que um destes campos seja selecionado. A opo Pior
Caso fica destacada por default. Para iniciar o anlise o usurio deve selecionar a opo Iniciar no menu Analisar.
Finalizando, existe na opo Ajuda os sub-itens Contedo e Sobre. Em Contedo existe uma descrio do sistema,
com informaes sobre a utilizao do sistema e em Sobre existem informaes tcnicas sobre o sistema.

Exemplo de Aplicao da Metodologia


Na Figura 1, pode se ver na apresentao da interface do sistema o algoritmo classi. O algoritmo tem por objetivo
ordenar um vetor de dimenso n, varrendo-o n vezes. Na primeira varredura, coloca o maior elemento na primeira
posio mais esquerda; na segunda varredura, coloca o segundo maior elemento na segunda posio mais esquerda e
assim por diante.
No exemplo podem ser vistos a representao algortmica, uma mensagem indicando a medida na qual a anlise estava
sendo efetuada (Pior Caso), uma mensagem de status, indicando que o algoritmo estava sendo analisado e logo abaixo a
anlise efetuada pelo ANAC, executada passo-a-passo chamando x1 a complexidade do algoritmo. A anlise feita de
maneira top-down. O algoritmo pode ser visto como uma seqncia. A primeira parte constituda por um comando for
cuja complexidade dada por um somatrio, tendo a varivel x2 representando a complexidade do corpo do comando e
a varivel x3 representando a complexidade da segunda parte. A seguir detalhada a complexidade do corpo do
comando for, x2. O prximo comando identificado foi, novamente, um comando for. Desta forma, x2 consistir na
5
complexidade do novo comando for, (com a complexidade do corpo deste comando for, identificada como x4), mais a
complexidade da prxima parte, identificada por x5. A anlise prossegue, procurando definir a complexidade do corpo
do comando for. O comando if encontrado no corpo do comando for, cuja complexidade x2. Neste momento, foi
solicitado que o usurio fornecesse a complexidade da avaliao da condio (A[j] > A[j+1]) para que esta estrutura
pudesse ser avaliada. Sempre que o sistema encontrar comandos condicionais e iteraes condicionais, o sistema ir
solicitar a complexidade relativa a avaliao da estrutura condicional, caso o usurio no informe a complexidade o
sistema ir considerar a complexidade como constante. Desta forma, a complexidade de x4 ser a complexidade da
avaliao da condio (A[j] > A[j+1]), mais a complexidade do ramos ento, identificada por x6, mais a complexidade
da prxima parte, identificada por x7. A seguir, o sistema percorre o ramo ento para poder definir a complexidade de
x4. Neste ramo encontrada a atribuio Temp := A[j], logo, x6 corresponder a complexidade desta atribuio mais a
prxima estrutura, identificada como x8. Atribuio encontrada simples, ou seja, no necessita de uma avaliao de
uma expresso, ou uma chamada de funo, desta forma, o sistema identifica a complexidade desta atribuio como
constante (valor 1). O comando seguinte (x8), tambm uma atribuio, desta forma, x8 ser a complexidade da
atribuio A[j] := A[j+1], mais a complexidade da prxima parte, denominada x9. A complexidade da atribuio x8
tambm constante. Em x9 o sistema encontra uma nova atribuio cuja complexidade tambm constante. A
complexidade de x9 ser a complexidade da atribuio mais a complexidade da prxima parte, identificada por x10. A
parte identificada por x10 um comando delimitador de bloco, endif. Este tipo de comando no apresentada valor
significativo de complexidade, por isto atribui-se o valor 0 (zero). Neste momento, o sistema retorna na sua rvore de
derivao substituindo as variveis por seus respectivos valores e calculando a complexidade quando for possvel faz-
lo. Por exemplo: calculando x9 = 1 + 0 = 1, ou seja, o valor da atribuio ( constante = 1), mais o comando endif (zero).
Com o valor de x9 calculado pode-se obter o valor de x8 e consequentemente x6. Para calcular o x4, necessita-se o valor
da complexidade x6, mais o valor da complexidade x7. O valor x6 j foi obtido, ento necessrio que o sistema
identifique x7 e obtenha sua complexidade. No prosseguimento de sua anlise o sistema ir identificar x7 como o
comando endfor, utilizado para delimitar o corpo do comando for. Da mesma forma que o endif, o endfor possui valor
de complexidade 0 (zero). Agora, o sistema tem condio de calcular o valor x4, que a complexidade da avaliao da
condio, que foi definida como constante (1), mas a complexidade de x6 j obtido (3), mais a complexidade de
x7(zero). Tem-se que: complexidade de x4 = 1 + 3 + 0 = 1, ou seja, constante. O sistema parte agora para a definio
de x5 para que possa calcular x2. O comando identificado por x5 o comando endfor, que tem valor 0(zero). O sistema
pode agora resolver o somatrio e definir o valor de x2, que n. Para a resoluo final da anlise o sistema necessita do
valor de x3, que o delimitar do escopo final do algoritmo, end, cuja complexidade tambm 0 (zero). O sistema
possui, agora todas a informaes necessrias para calcular a complexidade do algoritmo classi. Para tanto basta
substituir os valores obtidos em suas respectivas variveis, calcular o somatrio final e fazer a soma em x1.
No final fornecido o valor de x1 como complexidade total do algoritmo. Isto significa que o algoritmo classi tem
complexidade assinttica no pior caso O(n2).
x1 = [ SUM ( i = 1 , n ) n ] + 0 = n^2+0 = n^2
e como resultado final, em ordem assinttica: O( n^2 )
que representa, no ANAC, um polinmio de grau dois O(n2).
No exemplo foi realizada a anlise no pior caso. O processo de anlise no caso mdio praticamente o mesmo, s
diferindo nas probabilidades do ramos de execuo que tambm devero ser informadas pelo usurio.

5 CONCLUSO
A anlise automtica de algoritmos tem como principal objetivo tornar o processo de clculo da complexidade mais
acessvel. O surgimento das metodologias de clculo de complexidade, baseado nas estruturas algortmicas para o pior
caso, proposta em [9] e para o caso mdio, proposta em [7] tornaram o processo aplicvel a uma classe maior de
algoritmos, o que no ocorre nos sistemas [11], [6] e [3], o que restringe a utilizao destes sistema.
O sistema ANAC uma ferramenta de apoio ao ensino de complexidade de algoritmos no recursivos, constituindo-se
num ambiente interativo entre o usurio e o sistema de forma que o usurio seja guiado durante o processo de anlise.
O sistema proposto apresenta algumas vantagens em relao aos sistemas citados na seo 3:
 fato da linguagem de especificao do algoritmo ser Pascal-like torna o ANAC um sistema mais utilizvel, por ser o
Pascal uma linguagem amplamente difundida no meio acadmico, ao contrrio de um sistema como METRIC que
trabalha com a linguagem Lisp, cuja utilizao mais restrita;

6
 possui um ambiente de trabalho mais simples de operar. Em sistemas como o Lambda-Upsilon-Omega o usurio
necessita ter conhecimento do sistema operacional Unix, conhecer a linguagem de programao Lisp e ainda ter
conhecimento do software matemtico Maple;
 um sistema interativo que vai guiando o usurio durante o processo de anlise, isto faz com que o usurio v
adquirindo percia no processo de anlise e venha a tornar o processo de anlise um hbito durante o processo de
desenvolvimento de um algoritmo;
 com exceo do METRIC, todos os demais sistemas vistos apresentam a anlise segundo uma nica medida, ou no
pior caso ou no caso mdio. O ANAC capaz de fornecer o resultado para ambas;
 gera, sempre que possvel, um resultado simplificado o que no visto nos demais sistemas que podem gerar
extensas e complicadas equaes, que podem ser desestimulantes para quem no esteja habituado com o processo
de clculo de complexidade ou para quem est se iniciando no estudo da Teoria da Complexidade.
 Ao contrrio dos demais sistemas, que possuem uma abordagem terica com a finalidade de encontrar uma relao
entre a complexidade do algoritmo e a estrutura do algoritmo, o ANAC possui uma preocupao prtica de soluo,
com o objetivo de chegar a uma ordem de complexidade.
 Trabalhos futuros: O sistema ANAC anlise algoritmos no recursivos. Um propsito futuro permitir que o
sistema consiga analisar algoritmos recursivos.
Um aspecto limitante do sistema ANAC a sua capacidade de simplificao, que se resume a casos mais gerais, uma
vez que no possui grande capacidade matemtica e por no ser este o objetivo central do sistema. O objetivo do sistema
ANAC conduzir o usurio no processo de anlise pretendendo, com isso, que o usurio v adquirindo percia no
processo de clculo.
A contradio entre a preocupao com a eficincia dos algoritmos e a no preocupao em calcular a complexidade
deles uma situao que deve ser revertida. Assim, um resultado que almeja-se alcanar com esse trabalho o despertar
da necessidade para essa importante tarefa no desenvolvimento de algoritmos, fazendo do clculo da complexidade uma
etapa do projeto do algoritmo, e ento aumentar o nmero de algoritmos analisados e a gerao de algoritmos mais
eficientes.

REFERNCIAS
1. Aho, A.; Hopcroft, J.; Ullman, J. Data Structures and Algorithms. Addison-Wesley. 1982.
2. Barbosa, Marco A. C.; Toscani, Laira; Ribeiro, Leila. Ferramenta para a Automatizao da Anlise da
Complexidade de Algoritmos. In: SBIE2000XI Simpsio Brasileiro de Informtica na Educao/SBC. Anais...,
Macei, 2000.
3. Flajolet, Philippe; Salvy, Bruno & Zimmermann, Paul. : An Assistant Algorithms Analyzer. In Proceedings
AAECC'6, Lecture Notes in Computer Science 357, pg. 201-212, 1988. Also available as INRIA Reserch Report
876, 1988.
4. Horowitz, Ellis & Sahni, Sartaj. Fundamentals of Computer Algorithms. Computer Science Press Inc. 1978
5. Knuth, D. E. The Art of Computer Programming. Addison-Wesley, Menlo Park, California, 1968.
6. Metayer, D. Le. Ace: An Automatic Complexity Evaluator. ACM Transactions on Programming Languages and
Systems, 10(2):248-266,1988.
7. Rosa, Dbora Schuch da. Complexidade Mdia Algortmica: uma Metodologia para o seu clculo. - Dissertao de
Mestrado - CPGCC / UFRGS, 1997.
8. Silveira; Carlos Morelli D. Analisador de Complexidade Mdia Baseado nas Estruturas Algortmicas. UFPEL
Pelotas, 1998.
9. Toscani, Laira. V. & Veloso, Paulo A. S. Uma metodologia para clculo da complexidade de algoritmos. Simpsio
Brasileiro de Engenharia de Software, 4. guas de So Pedro/SP, out. 24-26. Anais, SBC 1990.
10. Toscani, Laira. V. & Veloso, Paulo A. S. Complexidade de Algoritmos: Anlise, Projeto e Mtodos. Editora Sagra,
Porto Alegre, 2001.
11. Wegbreit, B. Mechanical program analysis. Communications of the ACM, 18(9):528-539, 1975.
7

You might also like