Sunteți pe pagina 1din 5

TRABALHO SORTING ALGORITHMS Palavras-chave: Ordenao, Counting Sort, Radix Sort.

Resumo: Neste artigo so apresentados dois algoritmos de ordenao: Counting Sort e Radix Sort. feita uma descrio do seu funcionamento, fazendo-se referncia a vantagens e desvantagens e problemas resultantes do seu uso. A ordenao um dos aspectos fundamentais das cincias computacionais. Tornase, ento, importante reduzir ao mximo a complexidade temporal dos algoritmos que lidam com este problema. As melhores ordenaes em srie normalmente demoram O(n log n), tempo que tende a agravar com o aumento do nmero de elementos. 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. Os algoritmos de ordenacao sao um campo frtil para estudo de complexidade computacional nos diferentes casos de entrada e implementao. Introduo Tanto o Counting Sort, como o Radix Sort, so algoritmos nos quais, o tempo de execuo proporcional ao nmero de elementos presentes no vetor. No utilizam nenhum tipo de operador de comparao, sendo que, o custo da operao dado por outras operaes, como: contagens, atribuies etc. Normalmente so utilizados para ordenar vetor de nmeros inteiros. So tambm considerados algoritmos de ordenao estveis, uma vez que eles preservam a ordem de entrada dos elementos, e no alteram nenhuma vez essa ordem durante sua execuo. Portanto, os valores do vetor dado como entrada no so permutados e sim inseridos no vetor de sada o nmero de vezes em que aparecem na entrada.

Counting Sort O Counting Sort ou ordenao por contagem, um algoritmo de ordenao linear. Sua execuo consiste em contar o nmero de vezes que uma determinada chave aparece no vetor. - Execuo:

O algoritmo recebe um vetor A, com elementos no intervalo {0,1,...,k} e ordena o vetor em tempo O(n+k). No utilizando nenhum tipo de comparao. O Counting Sort aloca um vetor auxiliar C com k elementos, todos inicializados como zero e, aps isso, percorre o vetor A. Para cada elemento x de A, C[x] incrementado em uma unidade. Aps isso, o valor de cada ndice de C corresponde ao nmero de vezes que o valor do ndice aparece em A. Tendo uma execuo em tempo de O(n). Quando o algoritmo monta todo o vetor C, ento A poder ser ordenado iterando sobre os valores em C e inserindo cada elemento y um total de C[y] vezes em um novo vetor (ou at mesmo em A). Tendo uma execuo em tempo de O(k). Com o vetor C preenchido, ele ser percorrido. Caso a posio possua o valor zero, esta ignorada. Caso seja diferente de zero, o algoritmo ir inserir o nmero no vetor e decrementar o nmero de vezes em C, at que ela chegue a zero novamente. - Pseudocdigo: Alocar um vetor C[k]; inicializar cada posio de C com 0; para cada item x do vetor de entrada: C[x] = C[x] + 1; total = 0; para x = 0 at k: c = C[x]; C[x] = total; total = total + c; Alocar um vetor de sada de tamanho n; para cada item x do vetor de entrada: armazena x na sada[C[x]] C[x] = C[x] + 1; retornar sada; Aps o primeiro loop, C[x] armazena o nmero de vezes em que x aparece no vetor de entrada. Aps o segundo loop, C armazena o nmero de itens menores ou iguais a x, e, aps o terceiro loop, C[x] armazena a prxima posio em que um item de chave x ser armazenado, logo, cada item ser movido para sua posio correta no vetor de sada. Um dos maiores problemas do Counting Sort, que ele no muito prtico para casos em que os elementos so nmeros muito grandes. Por exemplo, se o intervalo dos n elementos do vetor forem entre 1 e n, apenas a criao do vetor auxiliar ir levar um tempo de O(n) e o Counting Sort ir ser menos eficiente que o Insertion Sort. Neste caso tambm, o espao alocado para o vetor auxiliar ser de tamanho O(n) que maior do que qualquer espao alocado por qualquer outro algoritmo de ordenao.

Radix Sort O algoritmo Radix Sort ordena inteiros de acordo com seus dgitos, tratando individualmente durante sua ordenao. Os inteiros utilizados so chamados de chaves, porque podem estar associados a outros tipos de dados. Supem que as chaves so definidas em um sistema numrico e com uma certa quantidade de dgitos, e, as ordena, dividindo cada uma em dgitos individuais e comparando os dgitos que ocupam a mesma

posio de significncia. O Radix Sort possui dois tipos de implementao: Least Significant Digit (Dgito Menos Significante) e Most Significant Digit (Dgito Mais Significante). Como a maioria dos computadores digitais representam internamente seus dados no sistema binrio, ento, o processamento de dgitos de nmeros inteiros em binrio mais conveniente.

