Sunteți pe pagina 1din 7

II ERMAC 2011 II Encontro Regional de Matemtica Aplicada e Computacional Vitria da Conquista, Bahia 24 27 de Outubro de 2011 COMPARAO ENTRE ALGORITMOS:

: EMPREGANDO MTRICAS E OMPARAO CONCEITOS BSICOS, FUNCIONANDO COMO ORIENTAO DE ANLISE, CONSTRUO E EXECUO DE ALGORITMOS Geraldo Pereira Rocha Filho1 Universidade Estadual do Sudoeste da Bahia Estrada do Bem Querer, Km 4, Bairro Universitrio, 45000 000, Vitria da Conquista, 45000-000, BA, Brasil E-mail: geraldoprfilho@gmail.com E
1

Abstract. It is the comparison between algorithms, emphasizing mathematical knowledge. The sorting algorithms are showed and examined by considering the principles of algorithm analysis. The results show the importance of a project to build an algorithm and they can decide which algorithm to a given t situation. Resumo: Trata-se da comparao entre algoritmos, destacando o se conhecimento matemtico. Os algoritmos de ordenao so apresentados e examinados, considerando os princpios de analise de algoritmo. Os , resultados mostram a importncia de um projeto na construo de um algoritmo e permitem decidir qual algoritmo para uma determinada situao situao.

1. Consideraes Iniciais raes


Algoritmos so conjuntos de passos sequnciais que no possuem ambigu mos possuem ambiguidades e que tm um objetivo especfico e que devem tambm, serem feitos em um tempo finito e m devem, possuir esforos finitos. Neste ultimo caso, quanto menor for o tempo e esforo, mais rpido e eficaz ser o algoritmo em questo. Tal conceito de algoritmo serve tanto para a tmo rea da computao quanto para as demais reas adjacentes, matemtica, fsica, engenharias, dentre outras. A idia de algoritmo tambm percebvel no dia a dia, como atender um telefone celular por exemplo. Para esse processo, necessrio encontrar o celular, ssrio objeto, obt-lo, apertar a tecla aceitar, levar o item na orelha e falar al. Porm o lo, , tempo necessrio para atender ao telefone celular varia de pessoa para pessoa. Saber onde o celular est localizado, como alcan e o que falar um fator determinante r alcan-lo para finalizar o processo de atendimento mais rapidamente. Assim, a Anlise de ssim, Algoritmo serve como um norteador para o estudo da construo, investigao e mo execuo dos algoritmos. Abaixo, figura 1, uma abstrao de um algoritmo genrico. itmo

Figura 1. Ilustrao de Black Box de um algoritmo genrico. De fato, existem diferentes mtodos na Computao para saber se um algoritmo xistem

est se comportando de forma eficiente e eficaz. Um mtodo vivel medir o tempo computacional, em milissegundo, para notar o desempenho do algoritmo em determinada situao. preciso ter em mente que o tempo ir variar a depender do tamanho da entrada, quanto maior a entrada mais tempo de processamento ser necessrio. Um dos grandes males na construo de um algoritmo, que a maioria no leva em conta a complexidade na hora de idealizar um projeto. Toscani e Veloso (2008) expem sobre esse assunto, em especial, quando discorre que o processo seria mais eficiente se o tema exposto tambm fosse levado em considerao. Para colocar em prtica a anlise do algoritmo fundamental saber o que desempenho e como alcan-lo, conhecer o que uma cota assinttica superior, inferior e limite assinttico, ter noo de qual estratgia (mtodo Guloso, Dinmico e Dividir para Conquistar) a ser usada e escolher um algoritmo para fazer a anlise.

2. Idias bsicas para a anlise de algoritmos.


