UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
Universidad Nacional Micaela Bastidas de Apurímac Escuela Académica Profesional de Ingeniería Informática y Sistemas
-------------------------------------------------------------------------------------------TITULO : Método de ordenamiento RadixSort INTEGRANTES
: -
DOCENTE
Damian Elguera Yandali Sarmiento Ponce Hamely Utani Valdez Dalia del Milagro Zuñiga Mendoza Ricardo Manuel
: Francisco Cari Incahuanaco
Abancay - Apurímac 2011-II
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
INDICE
1.1ANTECEDENTES E HISTORIA 1.2DEFINICIÓN 1.3ALGORITMO 1.4EJEMPLOS OPTIMIZACIÓN 1.5ANÁLISIS DEL ALGORITMO 1.6.1 ESTABILIDAD 1.6.2 TIEMPO 1.6 VENTAJAS
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
2
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
MÉTODO DE ORDENAMIENTO: RADIX ANTECEDENTES: Es el algoritmo de las máquinas que ordenaban las tarjetas que se utilizaban para programar en el pasado. Estas tarjetas tenían una matriz de 80 columnas y 12 filas. La máquina se usaba para ordenar, contando con 12 casilleros siendo capaz de determinar, dada una columna, a que casillero debía ir a parar una tarjeta dependiendo de cuál de los 12 casilleros tenía el agujero. Luego de una pasada por la máquina, quedaban 12 pilas de tarjetas distribuidas en los 12 casilleros. Si esto lo aplicamos al ordenamiento de cualquier número natural de dígitos significativos, se pensaría en 10 casilleros enumerados de 0-9 y que cada digito en particular se distribuiría con la máquina.
DEFINICIÓN: Es un algoritmo que ordena y procesa sus dígitos de forma individual. Este método se puede considerar como una generalización de la clasificación de las urnas.
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
3
2011-II
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS ANÁLISIS
En el siguiente ejemplo se explicará la secuencia y pasos que se lleva a cabo en el algoritmo. Ingresamos 8 números cualesquiera, ordenamos de menor a mayor utilizando el método radixsort. 32
224
16
15
31
169
123
252
1. Cada número se debe ordenar según el valor de cada dígito, es decir en unidades, decenas y centenas. C
D
U
0 2 0 0 0 1 1 2
3 2 1 1 3 6 2 5
2 4 6 5 1 9 3 2
2. Seguidamente se tiene 10 casilleros enumerados del 0 al 9 y que, dado un dígito en particular; se distribuirá los números en las diversas casillas, comenzando del valor menos significativo en este caso las unidades. 0≤k≤9 ={0,1,2,3,4,5,6,7,8,9}
0
1
2
3
4
5
6
31
32 252
123
224
15
16
7
8
9
169
3. Luego pasará a las decenas para que nuevamente se reordenen los números.
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
4
2011-II
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
0
1 15 16
2
3
12 3 22 4
31 32
4
5
6
7
25 2
16 9
8
9
4. Finalmente se analiza el valor más significativo, es decir las centenas, de ello resulta:
0 015 016 031 032
1
2
123 169
3
4
5
6
7
8
9
224 252
5. Los números ya se encuentran ordenados.
15
16
31
32
123
169
224
252
6. En conclusión: La idea clave de la ordenación Radixsort es clasificar por urnas primero respecto al dígito de menor peso (menos significativo) dk, después concatenar las urnas, clasificar de nuevo respecto al siguiente dígito dk 1, y así sucesivamente se sigue con el siguiente dígito hasta alcanzar el dígito más significativo dl, y es cuando la secuencia estará ordenada. La concatenación de las urnas consiste en enlazar el final de una con el frente de la siguiente. a. Estabilidad: Este algoritmo se considera estable si preserva el orden relativo de llaves iguales en la estructura de datos. −
b. Tiempo: el tiempo de total del Radix Sort es: ∑ ( ∑ ).
es el número de valores diferentes del tipo .
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
5
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
c++ #include #include #include #include #include #define MAX 100 void radixsort(int A[], int n); main () { clrscr(); int A[50] = {NULL}, i; static int n; int Veces; cout<<"====ORDENAMIENTO POR RADIX SORT=====\n"<>Veces; cout<<"INGRESE LOS "<>A[n]; // indica que “n” es verdadero if (n) radixsort (A, n); // se envia los parametros al metodo Radix cout<<"LOS "<
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
6
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
{ int front[10], rear[10]; struct { int info; int next; } node[MAX]; int exp, first, i, j, k, p, q, y; for (i = 0; i < n-1; i++) { node[i].info = A[i]; node[i].next = i+1; } node[n-1].info = A[n-1]; node[n-1].next = -1; first = 0; for (k = 1; k < j; k++) { for (i = 0; i < 10; i++) { rear[i] = -1; front[i] = -1; } while (first != -1) { p = first; first = node[first].next; y = node[p].info; exp = pow(10, k-1); j = (y/exp) % 10; q = rear[j]; if (q == -1) front[j] = p; else node[q].next = p; rear[j] = p; }
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
7
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
for (j = 0; j < 10 && front[j] == -1; j++); ; first = front[j]; while (j <= 9) { for (i = j+1; i < 10 && front[i] == -1; i++); if (i <= 9) { p = i; node[rear[j]].next = front[i]; } j = i; } node[rear[p]].next = -1; } for (i = 0; i < n; i++) { A[i] = node[first].info; first = node[first].next; } }
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
8
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
EJEMPLOS: 1. Ordenar la siguiente sucesión de números en forma ascendente. 15, 20, 10, 89, 49, 23 y 13. Solución:
Números Originales: 15
, 20 , 10 , 89 , 49 , 23 y 13
Colocando todos los números con el orden que nos dieron, en la tabla de valor de Digito : Decena
Unidad
1 2 1 8 4 2 1
5 0 0 9 9 3 3
Distribuyendo los números empezando del valor menos significativo Primera Pasada (Unidades): 15 , 20 , 10 , 89 , 49 , 23 y 13
Casillero [0,9]
0
Primera pasada
20 , 10
1 2 3
23 , 13
4 5
15
6 7 8 9
89 , 49
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
9
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
Resultado de acuerdo al Cuadro:
20 , 10 , 23 , 13 , 15 , 89 , 49
Segunda Pasada (Decenas) :20 , 10 , 23 , 13 , 15 , 89 , 49 Casillero [0,9]
Segunda pasada
0
10 , 13 , 15 20 , 23
1 2 3
49
4 5 6 7
89
8 9
Resultado de acuerdo al cuadro:
10 , 13 , 15 , 20, 23,49,89
Los números ordenados de forma ascendente son :
10 13 15 20 23 49 89
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 0
2011-II
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS 2. Realizar la siguiente sucesión de números: 16 , 263 , 789 , 4 ,212 , 48 , 2854 y 1 . Solución:
Números Originales: 16 , 263 , 789 , 4 , 212 , 48 ,2854
Colocando todos los números con el orden que nos dieron, en la tabla de valor de Digito: Unidad de Millar
Centena
Decena
Unidad
0
0 2 7 0 2 0 8 0
1 6 8 0 1 4 5 0
6 3 9 4 2 8 4 1
0 0 0 0 0 2 0
y 1.
Distribuyendo los números empezando del valor menos significativo
Primera Pasada (Unidades) : 16 , 263 , 789 , 4 , 212 , 48 , 2854, 4 Casillero [0,9]1ra Pasada
0 1 2 3 4
1 212 263 4, 2854
5 6
16
7 8 9
Resultado de acuerdo al Cuadro:
1 , 212 , 263 , 4 , 2854 , 16 , 48 , 789
48 789
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 1
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
Segunda Pasada (Decenas): 01 , 212 , 263 ,04 , 2854 , 16 , 48 , 789 Casillero [0,9]
0 1
2da Pasada
1,4 212, 16
2 3 4 5 6
48 2854 263
7 8
789
9
Resultado de acuerdo al Cuadro:
1 , 4 , 212 , 16 , 48 , 2854 , 263 , 789
Tercera pasada (Centenas): 001 , 004 , 212 , 016 , 048 , 2854 , 263 , 789 Casillero [0,9]3ra Pasada
0
1,4,16,48
1 2
212,263
3 4 5 6 7 8 9
Resultado de acuerdo al cuadro :
1 , 4 ,16 , 48 , 212 , 263 , 789 , 2854
789 2854
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 2
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
Cuarta Pasada (Unidad de millar): 0001 , 0004 , 0016 ,0048 ,0212 , 0263 , 0789 , 2854 Casillero [0,9]
0
4ta Pasada
1,4,16,48,212,263,789
1
2854
2 3 4 5 6 7 8 9
Resultado de acuerdo al cuadro :
1 , 4 , 16 , 48 , 212 , 263 , 789 , 2854
Los números ordenados de forma ascendente son :
1 4 16 48 212 263 789 2854
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 3
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
OPTIMIZACIÓN La optimización es el proceso de ajuste del rendimiento de un archivo ejecutable con el fin de obtener el mejor rendimiento y el menor tamaño del código. Objetivo: Mejorar el código, preservando el significado del programa. Factores a optimizar:
Velocidad de ejecución
Tamaño del programa
Necesidades de memoria
El ordenamiento es razonablemente eficiente si el número de dígitos en las llaves no es demasiado grande. Si las máquinas tienen la ventaja de ordenar los dígitos (sobre todo si están en binario) lo ejecutarían con mucho mayor rapidez de lo que ejecutan una comparación de dos llaves completas.
El Radixsort es potencialmente un algoritmo muy eficiente gracias a una complejidad lineal en el número de datos a ordenar. Desde un punto de vista del algoritmo secuencial, Radixsort muestra una pobre explotación de la jerarquía de memoria cache del procesador. En el caso de los conjuntos de datos no caben en ningún nivel de la memoria caché del procesador. Una forma de optimizar desde el punto de vista del algoritmo paralelo, la solución básica puede tener un desequilibrio de carga en cada iteración del algoritmo (ordenación de cada digito). Estos se comparan con los anteriores algoritmos paralelos de ordenación con los datos de memoria, demostrando que el algoritmo que se propone es el más rápido para datos de clave y puntero de 32 y 64 bits sin embargo este algoritmo el mismo número de pasos de comunicación que el algoritmo básico de Radixsort paralelo, por lo que tampoco explotan la jerarquía de memoria del computador.
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 4
UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC-EAPIIS
2011-II
En general existen diferentes formas de aprovechar el potencial de Radixsort. EFICIENCIA DE LOS ORDENAMIENTOS POR RADIX
La eficiencia de este algoritmo 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. En algunas aplicaciones a la medida, 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.
VENTAJAS
El ordenamiento es razonablemente eficiente si el número de dígitos en las llaves no es demasiado grande.
Si las máquinas tienen la ventaja de ordenar los dígitos (sobre todo si están en binario) lo ejecutarían con mucho mayor rapidez de lo que ejecutan una comparación de dos llaves completas.
T R O S X I D A R O T N E I M A N E D R O E D O D O T É M
1 5