- Least Significant Digit Radix Sorts: Algoritmo de ordenao rpido e estvel. As chaves normalmente so nmeros representados em uma determinada base numrica. O processamento das chaves inicia no dgito menos significante, e procede at o dgito mais significante. Opera em tempo de O(nk), onde n o nmero de chaves, e k o tamanho da chave mdia. Esse tipo de desempenho para as chaves de tamanho varivel pode ser conseguido atravs do agrupamento das chaves de mesmo comprimento e realizando separadamente um Radix Sort para cada grupo. Durante sua execuo, cada chave primeiramente armazenada em estruturas denominadas de recipientes (conhecidos tambm por buckets) correspondentes ao dgito menos significativo e, cada recipiente preserva a ordem original em que os valores foram inseridos. Ento o algoritmo agrupa novamente esses valores, porm, em relao ao prximo valor menos significativo, e assim por diante, at no existirem mais valores para serem processados. Normalmente durante a fase de agrupamento das chaves, utiliza-se tambm o Bucket Sort ou o Counting Sort, que so eficientes para esse tipo de operao. - Most Significant Digit Radix Sorts: Normalmente utilizado para ordenar as chaves em ordem lexicogrfica. Diferente do LSD Radix Sort, o MSD Radix Sort no preserva necessariamente a ordem de insero das chaves duplicadas. Um MSD Radix Sort inicia processando as chaves a partir do dgito mais significante at o dgito menos significante, basicamente realizando a operao inversa ao do LSD Radix Sort. Algumas implementaes utilizam apenas um nvel de recipientes (buckets), outras utilizam mltiplos nveis de recipientes.

Anlises - Counting Sort: No melhor caso a complexidade do Counting Sort dependera de dois fatores. O primeiro a quantidade de valores de entrada x, ou seja, o tamanho de C. O segundo, a faixa em que se encontram os inteiros presentes no vetor a ser ordenado k, tendo assim uma complexidade (x + x). Portando, tem-se uma complexidade O(n), e quanto menor for k, mais prximo do melhor caso. No pior caso, observamos que por k ser um fator que influencia na complexidade, quanto maior o seu valor, maior a complexidade (x). Em contra partida, possui um tempo linear para qualquer que seja a entrada. - Radix Sort: O melhor caso no algoritmo Radix Sort acontece quando a quantidade de dgitos d constante e obedece as mesmas condies de melhor caso do Counting Sort, e a ordenao feita em tempo linear, com complexidade O(n). Por outro lado temos que a complexidade do Radix Sort dada por ((b/r)(n +2r)), onde n e a quantidade de nmeros, b a quantidade de dgitos e r um inteiro positivo qualquer, tal que r b.

Concluso Com a realizao deste trabalho podemos concluir que quando pretende-se utilizar um mtodo de ordenao, seja ele qual for, primeiramente deve-se analisar todas as variveis para que com isso possa encontrar um modelo de ordenao nico e que atenda melhor as suas necessidades. Com isso podemos entender que no existe um algoritmo de ordenao mais eficaz ou mais rpido do que outro algoritmo, o que existe so sistemas de ordenao que com a anlise do caso eles um algoritmo pode se tornar mais rpido do que outro. Referncias [1] COUNTING Sort Disponvel em: <http://en.wikipedia.org/wiki/Counting_sort>. Acesso em: 17 jun. 2011. ORDENAO em Tempo Linear Disponvel em: <http://www.ic.unicamp.br/~rezende/ensino/mo417/2010s2/Slides/Aula10.pdf>. Acesso em: 17 jun. 2011. ANALYSIS AND DESIGN OF ALGORITHMS Disponvel em: <www.csee.ogi.edu/class/cs532/08.pdf>. Acesso em: 17 jun. 2011. COUNTING Sort Disponvel em: <courses.csail.mit.edu/6.006/spring11/rec/rec11.pdf>. Acesso em: 17 jun. 2011. RADIX Sort Disponvel em: <http://en.wikipedia.org/wiki/Radix_sort>. Acesso em: 17 jun. 2011. RADIX Sort Disponvel em: <www.eecs.ucf.edu/courses/cop3502h/spr2007/sorting3.pdf>. Acesso em: 17 jun. 2011. ORDENAO de Dados Disponvel em: <www.inf.ufsc.br/~ronaldo/ine5384/19-

[2]

[3] [4] [5] [6]

[7]

OrdenacaoDados5.pdf>. Acesso em: 17 jun. 2011. [8] [9] RADIX Sort Disponvel em: <dinobrasilis.pro.br/radix.pdf>. Acesso em: 17 jun. 2011. RADIX e Bucket Sort Disponvel em: <cavmelo.files.wordpress.com/2010/11/radixebucketsort.pdf>. Acesso em: 17 jun. 2011.