Algoritmos so o cerne da computao. Um programa codifica um algoritmo de modo a ser executado em um computador, resolvendo assim um problema. (TOSCANI; VELOSO, 2008, p. 1). Na prtica, fundamental que a eficincia e eficcia, em relao ao dispndio de tempo e de memria, estejam andando juntas. Um algoritmo construdo e depois analisado quanto sua complexidade. O processo, entretanto, seria mais eficaz se a complexidade fosse um fator integrante do projeto do algoritmo. (TOSCANI; VELOSO, 2008, p. 27). Ter em mente idias como complexidade (otimista, media e pessimista em relao ao tempo de execuo), crescimento assinttico1 e estratgias de construo de algoritmos, so fundamentais para uma boa anlise e implementao dos algoritmos. Segundo Ziviani (1999), os algoritmos de ordenao so bons exemplos para fazer a sua anlise em tempo de execuo e examinar sua estratgia de projeto. Por esse motivo, os utilizaremos aqui no processo de comparao, mostrando quais os algoritmos mais eficazes para uma determinada situao. 2.1. Desempenho Cormen et. al. (2002) discorre sobre a anlise do algoritmo, dizendo que:
analisar um algoritmo significa prever os recursos de que o algoritmo necessitar. Ocasionalmente, recursos como memria, largura de banda de comunicao ou hardware de computador so a principal preocupao, mas com freqncia o tempo de computao que desejamos medir. (CORMEN ET. AL., 2002, p. 16).

As analises dos algoritmos de ordenao sero feitas, no tpico 3, com uma mquina que possui as seguintes configuraes: Processador Core2 Duo P8700 2,53GHz (velocidade do clock). Memria cach 3 MB. Memria RAM 3 GB DDR3 1066MHz.

Pode-se construir ou esquadrinhar um algoritmo por meio de trs estratgias:


O crescimento assinttico de uma funo - f(x) - a analise do comportamento a ser observado quando o x da funo tende ao infinito.
1

mtodo Guloso, Dinmico e Dividir para Conquistar. Segundo Toscani e Veloso (2008), essas trs estratgias baseiam-se na idia de decomposio de problema complexos em outros mais simples, cujas solues sero combinadas para fornecer uma soluo para o problema original. As tcnicas mencionadas tm como objetivos facilitar a construo do algoritmo e auxiliar a compreenso na hora de sua anlise. Tomaremos como analise o tempo de execuo tanto no pior caso (analise pessimista) quanto nos casos mdio e otimista dos algoritmos. Com base em Cormen et. al. (2002), o pior caso mostra que um algoritmo um limite superior2 sobre o tempo de execuo para qualquer entrada, ou seja, no pior caso, temos a certeza de que ele nunca ser pior para qualquer entrada n. 2.2. Crescimento Assinttico Segundo Ziviani (1999) em muitas situaes podem existir vrios algoritmos para resolver o mesmo problema, sendo, pois necessrio escolher aquele que o melhor (ZIVIANI, 1999, p. 4), tendo em vista que o custo de utilizao de um algoritmo pode ser medido de vrias maneiras, uma das formas mais adequada utilizando um modelo matemtico. (ZIVIANI, 1999, p. 4). Para Toscani e Veloso (2008), o comportamento assinttico de um algoritmo o mais procurado, j que, para um volume grande de dados, a complexidade torna-se mais importante. O algoritmo assintoticamente mostrase mais eficiente e o melhor para todas as entradas; exceto, talvez, para entradas relativamente pequenas. Portanto, para fazer uma comparao/analise, pode-se utilizar: Cota Assinttica Superior. Cota Assinttica Inferior. Limite Assinttico.

Mostramos, no logo abaixo, uma sntese dos conceitos trabalhados por Toscani e Veloso (2008) e por Cormen et. al.(2002), para melhor entender o funcionamento da referida comparao/analise. 2.2.1. Cota Assinttica Superior Para definir uma Conta Assinttica Superior (CAS), usar-se a notao O em que F(n) O (G(n)). O(G(n)) = { F(n) : existem constantes positivas c e n0 tais que; 0<=F(n)<=cG(n) para todo n>= n0}. Usamos a notao O para dar um limite superior sobre uma funo, dentro de um fator constante. Para todos os valores n direita de n0, o valor da funo F(n) est em ou abaixo de G(n). 2.2.2. Cota Assinttica Inferior Da mesma forma que a notao O fornece um CAS, a notao Assinttica Inferior, para denotar que F(n) (G(n)). fornece uma Cota

