You are on page 1of 21

Algoritmo de ordenamiento

Radix- Sort
Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida
Estructura de Datos Prof. Doc. Lucia Barrn

HISTORIA

EE.UU., 1880: no se puede terminar el censo de la dcada anterior (en concreto, no se llega a contar el nmero de habitantes solteros) Herman Hollerith (empleado de la oficina del censo, de 20 aos de edad) inventa una mquina tabuladora elctrica para resolver el problema; en esencia es una implementacin fsica del radix sort 1890: se usan unas 100 mquinas de Hollerith para tabular las listas del censo de la dcada (un operador experto procesaba 19.071 tarjetas en una jornada laboral de 65 horas, unas 49 tarjetas por minuto) 1896: Hollerith crea la empresa Tabulating Machine Company 1900: Hollerith resuelve otra crisis federal inventando una nueva mquina con alimentacin automtica de tarjetas (til, con ms o menos variaciones, hasta 1960) 1911: la empresa de Hollerith se fusiona con otras dos, creando la Calculating-Tabulating- Recording Company (CTR) 1924: Thomas Watson cambia el nombre a la CTR y la llama International Business Machines (IBM) El resto de la historia es bien conocido hasta: 2000: crisis del recuento de votos en las Presidenciales El resto de la historia es bien conocido

Radix Sort

Es un algoritmo de ordenamiento que ordena enteros procesando sus dgitos de forma individual. Como los enteros pueden representar cadenas de caracteres (por ejemplo, nombres o fechas) y, especialmente, nmeros en punto flotante especialmente formateados, radix sort no est limitado slo a los enteros.

Descripcin

Este mtodo se puede considerar como una generalizacin de la clasificacin por urnas. Consiste en hacer diversos montones de fichas, cada uno caracterizado por tener en sus componentes un mismo digito (letra si es alfabtica) en la misma posicin; estos montones se recogen en orden ascendente y se reparte en montones segn el siguiente digito de la clave.

Ejemplo
345, 721, 425, 572, 836, 467, 672, 194, 365, 236, 891, 746, 431, 834, 247, 529, 216, 389 Paso 1: atendiendo el digito de menor peso (unidades);
216 431 365 746

891
721

672
572

834
194

425
345

236
836

247
467

389
529

Tomando los montones en orden, la secuencia de fichas quedaran:

721, 891, 431, 572, 672, 194, 834, 345, 425, 365, 836, 236, 746, 216, 467, 347, 529, 389.

Paso 2: distribuimos las secuencia de fichas en montones respecto al segundo digito:


236 529 425 216 721 836 834 431 247 746 345 467 365 672 572 389 194 891

1
216 746

2
721 247 425 365

3
529 467

4
431 572

6
834 672

7
866 389 236 891

8
345 194

tomando de nuevo los montones en orden la secuencia de fichas quedari asi:

Continuacin:

Paso 3: se distribuye de nuevo las fichas respecto al tercer digito:


247 236 389 365 467 431 572 746 891 836

194

216

345

425

529

672

721

834

tomando de nuevo los montones en orden la secuencia de fichas queda ya ordenada: 194 467 216 529 236 572 247 672 345 721 365 746 389 834 425 836 431 891

Clasificacin

el de dgito menos significativo (LSD) el de dgito ms significativo (MSD). Radix sort LSD procesa las representaciones de enteros empezando por el dgito menos significativo y movindose hacia el dgito ms significativo. Radix sort MSD trabaja en sentido contrario.

Radix sort MSD


"b, c, d, e, f, g, h, i, j, ba" Ordenada "b, ba, c, d, e, f, g, h, i, j" Ej.2 1 al 10 ser "1, 10, 2, 3, 4, 5, 6, 7, 8, 9"

Radix sorts LSD


"1, 2, 3, 4, 5, 6, 7, 8, 9, 10".

Ejemplo
Vector original: 25 57 48 37 12 92 86 33 Asignamos los elementos en colas basadas en el dgito menos significativo de cada uno de ellos. 0: 1: 2: 12 92 3: 33 4: 5: 25 6: 86 7: 57 37 8: 48 9: Despus de la primera pasada, la ordenacin queda: 12 92 33 25 86 57 37 48 Colas basadas en el dgito ms significativo. 0: 1: 12 2: 25 3: 33 37 4: 485: 57 6: 7: 8: 86 9: 92 Lista ordenada: 12 25 33 37 48 57 86 92

