Vous êtes sur la page 1sur 6

Scientific Research and Essay Vol. 4 (8), pp. 740-744, Agosto de 2009 Disponvel online em http://www.academicjournals.

org/SRE ISSN 1922-2248 2009 Academic Journals

Artigo Completo de Pesquisa.

Melhorando o desempenho do bubble sort usando um mtodo de Shell modificado


Oyelami Olufemi Moses
Departamento de Cincias da Informao e Computao, Covenant University, P. M. B. 1023, Ota, Ogun State, Nigeria. Email: olufemioyelami@yahoo.com ou olufemioyelami@gmail.com. Tel.: +234-8055344658.
A Ordenao implica na reorganizao das informaes tanto em ordem crescente como decrescente. Existem muitos algoritmos de ordenao, entre eles est o Bubble Sort (Ordenao em Bolha). O Bubble Sort conhecido por no ser um bom algoritmo de ordenao por estar envolvido com comparaes redundantes. No entanto, esforos tm sido feitos a fim de melhorar o desempenho do algoritmo. Com o Bidirectional Bubble Sort (Ordenao bidirecional em bolha) a mdia de comparaes levemente reduzida. O Batchers Sort (Algoritmo de Batcher Autor do Algoritmo), similar ao Shellsort (Ordenao de Shell Autor do Algoritmo), tambm funciona significativamente melhor que o Bidirectional Bubble Sort por realizar comparaes de uma forma diferente de modo que no sejam necessrias propagaes de trocas. O Bitonics Sort (A.k.a Parallel Sort Ordenao Paralela) tambm foi mostrado por Batcher e o ponto forte deste procedimento de organizao que se adqua muito bem em implementaes de redes com fios ordenadas. Esse artigo apresenta um algoritmo descritivo chamado Oyelamis Sort(Ordenao de Oyelami Autor do Artigo e do Algoritmo) que combina a tcnica do Bidirectional Bubble Sort com o mtodo de Shell. Os resultados obtidos da implementao do algoritmo comparado com o Batchers Odd-Even Sort(Ordenao mpar-Par de Batcher) e o Batchers Bitonic Sort mostraram que o algoritmo desempenhou-se melhor do que estes dois, no pior cenrio possvel. A concluso que o algoritmo mais rpido. Palavras-Chave: Algoritmo, ordenao, Bubble Sort, Bidirectional Bubble Sort, Batchers Sort, Oyelamis Sort, pior cenrio, trocas, comparaes.

INTRODUO Utilizar computadores para solucionar diferentes situaes implica em mostr-los quais etapas eles devem seguir para solucionar estas situaes. As etapas que devem ser seguidas so chamadas de algoritmo. Um algoritmo uma sequncia limitada de instrues com uma quantidade limitada de solues em uma quantia limitada de tempo. (William, 2005; Alfred et al., 2002). Algoritmos so extremamente importantes na programao de computadores, contudo, um algoritmo pode ser intil mesmo que esteja correto e resulte nas sadas (Outputs) desejadas. Isso acontece quando o algoritmo exige recursos e tempo intolerveis para o domnio em que se encontra. Instrues podem ser executadas quantas vezes necessrias, desde que estas instrues indiquem a elas mesmas a repetio. No entanto, no importam quais valores de entradas sero assumidos, um algoritmo sempre acaba depois de executar um nmero limitado de instrues. Um programa , portanto, um algoritmo, na medida em que este no execute Loops (Ciclos) infinitos em qualquer valor de entrada (Sara e Allen, 2000). As cinco importantes caractersticas de um algoritmo so (Donald, 1997):

I.)

Finitude (Limitabilidade): Um algoritmo sempre deve terminar aps um nmero limitado de etapas. II.) Entrada (Input): Um algoritmo tem zero ou mais entradas valores que so definidos antes do algoritmo iniciar ou dinamicamente, conforme o algoritmo executado. III.) Definibilidade: Cada passo de um algoritmo deve ser precisamente definido; As aes a serem realizadas devem ser rigorosamente especificadas para cada situao. IV.) Sada (Output): Um algoritmo possui uma ou mais sadas valores que tem conexo especfica com as Entradas (Inputs). V.) Eficcia: Geralmente supe-se que um algoritmo ser eficaz, no sentido de que suas operaes devem ser suficientemente bsicas de modo que possam ser solucionadas por completo em um espao limitado de tempo por algum usando papel e caneta.

