Sunteți pe pagina 1din 10

Alexandre S. Ferreira, Gilson V. Guimares e Henrique E. Viana alex_o.0_4fun@hotmail.com, gilsonmsm@hotmail.com, hv5088@gmail.

com Universidade Estadual/Federal Palavras-chave: Ordenao, algoritmo, matriz, quick, cocktail, sort Resumo: Explicaremos a histria e o funcionamento de dois algoritmos de ordenao, o Quick Sort e o Cocktail Sort. Introduo Algoritmo de ordenao em cincia da computao um algoritmo que coloca os elementos de uma dada sequncia em uma certa ordem -- em outras palavras, efetua sua ordenao completa ou parcial. As ordens mais usadas so a numrica e a lexicogrfica. Existem vrias razes para se ordenar uma sequncia. Uma delas a possibilidade se acessar seus dados de modo mais eficiente. Materiais e Mtodos Quicksort O algoritmo Quicksort um mtodo de ordenao muito rpido e eficiente, inventado por C.A.R. Hoare em 1960, quando visitou a Universidade de Moscovo como estudante. Naquela poca, Hoare trabalhou em um projeto de traduo de mquina para o National Physical Laboratory. Ele criou o Quicksort ao tentar traduzir um dicionrio de ingls para russo, ordenando as palavras, tendo como objetivo reduzir o problema original em subproblemas que possam ser resolvidos mais fcil e rapidamente. Foi publicado em 1962 aps uma srie de refinamentos.

O algoritmo: O Quicksort adota a estratgia de diviso e conquista. A estratgia consiste em rearranjar as chaves de modo que as chaves "menores" precedam as chaves "maiores". Em seguida o Quicksort ordena as duas sublistas de chaves menores e maiores recursivamente at que a lista completa se encontre ordenada. Os passos so: 1. Escolha um elemento da lista, denominado piv; 2. Rearranje a lista de forma que todos os elementos anteriores ao piv sejam menores que ele, e todos os elementos posteriores ao piv sejam maiores que ele. Ao fim do processo o piv estar em sua posio final e haver duas sublistas no ordenadas. Essa operao denominada partio; 3. Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores; A base da recurso so as listas de tamanho zero ou um, que esto sempre ordenadas. O processo finito, pois a cada iterao pelo menos um elemento posto em sua posio final e no ser mais manipulado na iterao seguinte. Complexibilidade Complexidade de tempo: (n lg2 n) no melhor caso e no caso mdio e (n2) no pior caso; Complexidade de espao: (lg2 n) no melhor caso e no caso mdio e (lg2 n) no pior caso. R. Sedgewick desenvolveu uma verso do Quicksort com partio recurso de cauda que tem complexidade (n2) no pior caso.

Pseudocdigo procedimento QuickSort(X[], IniVet, FimVet) var i, j, pivo, aux incio i <- IniVet j <- FimVet pivo <- X[(IniVet + FimVet) div 2] repita | enquanto (X[i] < pivo) faa | | i <- i + 1 | fimEnquanto | enquanto (X[j] > pivo) faa | | j <- j - 1 | fimEnquanto | se (i <= j) ento | | aux <- X[i] | | X[i] <- X[j] | | X[j] <- aux | | i <- i + 1 | | j <- j - 1 | fimSe | enquanto (i < j) | | se (j > IniVet) ento | | | QuickSort(X, IniVet, j) | | fimSe | | se (i < FimVet) ento | | | QuickSort(X, i, FimVet) | | fim | fimEnquanto fim

Quicksort Paralelo - Anlise Supondo que o piv escolhido sempre a mediana, o algoritmo far n comparaes na primeira partio. No segundo nvel de recursividade sero feitas duas parties, cada uma de tamanho n/2; no total sero tambm feitas n comparaes. Entretanto, como as parties so feitas simultaneamente, o tempo gasto ser proporcional a n/2. No terceiro nvel, teremos quatro parties simultneas, cada uma de tamanho n/4, e assim por diante. Desta forma, o tempo total gasto ser dado pela soma: Temos portanto um Sort com complexidade (para o melhor caso) de melhor do que o limite de para algoritmos sequenciais. ,

Vantagens do Quicksort paralelo


1 - Considerado dos algoritmos mais rpidos. 2 - Tem concorrncia natural. 3 - No necessrio haver sincronizao.

Desenvolvimento:
1 - Valores divididos ao longo dos processos. 2.1 - Escolha do piv. 2.2 - Divulgao do piv por cada processo.

3 - Diviso dos nmeros de cada processo por duas listas. 4 - Troca de sub-listas entre processos.

5 - Nova recurso.