ORDENAMIENTO POR RADIX

Estos mtodos no comparan llaves; sino que procesan y comparan pedazos de llaves.

Estabilidad

Un algoritmo de ordenamiento se considera estable si preserva el orden relativo de llaves iguales en la estructura de datos-.

Ejemplo

si queremos ordenar por calificacin una lista de asistencia que se encuentra ordenada alfabticamente, un algoritmo estable produce una lista en la que los estudiantes con el mismo grado se mantienen ordenados alfabticamente, mientras que un algoritmo inestable no dejar trazas del ordenamiento original. La mayora de los mtodos bsicos son estables, pero la mayora de los mtodos sofisticados no lo son.

Ordenamiento por radix directo

Una variante al mtodo de intercambio radix consiste en examinar los bits de derecha a izquierda. El mtodo depende de que el proceso de particin de un bit sea estable. Por lo que el proceso de particin utilizado en el algoritmo de intercambio radix no nos sirve; el proceso de particin es como ordenar una estructura con solo dos valores, por lo que el algoritmo de distribucin por conteo nos sirve muy bien.

Anlisis de eficiencia de los ordenamientos por radix

Depende en que las llaves estn compuestas de bits aleatorios en un orden aleatorio. Si esta condicin no se cumple ocurre una fuerte degradacin en el desempeo de estos mtodos. Adicionalmente, requiere de espacio adicional para realizar los intercambios. Los algoritmos de ordenamiento basados en radix se consideran como de propsito particular debido a que su factibilidad depende de propiedades especiales de las llaves, en contraste con algoritmos de propsito general como Quicksort que se usan con mayor frecuencia debido a su adaptabilidad a una mayor variedad de aplicaciones.

Nota:

El ordenamiento por radix puede ejecutarse hasta en el doble de velocidad que Quicksort, pero no vale la pena intentarlo si existe problemas potenciales de espacio de almacenamiento o si las llaves son de tamao variable y/o no son aleatorias.

Anlisis del Mtodo Radix Sort


Suponemos que el vector V tiene n elementos. Al ser el campo clave entero el numero urnas es d=10. Adems el numero de dijitos de que consta el campo clave va ser k. Con estas premisas y teniendo en cuenta los dos bucles anidados de que consta el algoritmo principal, tenemos que el tiempo de ejecucin es O(k*n+K*d). Si las claves se consideran como cadenas binarias de longitud log(n) entonces K=log (n) y el mtodo Radix Sort tomar un tiempo de ejecucin: O(nlog n)

TIEMPO

3n

3n

(falta formula general)

Si 'la v' es una constante, la clase de raz toma el tiempo lineal, la O (n). Note sin embargo que si todos los nmeros en la serie son diferentes entonces la v es al menos la O (n), entonces la O (log (n)) pasa son necesario, la O (nlog (n)) - el tiempo en general.

ESPACIO

Si una serie temporal es usada, el espacio de trabajo suplementario usado es la O (n). Es posible hacen la clasificacin sobre cada posicin de dgito in situ y luego slo la O (log (n)) el espacio es necesario para guardar la pista de las secciones de serie an para ser procesado, recurrentemente o sobre un montn explcito

Cdigo
public class radixSort { public int [][] cam(int[]arr){ if(arr.length == 0) return null; int[][] np = new int[arr.length][2]; //matrice int[] q = new int[256]; int i,j,k,l,f = 0; for(k=0;k<4;k++){ for(i=0;i<(np.length-1);i++) np[i][1] = i+1; np[i][1] = -1; for(i=0;i<q.length;i++) q[i] = -1; for(f=i=0;i<arr.length;i++){ j = ((255<<(k<<3))&arr[i])>>(k<<3); if(q[j] == -1) l = q[j] = f; else{ l = q[j]; while(np[l][1] != -1) l = np[l][1]; np[l][1] = f; l = np[l][1]; } f = np[f][1]; np[l][0] = arr[i]; np[l][1] = -1;

} }

} for(l=q[i=j=0];i<256;i++) for(l=q[i];l!=-1;l=np[l][1]) arr[j++] = np[l][0]; return np;

Prueba
public class Prueba {
public static void main (String[] args) { radixSort rs=new radixSort();

int [] a={10,20,30,40,50,60,70,80,90,12}; System.out.println(rs.cam(a));

}
}

You might also like