A ordenao um processo que reorganiza os registros de uma fila de valores em uma sequncia que separada em vrias chaves (posies de um vetor). Ordenaes organizam um conjunto de dados tanto em ordem crescente como decrescente (Yedidjah and Aaron, 2003; Frank, 2004). As ordenaes podem ser categorizadas de duas formas: Ordenaes Internas e Externas. As ordenaes internas exigem que todo o conjunto de dados caiba na memria principal do computador, enquanto nas ordenaes externas, os dados, coletivamente, no cabero na memria principal de uma s vez, mas devero residir em armazenamentos auxiliares, como o disco rgido (Yedidjah and Aaron, 2003; Frank, 2004; Shola, 2003). Algoritmos de ordenao para computadores seriais (random access machines ou RAMs) permitem a execuo de apenas uma operao por vez. Nos algoritmos de ordenao baseados no modelo computacional de comparaes em rede, diversas comparaes podem ser executadas simultaneamente. Comparaes em rede se diferem das RAMs em dois importantes aspectos. Primeiro, os modelos RAMs s podem realizar comparaes. Segundo, diferente do modelo RAM, cujas operaes ocorrem em srie, ou seja, uma aps a outra, operaes em redes de comparaes podem ocorrer ao mesmo tempo ou em paralelo. Uma rede de ordenaes uma rede de comparaes no qual a sequncia de sada aumenta monotonicamente (Ou seja, ) para cada sequncia de entrada (Thomas et al., 2003). O mtodo de Shell, como usado no Shellsort, oferece um simples e eficiente algoritmo de ordenao. Este algoritmo aprimora-se na Insertion Sort (Ordenao de Inseres) por reduzir o numero de inverses e comparaes feitas nos elementos a serem ordenados. Ele ordena um array (vetor) A com n elementos dividindo-o em subseqncias e ordena as subseqncias. Isso chamado de ordenao decrescente (Procurar definio correta) de incrementos (Diminishing increment sorting ou mtodo de Shell vide ttulo do Artigo) porque os incrementos continuam a diminuir de um passo para o outro at que o ltimo incremento seja 1. O Bubble Sort um tipo de ordenao interna que compara elementos adjacentes e os permuta se estes esto fora de ordem e continua at que a sequncia de valores estejam ordenados (Frank, 2004; Robert, 1998). De qualquer forma, o Bubble Sort no um algoritmo eficiente, pois um algoritmo de ordenao com consumo de tempo quadrtico (Exponencial). No entanto, esforos tm sido feitos a fim de melhorar o desempenho do algoritmo. Com o Bidirectional Bubble Sort a mdia de comparaes levemente reduzida. O Batchers Sort, similar ao Shellsort, tambm funciona significativamente melhor que o Bidirectional Bubble Sort por realizar comparaes de uma forma diferente de modo que no sejam necessrias propagaes de trocas. O Bitonics Sort tambm foi mostrado por Batcher e o ponto forte deste procedimento de organizao que se adqua muito bem em implementaes de redes com fios ordenadas. Este Artigo apresenta um algoritmo que combina as tcnicas do Bidirectional Bubble Sort com um modificado

mtodo de Shell para melhorar o Bubble Sort. Os resultados obtidos da implementao do algoritmo comparada com o Batchers Odd-Even Sort e o Bitonic Sort mostrou que o algoritmo o mais rpido dos trs.

MTODOS E MATERIAIS O Oyelamis Sort foi desenvolvido atravs de um modificado mtodo de Shell como usado no Shellsort e, em seguida, aplicado nos elementos a serem ordenados antes de aplicar o Bidirectional Bubble Sort. Devemos levar em conta que o tipo de mtodo de Shell usado diferente do usado no Shellsort, mas como o usado por Oyelami (2008) e Oyelami et al. (2007).

Bubble Sort Para entender como o Bubble Sort funciona, considere um array contendo elementos serem ordenados. Ns passamos pelo array e pegamos o menor elemento e o colocamos na posio 1. Esse o primeiro passo. Ns olhamos os elementos restantes desde a posio 2 at a ltima posio e pegamos o menor elemento colocando-o na posio 2 e assim sucessivamente, at que todos os elementos estejam ordenados. Por exemplo, considere os nmeros abaixo: 8 4 3 2

