Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza...

21
Algoritmo de ordenamiento Algoritmo de ordenamiento Radix- Sort Radix- Sort Flores Wong Rosa Elena Flores Wong Rosa Elena Mendoza Ibarra Mayra Mendoza Ibarra Mayra Ayala Inzunza Briseida Ayala Inzunza Briseida Estructura de Datos Estructura de Datos Prof. Doc. Lucia Barrón Prof. Doc. Lucia Barrón

Transcript of Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza...

Page 1: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Algoritmo de Algoritmo de

ordenamientoordenamiento Radix- SortRadix- Sort

Flores Wong Rosa ElenaFlores Wong Rosa ElenaMendoza Ibarra Mayra Mendoza Ibarra Mayra Ayala Inzunza BriseidaAyala Inzunza Briseida

Estructura de DatosEstructura de DatosProf. Doc. Lucia BarrónProf. Doc. Lucia Barrón

Page 2: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

HISTORIAHISTORIA

EE.UU., 1880EE.UU., 1880: no se puede terminar el censo de la década anterior : no se puede terminar el censo de la década anterior (en concreto, no se llega a contar el número de habitantes solteros)(en concreto, no se llega a contar el número de habitantes solteros)

– – Herman HollerithHerman Hollerith (empleado de la oficina del censo, de 20 años (empleado de la oficina del censo, de 20 años de edad) inventa una de edad) inventa una máquina tabuladora eléctricamáquina tabuladora eléctrica para para resolver el problema; en esencia resolver el problema; en esencia es una implementación física es una implementación física del del radix sortradix sort 1890 1890: se usan unas 100 máquinas de Hollerith para : se usan unas 100 máquinas de Hollerith para tabular las listas del censo de la década (un operador experto tabular las listas del censo de la década (un operador experto procesaba 19.071 tarjetas en una jornada laboral de 6’5 horas, unas procesaba 19.071 tarjetas en una jornada laboral de 6’5 horas, unas 49 tarjetas por minuto)49 tarjetas por minuto)

– – 1896:1896: Hollerith crea la empresa Hollerith crea la empresa Tabulating Machine CompanyTabulating Machine Company 19001900: Hollerith resuelve otra crisis federal inventando una nueva : Hollerith resuelve otra crisis federal inventando una nueva máquina con alimentación automática de tarjetas (útil, con más o máquina con alimentación automática de tarjetas (útil, con más o menos variaciones, hasta 1960)menos variaciones, hasta 1960)

– – 19111911: la empresa de Hollerith se fusiona con otras dos, creando la : la empresa de Hollerith se fusiona con otras dos, creando la Calculating-Tabulating-Calculating-Tabulating- Recording Company Recording Company (CTR)(CTR)

– – 1924: Thomas Watson1924: Thomas Watson cambia el nombre a la CTR y la llama cambia el nombre a la CTR y la llama International Business Machines International Business Machines (IBM)(IBM) El resto de la historia es El resto de la historia es

bien conocido… hasta: – 2000: crisis del recuento de votos en las bien conocido… hasta: – 2000: crisis del recuento de votos en las Presidenciales El resto de la historia es bien conocido… Presidenciales El resto de la historia es bien conocido…

Page 3: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Radix SortRadix Sort

Es un Es un algoritmo de ordenamientoalgoritmo de ordenamiento que ordena enteros procesando sus que ordena enteros procesando sus dígitos de forma individual. Como dígitos de forma individual. Como los enteros pueden representar los enteros pueden representar cadenas de caracteres (por cadenas de caracteres (por ejemplo, nombres o fechas) y, ejemplo, nombres o fechas) y, especialmente, números en punto especialmente, números en punto flotante especialmente flotante especialmente formateados, formateados, radix sortradix sort no está no está limitado sólo a los enteros.limitado sólo a los enteros.

Page 4: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

DescripciónDescripción

Este método se puede considerar como una Este método se puede considerar como una generalización de la clasificación por urnas. generalización de la clasificación por urnas.

Consiste en hacer diversos montones de Consiste en hacer diversos montones de fichas, cada uno caracterizado por tener en fichas, cada uno caracterizado por tener en sus componentes un mismo digito (letra si sus componentes un mismo digito (letra si es alfabética) en la misma posición; estos es alfabética) en la misma posición; estos montones se recogen en orden ascendente montones se recogen en orden ascendente y se reparte en montones según el y se reparte en montones según el siguiente digito de la clave. siguiente digito de la clave.

Page 5: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

EjemploEjemplo

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