(G(n)) = { F(n) : existem constantes positivas c e n0 tais que;

Os tpicos 2.2.1, 2.2.2 e 2.2.3 mostram matematicamente quais algoritmos so mais rpido do que outros por meio de expresses matemticas.

0<= c G(n)<= F(n) para todo n>= n0}. Para todos os valores n direita de n0, o valor de F(n) est em ou acima de G(n). 2.2.3. Limite Assinttico Para Toscani e Veloso (2008) e Cormen et. al.(2002), a notao define um Limite Assinttico exato e a partir da notao O e pode-se construir . Para duas funes quaisquer F(n) e G(n), temos F(n) (G(n)) se e somente se F(n) O(G(n)) e F(n) (G(n)). (G(n)) = {F(n): existem constantes positivas c1, c2 e n tais que; 0<= c1G(n)<=F(n)<= c2G(n) para todos n>n0}. Sendo assim, uma funo F(n) pertence ao conjunto (G(n)) se existem constantes positivas c1 e c2 tais que ela possa ser imprensada entre c1G(n) e c2G(n), para um valor de n suficientemente grande.

3. Caso de Uso entre algoritmos levando em considerao o tempo de execuo.


Visto alguns conceitos bsicos, cuja importncia se reflete, entre outros casos, no processo de se fazer a analise do comportamento assinttico e de tempo de execuo, utilizamos como ferramenta DEV C++, que um Ambiente de Desenvolvimento Integrado (IDE Integrated Development Environment), para fazer a analise. Para obter uma melhor preciso do tempo (temporizao) de execuo do algoritmo, a biblioteca Windows.h junto com suas funes QueryPerformanceFrequency e QueryPerformanceCounter tambm utilizada3. Ressalva-se que essa biblioteca ter o funcionamento anlogo se utilizado em outros sistemas operacionais. Os algoritmos de ordenao (Insertion sort, Quick sort e Heap sort) so utilizados para fazer a analise. Isso porque, eles constituem bons modelos para resolver problemas computacionais, alm de eles serem muito utilizados na vida cotidiana.
(...)Imagine como seria difcil utilizar um catlogo telefnico se os nomes das pessoas no estivessem listados em ordem alfabtica. A atividade de colocar as coisas em ordem est presente na maioria das aplicaes onde os objetos armazenados tm que ser pesquisados e recuperados, tais como dicionrios, ndices de livros, tabelas e arquivos. (ZIVIANI, 1999, p. 69).

O tempo de execuo do algoritmo analisado a partir do seguinte trecho de cdigo:

Para um aprofundamento na questo da biblioteca e suas funes indicamos, como busca, o sitio: http://support.microsoft.com/?ln=pt-br.

Algoritmo 1 Tempo De Execuo/Ao


/* ir obter a frequncia do timer: */ QueryPerformanceFrequency((LARGE_INTEGER *)&freq); /* ir obter o numero de ticks: */ QueryPerformaceCounter ((LARGE_INTEGER *)&start); /* ... Trecho de cdigo a ser analisado Insertion sort, Quick sort e Heap sort. */ como, a exemplo,

/* ir ver qual foi o numero de ticks que utilizou na sua execuo: */ QueryPerformanceCounter ((LARGE_INTEGER *)&stop);

algoritmo

/* ir obter o resultado em Milissegundos: */ tempo = ((double)stop-(double)start) / (double)freq;

As anlises feitas com os algoritmos de ordenao pelos autores Toscani e Veloso (2008); Cormen et. al. (2002) e Ziviani (1999), so estudadas e apresentadas logo abaixo. De acordo com esses estudiosos, o tempo de execuo no pior caso do Insertion sort, Quick sort so de (n). Isso porque, este possui pior caso quando ordenado em ordem inversa; j o Quick sort, a sua pior execuo est relacionado como a sua partio4 feita. Ressalta-se o fato de ele possuir tempo de execuo media de (nlogn). O Heap sort utiliza uma estrutura de dados chamada heap (monte), para armazenar e manipular informaes durante a sua execuo. Este desempenha tanto no pior caso quanto no caso mdio complexidade (nlogn), por isso ele figura como uma boa escolha, pois alguns algoritmos de ordenao rpidos possuem tempo de execuo grande em cenrio ruim. As tabelas5 seguintes mostram o tempo de execuo em milissegundos versus o tamanho da entrada n, para o algoritmo Insertion sort, Quick sort e Heap sort. Eles so analisados em tempo de execuo em milissegundos na ordem aleatria, crescente e descendente para entradas 10000, 50000 e 100000.