A Figura 1 mostra uma representao ilustrativa de como a ordenao ser realizada.

Refinamentos no Bubble Sort

Houve algumas melhorias no Bubble Sort como discutidas abaixo:

Bidirectional Bubble Sort O Bidirectional Bubble Sort tambm conhecido como Cocktail Sort ou Shaker Sort uma variao do Bubble Sort que tanto um algoritmo estvel de ordenao como de comparao. O algoritmo se diferencia do Bubble Sort nessas ordenaes em ambos os sentidos que percorre o array (O vetor percorrido em idas e voltas at que os valores estejam ordenados). A mdia de comparaes diminui levemente em razo desta abordagem (Donald, 1998). Este algoritmo de ordenao apenas um pouco mais difcil que o Bubble Sort na implementao e resolve o problema com as chamadas Turtles (Tartarugas Lentides quadrticas) no Bubble Sort. Considere para esta situao de ordenao o mesmo conjunto de nmeros usado para o Bubble Sort: 8 4 3 2

O algoritmo faz a mesma ordenao como vista na Figura 2. Ocorrem 7 comparaes e 6 trocas no total.

Figura 3. Demonstrao do Batchers Odd and Even Merge Sort. Batchers Odd and Even Merge Sort (Ordenao de mistura mpar-Par de Batcher) Se voc possui uma lista de chaves (ou Keys posies do vetor) dispostas da esquerda para a direita, e voc ordena a metade esquerda e a metade direita da lista, separadamente, e logo aps ordena as chaves de posies pares da lista e depois as chaves de posies mpares da lista, ento tudo o que voc precisa fazer comparar e trocar cada posio par (da esquerda para a direita) com a chave de posio mpar logo sua direta, e voc ter ordenado completamente a lista. O algoritmo pode ser resumido da seguinte forma: Ordene o algoritmo em 2m chaves (m = metade do nmero de chaves) onde dever ordenar a metade esquerda e ordenar a metade direita; Ento misture as duas metades, podendo descrever o passo de mistura como Mistura de 2m chaves, onde misturamos m chaves mpares com m chaves pares. Em seguida, comparramos e trocamos cada chave par com a chave mpar direita. Para uma explicao de como Batchers Sort funciona, suponha os nmeros 8,4,3 e 2 mostrados acima. Os nmeros so ordenados como mostrado na Figura 3. Ao todo, ocorrem 5 comparaes e 4 trocas, mostrando a superioridade do Batchers Sort sobre o Bidirectional Bubble Sort. Bitonic Sort9 Uma sequncia Bitnica (Traduo Livre) uma que monotonicamente aumenta e monotonicamente diminui. Um ordenador Bitnico composto de diversos estgios, cada um deles chamado de Half-Cleaner (Sem traduo direta So as metades bitnicas da metade anterior). Cada Half-Cleaner uma rede de comparao de profundidade 1 em que a linha de Entrada i comparada com a linha i + n/2 para l = 1, 2, ... n/2 (assume-se que n par n nmero de elementos no array). Por combinar os Half-Cleaners recursivamente (Divises sucessivas do vetor) , um ordenador Bitnico pode ser construdo, que uma rede que ordena sequncias Bitnicas (Thomas et AL., 2003). Para demonstrar como o Bitonic Sort funciona, considere a situao habitual de ordenao dos nmeros 8, 4, 3 e 2. Os nmeros so ordenados da seguinte forma:

Figura 1. Demonstrao do Bubble Sort.

Figura 2. Demonstrao do Bidirectional Bubble Sort.

Os Half-Cleaners so usados nos passos 1 e 2, e as Bitonic Mergers (misturas bitnicas) so usadas nos passos 3 e 4.

Sort.