Paso 1: atendiendo el digito de menor peso Paso 1: atendiendo el digito de menor peso (unidades);(unidades);

216

431 365 746

891 672 834 425 236 247 389

721 572 194 345 836 467 529

1 2 4 5 6 7 9

Page 6: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Tomando los montones en orden, la secuencia de fichas Tomando los montones en orden, la secuencia de fichas quedarían:quedarían:721, 891, 431, 572, 672, 194, 834, 345, 425, 365, 836, 721, 891, 431, 572, 672, 194, 834, 345, 425, 365, 836, 236, 746, 216, 467, 347, 529, 389.236, 746, 216, 467, 347, 529, 389.

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

236

529 836 247

425 834 746 467 672 194

216 721 431 345 365 572 389 891

1 2 3 4 6 7 8 9tomando de nuevo los montones en orden la

secuencia de fichas quedari asi:

216 721 425 529 431 834 866 236 345

746 247 365 467 572 672 389 891 194

Page 7: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Continuación:Continuación:

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

247 389 467 891

236 365 431 572 746 836

194 216 345 425 529 672 721 834

1 2 3 4 5 6 7 8tomando de nuevo los montones en orden la

secuencia de fichas queda ya ordenada:

194 216 236 247 345 365 389 425 431

467 529 572 672 721 746 834 836 891

Page 8: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

ClasificaciónClasificación

el de dígito menos significativo (el de dígito menos significativo (LSDLSD) ) el de dígito más significativo (el de dígito más significativo (MSDMSD). ). Radix sort LSDRadix sort LSD procesa las procesa las

representaciones de enteros representaciones de enteros empezando por el dígito menos empezando por el dígito menos significativo y moviéndose hacia el significativo y moviéndose hacia el dígito más significativo. dígito más significativo.

Radix sort MSDRadix sort MSD trabaja en sentido trabaja en sentido contrario.contrario.

Page 9: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Radix sort MSDRadix sort MSD

"b, c, d, e, f, g, h, i, j, ba""b, c, d, e, f, g, h, i, j, ba"

OrdenadaOrdenada

"b, ba, c, d, e, f, g, h, i, j""b, ba, c, d, e, f, g, h, i, j"

Ej.2 Ej.2

1 al 10 será 1 al 10 será

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

Radix sorts LSDRadix sorts LSD

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

Page 10: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

EjemploEjemplo

Vector original:Vector original:25 57 48 37 12 92 86 3325 57 48 37 12 92 86 33Asignamos los elementos en colas basadas en el dígito menos significativo de cada uno de ellos.Asignamos los elementos en colas basadas en el dígito menos significativo de cada uno de ellos.0:0:1:1:2: 12: 122 9 9223: 33: 3334:4:5: 25: 2556: 86: 8667: 57: 577 3 3778: 48: 4889:9:Después de la primera pasada, la ordenación queda:Después de la primera pasada, la ordenación queda:12 92 33 25 86 57 37 4812 92 33 25 86 57 37 48Colas basadas en el dígito más significativo.Colas basadas en el dígito más significativo.0:0:1: 1: 11222: 2: 22553: 3: 333 3 33774: 4: 4485: 85: 55776:6:7:7:8: 8: 88669: 9: 9922Lista ordenada:Lista ordenada:12 25 33 37 48 57 86 9212 25 33 37 48 57 86 92

Page 11: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

ORDENAMIENTO POR ORDENAMIENTO POR RADIXRADIX

Estos métodos no comparan Estos métodos no comparan llaves; sino que procesan y llaves; sino que procesan y comparan pedazos de llaves. comparan pedazos de llaves.

Page 12: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Estabilidad Estabilidad

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

Page 13: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

EjemploEjemplo

si queremos ordenar por calificación si queremos ordenar por calificación una lista de asistencia que se una lista de asistencia que se encuentra ordenada alfabéticamente, encuentra ordenada alfabéticamente, un algoritmo estable produce una lista un algoritmo estable produce una lista en la que los estudiantes con el mismo en la que los estudiantes con el mismo grado se mantienen ordenados grado se mantienen ordenados alfabéticamente, mientras que un alfabéticamente, mientras que un algoritmo inestable no dejará trazas algoritmo inestable no dejará trazas del ordenamiento original. La mayoría del ordenamiento original. La mayoría de los métodos básicos son estables, de los métodos básicos son estables, pero la mayoría de los métodos pero la mayoría de los métodos sofisticados no lo son. sofisticados no lo son.