Entrada 10000 50000 100000

Insertion sort 0.14018 ms 3.399 ms 13.550 ms

Quick sort 0.00135 ms 0.00735 ms 0.01588 ms

Heap sort 0.0028 ms 0.01664 ms 0.03654 ms

Tabela 1. Valores aleatrios com tempo de execuo em milissegundos.

A partio do Quick sort definir a eficincia do processo de ordenao. Os resultados das tabelas foram obtidos a partir das manipulaes das funes QueryPerformanceFrequency e QueryPerformanceCounter da biblioteca Windows.h, discutida neste artigo.
5

Entrada 10000 50000 100000

Insertion sort 0.26955 ms 6.71530 ms 26.531 ms

Quick sort 0.00071 ms 0.00360 ms 0.00726 ms

Heap sort 0.00224 ms 0.01293 ms 0.02746 ms

Tabela 2. Valores decrescentes com tempo de execuo em milissegundos. Entrada 10000 50000 100000 Insertion sort 0.00016 ms 0.00061 ms 0.00092 ms Quick sort 0.00065 ms 0.00336 ms 0.00690 ms Heap sort 0.00356 ms 0.02132 ms 0.04457 ms

Tabela 3. Valores crescentes com tempo de execuo em milissegundos. O tpico 4, Consideraes Finais, apresenta um resultado similar ao do pesquisador Ziviani (1999), que utilizou cinco mtodos de ordenao, no qual foram estudados dois mtodos simples (Seleo e Insero) que requerem O(n2) comparaes e trs mtodos eficientes (Shellsort, Quicksort e Heapsort) e que demandam O(nlogn) comparaes. O tamanho das entradas utilizadas por ele foram 500, 5000, 10000 e 30000, para todos os algoritmos. Os desempenhos desses algoritmos foram, por ele, apresentados em tabelas e analisados na ordem aleatria, ascendente e descendente, dessa forma, tm-se quadros comparativos do tempo real para os algoritmos de ordenao.

4. Consideraes Finais
Analisando os dados das tabelas 1, 2 e 3 obtemos a seguinte concluso: medida que a entrada n cresce, o seu tempo de execuo acompanha o aumento. notrio que o Insertion sort mais rpido quando ele est em ordem crescente - melhor caso O(n) -, e mais lento quando ele executado em ordem decrescente e aleatria - O(n). O Quick sort executado em ordem aleatria e decrescente o mais rpido de todos, mesmo no seu pior caso O(n). A melhor forma de o pior caso ter menos probabilidade de ocorrer fazendo uma boa escolha do piv. Por ele utilizar a estratgia de dividir para conquistar (recursiva) necessrio ter em mente - para entrada bastante grande (n > 1000000) - que o estouro da pilha pode acontecer. O Heap Sort ao contrrio do Quick sort no precisa de nenhuma memria adicional. Destaca-se que ele mantm tempo de execuo estvel, independente da sua arrumao, ou seja, tanto no pior, mdio ou melhor caso de O(nlogn). Para aplicaes em que o tempo de execuo no poder variar dramaticamente o Heap sort mostrou ser uma boa escolha, visto que o seu tempo de execuo no sensvel a ordenao. Os algoritmos de ordenao servem como base para observar como os mesmos se comportam para determinadas entradas. Outros algoritmos podero ser analisados da mesma maneira, seguindo um modelo matemtico.

Referncias
CORMEN, Thomas H.; ET. AL. Algoritmos: teorias e prticas. Rio de janeiro: Elsevier, 2002. MICROSOFT, Suporte. Disponvel em <http://support.microsoft.com/?ln=pt-br>. Acesso em 6 de fev, 2011. TOSCANI, Laira Vieira; VELOSO, Paulo A. S. Complexidade de Algoritmos. 2. ed. UFRGS, Bookman, 2008. ZIVIANI, Nivio. Projeto de Algoritmos com Implementaes Pascal e C. 4. ed. So Paulo: Pioneira, 1999.

S-ar putea să vă placă și