O Bidirectional Bubble Sort aplicado a partir do (*) para ordenar os elementos que so adjacentes, como mostrados na Figura 4. Uma vez que nenhuma troca ocorra, o algoritmo para, eliminando a necessidade de percorrer o array novamente na ida ou na volta. Ao todo, 5 comparaes foram realizadas e apenas 2 trocas. Isso mostra que o algoritmo se sobressai melhor que o de Batcher que possui 5 comparaes e 4 trocas. Quando comparado com o Bitonics Sort (6 comparaes e 4 trocas) ele tambm se sobressai melhor. Apresentamos o algoritmo a seguir: Ao todo, ocorrem 6 comparaes e 4 trocas. Oyelamis Sort (array, size) Begin 1. i = 1 2. j = size 3. while (i < j) do begin 4. if array[i] > array[j] swap (array, i, j) 5. i = i + 1 6. j = j 1 end [Chama o Bidirectional Bubble Sort para ordenar os elementos adjacentes] 7. Bidirectional Bubble Sort (A, size:int) End Anlise de Desempenho dos Algoritmos O atributo mais importante de um programa/algoritmo a sua validao/consistncia (Correctness Sem traduo direta). Algoritmos que no geram sadas (Outputs) corretas so inteis. No entanto, algoritmos corretos tambm podem ser de pouca utilidade. Isso acontece muitas vezes quando o algoritmo/programa leva mais tempo do que o esperado pelo usurio para executar ou quando ele usa muito mais memria do que a disponvel no computador. (Sartaj, 2000). O desempenho de um programa ou de um algoritmo a quantidade de tempo e a quantidade de memria necessria para executar o programa/algoritmo. Existem dois mtodos que so normalmente utilizados na anlise de um algoritmo: I.) Mtodo analtico. II.) Mtodo experimental. No mtodo analtico, os fatores de tempo e requisitos de espao de que um programa depende so identificados e seus contributos/contribuies/requisitos (Contributions Sem traduo direta) so determinados. Mas uma vez que esses fatores no so conhecidos no momento em que o programa escrito, uma analise precisa de tempo e requisitos de espao no podem ser feitas. O mtodo experimental lida justamente com a execuo do experimento e a medio do espao e tempo usados pelo programa. Duas abordagens generalizadas para estimativa de tempo de execuo so (Sartaj, 200):

O Algoritmo Proposto (Oyelamis Sort) Este algoritmo de ordenao proposto divide os elementos a serem ordenados em subseqncias assim como o Shellsort faz, mas, primeiro de tudo, compara o primeiro elemento com o ltimo. Se o ltimo menor que o primeiro, os dois trocam de posio, seno, permanecem em suas posies. Depois, o segundo elemento comparado com o penltimo e, se o penltimo elemento menor do que o segundo, eles so trocados. Caso contrrio, eles mantm suas posies. Esse processo continua at que os ltimos dois elementos centrais so comparados ou at que sobre apenas um elemento no centro. Depois, o Bidirectional Bubble Sort aplicado para ordenar os elementos adjacentes. Essa abordagem reduz o nmero de comparaes e inverses realizadas significativamente. Considere o pior cenrio de ordenao dos elementos a seguir usados para o Batchers Sort e o Bitonic Sort em ordem crescente: 8 4 3 2

O algoritmo funciona assim:

Figura 4. Demonstrao do Oyelamis

I.) Identificar uma ou mais operaes principais e determinar o nmero de vezes que elas so executadas. Anlise dos algoritmos de ordenao no pior, melhor e mdio casos. O pior cenrio ocorre em um algoritmo de ordenao quando os elementos a serem ordenados esto na ordem contrria ( ). O melhor caso acontece quando os elementos j esto ordenados ( ). O caso mediano pode ocorrer quando parte dos elementos j esto ordenados ( , Exemplo: 1, 2, 4, 3). O caso mediano tem seus dados distribudos aleatoriamente na lista de valores (William e William, 2002). O caso mediano pode no ser fcil para determinar pelo fato de que nem sempre possvel determinar o quanto disperso ficaram as Inputs (Valores que entraram). O foco est sempre em buscar os piores casos de tempo de execuo para quaisquer Inputs de tamanho n devido aos seguintes motivos (Thomas et al., 2003): I.) O pior caso de tempo de execuo de um algoritmo o maior limite de tempo de execuo que pode ser atingido pelo algoritmo para quaisquer Inputs. Conhecendo este fato nos d a garantia de que o algoritmo nunca levar mais tempo que o limite