Page 14: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Ordenamiento por Ordenamiento por radix directo radix directo Una variante al método de intercambio Una variante al método de intercambio

radix consiste en examinar los bits de radix consiste en examinar los bits de derecha a izquierda. El método depende derecha a izquierda. El método depende de que el proceso de partición de un bit de que el proceso de partición de un bit sea estable. Por lo que el proceso de sea estable. Por lo que el proceso de partición utilizado en el algoritmo de partición utilizado en el algoritmo de intercambio radix no nos sirve; el intercambio radix no nos sirve; el proceso de partición es como ordenar proceso de partición es como ordenar una estructura con solo dos valores, por una estructura con solo dos valores, por lo que el algoritmo de distribución por lo que el algoritmo de distribución por conteo nos sirve muy bien. conteo nos sirve muy bien.

Page 15: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Análisis de eficiencia de Análisis de eficiencia de los ordenamientos por los ordenamientos por radix radix Depende en que las llaves estén compuestas de bits Depende en que las llaves estén compuestas de bits

aleatorios en un orden aleatorio. Si esta condición no aleatorios en un orden aleatorio. Si esta condición no se cumple ocurre una fuerte degradación en el se cumple ocurre una fuerte degradación en el desempeño de estos métodos. Adicionalmente, desempeño de estos métodos. Adicionalmente, requiere de espacio adicional para realizar los requiere de espacio adicional para realizar los intercambios. intercambios.

Los algoritmos de ordenamiento basados en radix se Los algoritmos de ordenamiento basados en radix se consideran como de propósito particular debido a que consideran como de propósito particular debido a que su factibilidad depende de propiedades especiales de su factibilidad depende de propiedades especiales de las llaves, en contraste con algoritmos de propósito las llaves, en contraste con algoritmos de propósito general como Quicksort que se usan con mayor general como Quicksort que se usan con mayor frecuencia debido a su adaptabilidad a una mayor frecuencia debido a su adaptabilidad a una mayor variedad de aplicaciones. variedad de aplicaciones.

Page 16: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Nota:Nota:

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

Page 17: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

Análisis del Método Análisis del Método Radix SortRadix Sort

Suponemos que el vector “V” tiene Suponemos que el vector “V” tiene n n elementos.elementos.Al ser el campo clave entero el numero urnas es Al ser el campo clave entero el numero urnas es

d=10. Ad=10. Además el numero de dijitos de que consta demás el numero de dijitos de que consta el campo clave va ser el campo clave va ser k. k. Con estas premisas y Con estas premisas y teniendo en cuenta los dos bucles anidados de teniendo en cuenta los dos bucles anidados de que consta el algoritmo principal, tenemos que el que consta el algoritmo principal, tenemos que el tiempo de ejecución es tiempo de ejecución es O(k*n+K*d).O(k*n+K*d).

Si las claves se consideran como cadenas binarias Si las claves se consideran como cadenas binarias de longitud de longitud log(n) log(n) entonces entonces K=log (n)K=log (n) y el método y el método Radix Sort tomará un tiempo de ejecución:Radix Sort tomará un tiempo de ejecución:

O(nlog n)O(nlog n)

Page 18: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

TIEMPO 3nTIEMPO 3n

3n 3n (falta formula general)(falta formula general)

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

Page 19: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

ESPACIOESPACIO

Si una serie temporal es usada, el Si una serie temporal es usada, el espacio de trabajo suplementario espacio de trabajo suplementario usado es la O (n). Es posible hacen usado es la O (n). Es posible hacen la clasificación sobre cada posición la clasificación sobre cada posición de dígito in situ y luego sólo la O de dígito in situ y luego sólo la O ((loglog (n)) el espacio es necesario (n)) el espacio es necesario para guardar la pista de las para guardar la pista de las secciones de serie aún para ser secciones de serie aún para ser procesado, recurrentemente o procesado, recurrentemente o sobre un montón explícitosobre un montón explícito

Page 20: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

CódigoCódigo

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

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

Page 21: Algoritmo de ordenamiento Radix- Sort Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida Estructura de Datos Prof. Doc. Lucia Barrón.

PruebaPrueba

public class Prueba {public class Prueba {

public static void main (String[] args) {public static void main (String[] args) { radixSort rs=new radixSort();radixSort rs=new radixSort(); int [] a={10,20,30,40,50,60,70,80,90,12};int [] a={10,20,30,40,50,60,70,80,90,12}; System.out.println(rs.cam(a));System.out.println(rs.cam(a)); }} }}