6 - Chamada do Quicksort sequencial por cada processo.

Eficincia:
Para p processadores, possvel dividir a lista de n elementos em p sublistas em O(n) Em relao ordenao, esta ser de O((n/p)*log(n/p).

Melhoria:
O tempo de execuo do algoritmo comea quando o primeiro processo comea a sua execuo, e termina quando o ltimo processo termina a sua execuo. Poderia ser feito um melhor balanceamento se fosse escolhido um piv perto da mediana dos valores, garantindo maior diviso de trabalho pelos processos.

Cocktail Cocktail sort, tambm conhecido como Shaker Sort, Bubble Sort Bidirecional , ripple sort, shuttle sort ou happy hour sort, uma variao do bubble sort que tanto um algoritmo de ordenao estvel quanto uma ordenao por comparao. O algoritmo difere do bubble sort pelo fato de ordenar em ambas as direes em cada passagem atravs da lista. Funcionamento: A ideia percorrer o vetor diversas vezes indo e voltando, e a cada passagem colocar no topo o maior elemento da sequncia e no fundo o menor elemento respectivamente. Na ida se o elemento i+1 for menor que o elemento i, troca-se a posio e diminui-se em 1 unidade o top. Na volta se o elemento i-1 for maior que o elemento i, troca-se a posio e incrementasse o bot. Faz-se isso at que o top e bot sejam iguais. Pior Caso Melhor Caso Caso mdio (n) O(n) (n)

Pseudo-Cdigo: procedure cocktailSort( A : list of sortable items ) defined as: do swapped := false for each i in 0 to length( A ) - 2 do: if A[ i ] > A[ i + 1 ] then // test whether the elements are in the wrong order swap( A[ i ], A[ i + 1 ] ) // let the two elements change places swapped := true end if end for if swapped = false then // we can exit the outer loop here if no swaps occurred. break do-while loop end if swapped := false for each i in length( A ) - 2 to 0 do: if A[ i ] > A[ i + 1 ] then swap( A[ i ], A[ i + 1 ] ) swapped := true end if end for while swapped // if no elements have been swapped, then the list is sorted end procedure

Benchmark comparativo Fizemos um Benchmark que compara o Quicksort com o Cocktailsort, o algoritmo foi feito em java, e est consideravelmente optimizado, usou-se uma maquina com um processador celeron @585 (1 core, 1 thread, FSB 667mhz, cache l2 1 MB) com 2 GB de memoria RAM, usando um sistema Windows Seven - Compilao 7601. Ordenando 5000 elementos, com uma bateria de testes de 1000 testes:

Ordenando 50 elementos, com uma bateria de testes de 1000 testes:

Observamos que, no primeiro Benchmark com 5000 elementos, o Quicksort obteve uma eficincia muito maior que o Cocktailsort, j no segundo Benchmark, com 50 elementos, o Cocktailsort se mostrou mais eficiente. Assim conclumos que o Quicksort muito mais eficiente que o Cocktailsort. Porm, para uma quantidade pequena de elementos a serem ordenados, o Cocktailsort se mostra mais eficiente que o Quicksort, chegando a concluso que o Quicksort no eficiente para ordenar uma pequena quantidade de elementos.

Consideraes finais Neste artigo conclumos que o Quicksort realmente eficiente, em contra partida o Cocktailsort assim como o Bubblesort faz verificaes que no so necessrias pois no seguem a estratgia de diviso e conquista, que utilizada no Quicksort que faz com que seu desempenho seja superior.

Referncias [1] Wikipdia, a enciclopdia livre: Algoritmo de Ordenao. Disponvel em:http://pt.wikipedia.org/wiki/Algoritmo_de_ordena %C3%A7%C3%A3o . Acessado em 20/06/2011. Wikipdia, a enciclopdia livre: Algoritmo de Ordenao. Disponvel em:http://pt.wikipedia.org/wiki/Cocktail_sort. Acessado em 20/06/2011. Wikipdia, a enciclopdia livre: Algoritmo de Ordenao. Disponvel em:http://pt.wikipedia.org/wiki/Quicksort . Acessado em 20/06/2011 Grupo Algos, optimizao e simulao de algoritmos: anlise do Quicksort. disponvel em: http://homepages.dcc.ufmg.br/~vado/cursos/sisop971/aulas/notas/nod e126.html . Acessado em 24/06/2011 Blog do professor Osvaldo Sergio F. de Carvalho: Algoritmos de Ordenao. Disponvel em: http://algos.inescid.pt/~jcm/cpd/papers/2a5/Sorting.ppt . Acessado em 24/06/2011

[2] [3] [4]

[5]

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