Documente Academic
Documente Profesional
Documente Cultură
: 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.
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.
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.
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
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.
Para um aprofundamento na questo da biblioteca e suas funes indicamos, como busca, o sitio: http://support.microsoft.com/?ln=pt-br.
/* ir ver qual foi o numero de ticks que utilizou na sua execuo: */ QueryPerformanceCounter ((LARGE_INTEGER *)&stop);
algoritmo
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.
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
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.