Transcript Algotitmo de ordenamiento arreglado
Algoritmo de ordenamiento Radix- Sort
Flores Wong Rosa Elena Mendoza Ibarra Mayra Ayala Inzunza Briseida
Estructura de Datos Prof. Doc. Lucia Barrón
HISTORIA
EE.UU., 1880: no se puede terminar el censo de la década anterior (en concreto, no se llega a contar el número de habitantes solteros) – Herman Hollerith (empleado de la oficina del censo, de 20 años de edad) inventa una máquina tabuladora eléctrica para resolver el problema; en esencia es una implementación física del horas, unas 49 tarjetas por minuto) – 1896: Hollerith crea la empresa 1960)
International Business Machines radix sort
1890: se usan unas 100 máquinas de Hollerith para tabular las listas del censo de la década (un operador experto procesaba 19.071 tarjetas en una jornada laboral de 6’5
Tabulating Machine Company
1900: Hollerith resuelve otra crisis federal inventando una nueva máquina con alimentación automática de tarjetas (útil, con más o menos variaciones, hasta – 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 resto de la historia es bien conocido… (IBM) El resto de la historia es bien conocido… hasta: – 2000: crisis del recuento de votos en las Presidenciales El
Radix Sort
Es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Como los enteros pueden representar cadenas de caracteres (por ejemplo, nombres o fechas) y, especialmente, números en punto flotante especialmente formateados,
radix sort
no está limitado sólo a los enteros.
Descripción
Este método se puede considerar como una generalización de la clasificación por urnas. Consiste en hacer diversos montones de fichas, cada uno caracterizado por tener en sus componentes un mismo digito (letra si es alfabética) en la misma posición; estos montones se recogen en orden ascendente y se reparte en montones según 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); 43
1
89
1
72
1 1
67
2
57
2 2
83
4
19
4 4
36
5
42
5
34
5 5
21
6
74
6
23
6
83
6 6
24
7
46
7 7
38
9
52
9 9
Tomando los montones en orden, la secuencia de fichas quedarían: 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: 2
1
6 5
2
9 4
2
5 7
2
1 2
3
6 8
3
6 8
3
4 4
3
1 2
4
7 7
4
6 3
4
5 4
6
7 3
6
5
1 2 3 4 tomando de nuevo los montones en orden la secuencia de fichas quedari asi: 216 746 721 247 425 365 529 467 431 572 6 834 672
6
7
2 5
7
2
7
3
8
9
8 866 389 236 891 345 194
1
9
4 8
9
1
9
Continuación:
Paso 3: se distribuye de nuevo las fichas respecto al tercer digito:
1
94
1 2
47
2
36
2
16
2 3
89
3
65
3
45
3 4
67
4
31
4
25
4 5
72
5
29
5
tomando de nuevo los montones en orden la secuencia de fichas queda ya ordenada:
194 216 236 247 345 365 467 529 572 672 721 746 6
72
6 389 834 7
46
7
21
7 425 836 8
91
8
36
8
34
431 891 8
Clasificación
el de dígito menos significativo (LSD) el de dígito más significativo (MSD).
Radix sort LSD
procesa las representaciones de enteros empezando por el dígito menos significativo y moviéndose hacia el dígito más significativo.
Radix sort MSD
contrario.
trabaja en sentido
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 dígito 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: Después de la primera pasada, la ordenación queda: 12 92 33 25 86 57 37 48 Colas basadas en el dígito más 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 métodos 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 calificación una lista de asistencia que se encuentra ordenada alfabéticamente, un algoritmo estable produce una lista en la que los estudiantes con el mismo grado se mantienen ordenados alfabéticamente, mientras que un algoritmo inestable no dejará trazas del ordenamiento original. La mayoría de los métodos básicos son estables, pero la mayoría de los métodos sofisticados no lo son.
Ordenamiento por radix directo
Una variante al método de intercambio radix consiste en examinar los bits de derecha a izquierda. El método depende de que el proceso de partición de un bit sea estable. Por lo que el proceso de partición utilizado en el algoritmo de intercambio radix no nos sirve; el proceso de partición es como ordenar una estructura con solo dos valores, por lo que el algoritmo de distribución por conteo nos sirve muy bien.
Análisis de eficiencia de los ordenamientos por radix
Depende en que las llaves estén compuestas de bits aleatorios en un orden aleatorio. Si esta condición no se cumple ocurre una fuerte degradación en el desempeño de estos métodos. Adicionalmente, requiere de espacio adicional para realizar los intercambios. Los algoritmos de ordenamiento basados en radix se consideran como de propósito particular debido a que su factibilidad depende de propiedades especiales de las llaves, en contraste con algoritmos de propósito 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 tamaño variable y/o no son aleatorias.
Análisis del Método Radix Sort
Suponemos que el vector “V” tiene Al ser el campo clave entero el numero urnas es d=10. A demás el numero de dijitos de que consta el campo clave va ser k. n elementos.
Con estas premisas y teniendo en cuenta los dos bucles anidados de que consta el algoritmo principal, tenemos que el tiempo de ejecución es O(k*n+K*d).
Si las claves se consideran como cadenas binarias de longitud Radix Sort tomará un tiempo de ejecución:
O(nlog n)
log(n) entonces K=log (n) y el método
TIEMPO 3n
3n (falta formula general) Si 'la v' es una constante, la clase de raíz toma el tiempo lineal, la O (n). Note sin embargo que si todos los números en la serie son diferentes entonces la v es al menos la O (n), entonces la O ( general.
log (n)) pasa son necesario, la O (nlog (n)) - el tiempo en
ESPACIO
Si una serie temporal es usada, el espacio de trabajo suplementario usado es la O (n). Es posible hacen la clasificación sobre cada posición de dígito in situ y luego sólo la O ( sobre un montón explícito log el espacio es necesario para guardar la pista de las secciones de serie aún (n)) para ser procesado, recurrentemente o
Código
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
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)); } }