Documente Academic
Documente Profesional
Documente Cultură
Radix sort
2.Motivao
2.1Definio do problema 2.1.1Descrio Informal O radix sort ou ordenao digital surgiu para resolver o problema de ordenao de cartes perfurados. Esses cartes possuam um nmero de colunas na qual era possvel uma perfurao em posies. Assim, eram examinadas as perfuraes coluna a coluna e de acordo com a posio da perfurao os cartes eram distribudos de
forma iterativa em p caixas c vezes, no final tnhamos os cartes ordenados. importante observar que enquanto ocorre a ordenao, ao longo do processo iterativo no se pode mudar a ordem das caixas. 2.1.2Definio Formal do Problema Entrada: Temos um conjunto de nmeros Questo: Como podemos ordenar esses nmeros (neste caso, sem comparaes)? Sada: Conjunto de nmeros ordenado
2.2Exemplo de instncia
Como podemos ordenar o seguinte conjunto de nmeros sem a necessidade de comparlos?
2 passo da iterao
080,044,015,176,076,009
0 -> 009 1 -> 015 2 3 4 ->044 5 6 7 -> 176,076 8 -> 080 9 ->
3 passo da iterao
009,015,044,176,076,080 0 -> 009,015,044,076,080 1 -> 176 67283945sada: 009,015,044,076,080,176
void RADIXSORT(int elemento[], int digito) { int i; int b[digito]; int maior = elemento[0]; int exp = 1; for (i = 0; i < digito; i++) { if (elemento[i] > maior) maior = elemento[i]; } while (maior/exp > 0) { int bucket[10] = { 0 }; for (i = 0; i < digito; i++) bucket[(elemento[i] / exp) % 10]++; for (i = 1; i < 10; i++) bucket[i] += bucket[i - 1]; for (i = digito - 1; i >= 0; i--) b[--bucket[(elemento[i] / exp) % 10]] = elemento[i]; for (i = 0; i < digito; i++) elemento[i] = b[i]; exp *= 10; } }
4.Anlise do Algoritmo
4.1Prova de corretude Considerando uma entrada qualquer de n nmeros e d dgitos, ao final da primeira iterao temos que o algoritmo ter ordenado os n nmeros em relao ao dgito menos significativo, assim por induo, temos que nas prximas iteraes o algoritmo ter ordenado os d-1 dgitos restantes, dos n nmeros, o que resultar na ordenao dos n nmeros.
4.2Demonstrao da complexidade
Quando cada dgito est numa base na qual seu valor varia de 0 a b-1 (exemplo, de 0 a 9), temos que cada passagem sobre os n nmeros de d dgitos, para sua ordenao, leva o tempo (n + b), como so d passagens, temos (d(n + b)) mas, d o nmero de dgitos dos nmeros que uma constante portanto, d*(n + b) = (n + b) = mx((n),(b)) que indica que o radix-sort pode ser executado em tempo linear.
4.Concluso e discusses
4.1 Vantagens e desvantagens do radix-sort - um dos algoritmos de ordenao mais rpidos -simples -intuitivo -pode ser bem custoso se for necessrio avaliar elementos com diferentes nmeros de dgitos -pode requerer diferentes implementaes dependendo do tipo de dado
5.Referncias Bibliogrficas
1.Radix Sort. (2003). WIKIPEDIA. Site. Disponvel em: <http://pt.wikipedia.org/wiki/Radix_sort>. Acesso em: 01 out. 2013. 2.CORMEN, Thomas H.. Algoritmos: teria e prtica. Rio de Janeiro: Editora Campus, 2002. 3.SZWARCFITER, Jayme Luiz Estruturas de Dados e Seus Algoritmos. Rio de Janeiro Editora LTC, 2010.