II.) Determinar o nmero total de etapas executadas pelo programa mximo que pode atingir. Ns no precisamos dar palpites sobre o tempo de execuo e torcer para que o tempo de execuo nunca fique pior. II.) Para alguns algoritmos, os piores casos ocorrem com bastante freqncia. Por exemplo, pesquisando o banco de dados por uma parte especfica de uma informao, os piores casos do algoritmo de busca ocorrero quando a informao no se encontra no banco de dados. Em muitas aplicaes de busca, pesquisas por informaes inexistentes podem ser frequentes. III.) Muitas vezes, os casos medianos to piores quanto os piores casos. Anlise do algoritmo proposto Geralmente, o tempo de execuo de um algoritmo de ordenao proporcional ao nmero de comparaes que o algoritmo efetua, ao nmero de vezes que os elementos so movidos ou trocados. A abordagem usada neste Artigo a medio do nmero de comparaes e trocas realizadas por cada algoritmo (Batchers Sort, Bitonic Sort, e Oyealmis Sort) no pior cenrio possvel.

Tabela 1. Comparaes de desempenho do Batchers Odd-Even Sort, Bitonic Sort e Oyelamis Sort:

RESULTADOS E DISCUSSES A Tabela 1 mostra os resultados obtidos. De acordo com os resultados, o algoritmo proposto tem menos comparaes e trocas quando comparado com ambos os algoritmos. Os resultados tambm mostram que conforme o tamanho de entradas (Tamanho do Array) aumenta, o algoritmo proposto tende a ser mais eficiente e, tanto o Batchers Odd-Even Sort como o Bitonic Sort no so bons para muitos valores de entrada. A concluso disso que o algoritmo proposto mais rpido e, sendo assim, mais eficiente. O algoritmo tambm recomendado para ordenar grandes quantidades de Inputs. Concluso O Bubble Sort conhecido por no ser um bom algoritmo de ordenao por estar envolvido com comparaes redundantes. No entanto, esforos tm sido feitos a fim de melhorar o desempenho do algoritmo. Com o Bidirectional Bubble Sort a mdia de comparaes levemente reduzida. O Batchers Sort, similar ao Shellsort, tambm funciona significativamente melhor que o Bidirectional Bubble Sort por realizar comparaes de uma forma diferente de modo que no sejam necessrias propagaes de trocas. Este Artigo foi bem aprimorado em relao ao Batchers Sort usando as tcnicas do Bidirectional Bubble Sort e do mtodo de Shell. Os testes com o algoritmo proposto e o Batchers Sort mostraram que o algoritmo proposto mais eficiente. O algoritmo recomendado para todos os tamanhos de elementos a serem ordenados, mas muito mais eficiente conforme o nmero elementos a serem sorteados aument

REFERNCIAS Alfred V, Aho J, Horroroft, Jeffrey DU (2002). Data Structures and Algorithms (India: Pearson Education Asia). Donald EK (1997). The Art of Computer Programming, Volume I,Fundamental Algorithms; Third Edition. US: AddisonWesley. Donald EK (1998). The Art of Computer Programming, Volume 3,Sorting and Searching, Second Edition. Addison-Wesley. Frank MC (2004). Data Abstraction and Problem Solving with C++. US: Pearson Education, Inc. Oyelami MO (2008). A Modified Diminishing Increment Sort for Overcoming the Search for Best Sequence of Increment for Shellsort. J. Appl. Sci. Res., 4 (6): 760- 766. Oyelami MO, Azeta AA, Ayo CK (2007). Improved Shellsort for the Worst-Case, the Best-Case and a Subset of the Average-Case Scenarios. J. Comput. Sci Appl. 14 (2): 73- 84. Robert S (1998). Algorithms in C. Addison-Wesley Publishing Company, Inc. Sara B, Allen G (2000). Computer Algorithms. US: Addison Wesley Longman. Sartaj S (2000). Data Structures, Algorithms and Applications in Java. McGrawHill. Shola PB (2003). Data Structures With Implementation in C and Pascal. Nigeria: Reflect Publishers. Thomas HC, Charles EL, Ronald LR, Clifford S (2003). Introduction to Algorithms. The Massachusetts Institute of Technology. William F, William T (2002). Data Structures With C++ Using STL. Prentice Hall. William JC (2005). Data Structures and the Java Collections Framework (US: The McGrawHill Companies, Inc). Yedidjah L, Moshe A, Aaron MT (2003). Data Structures Using Java. US: Pearson Education, Inc.

Vous aimerez peut-être aussi