RADIX

5
ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA 6.2 ALGORITMOS DE ORDENAMIENTO POR DISTRIBUCION. 6.2.1 RADIX. A este método también se le llama “ordenamiento de raíz”. Este ordenamiento se basa en los valores de los dígitos reales en las representaciones de posiciones de los números que se ordenan. Por ejemplo, el número 235 en notación decimal se escribe con un 2 en la posición de centenas, un 3 en la posición de decenas y un 5 en la posición de unidades. 1. Tome cada número en el orden en el cual aparecen en el archivo y colóquelos en una de las diez colas (0...9) dependiendo del valor del dígito que es procesado. 2. Empezando con la cola de los números con dígito 0 y terminando con la cola de números con dígito 9. Retorne los números al archivo original en el orden en el cual fueron colocados en la cola, (empezar con el dígito menos significativo y concluir con el más significativo). Reglas para ordenar: El más grande de dos enteros de igual longitud se determina del modo siguiente: 1. Empezar en el dígito más significativo y avanzar por los dígitos menos significativos mientras coinciden los dígitos correspondientes en los dos números. 2. El número con el dígito más grande en la primera posición en la cual los dígitos de los dos números no coinciden es el mayor de los dos (por supuesto sí coinciden todos los dígitos de ambos números, son iguales). Características y análisis de eficiencia de este método: 1. Debido a que el ciclo for (k = 1; k <= m; k++) externo se recorre m veces (una para cada dígito) y el ciclo interior n veces (una para cada elemento en el archivo) el ordenamiento es de aproximadamente (m*n). Es decir, los requerimientos del tiempo para el método depende del número de dígitos (m) y el número de elementos del 1

Transcript of RADIX

ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA

6.2 ALGORITMOS DE ORDENAMIENTO POR DISTRIBUCION.

6.2.1 RADIX.

A este método también se le llama “ordenamiento de raíz”. Este ordenamiento se basa en los valores de los dígitos reales en las representaciones de posiciones de los números que se ordenan. Por ejemplo, el número 235 en notación decimal se escribe con un 2 en la posición de centenas, un 3 en la posición de decenas y un 5 en la posición de unidades.

1. Tome cada número en el orden en el cual aparecen en el archivo y colóquelos en una de las diez colas (0...9) dependiendo del valor del dígito que es procesado.

2. Empezando con la cola de los números con dígito 0 y terminando con la cola de números con dígito 9. Retorne los números al archivo original en el orden en el cual fueron colocados en la cola, (empezar con el dígito menos significativo y concluir con el más significativo).

Reglas para ordenar:

El más grande de dos enteros de igual longitud se determina del modo siguiente:

1. Empezar en el dígito más significativo y avanzar por los dígitos menos significativos mientras coinciden los dígitos correspondientes en los dos números.

2. El número con el dígito más grande en la primera posición en la cual los dígitos de los dos números no coinciden es el mayor de los dos (por supuesto sí coinciden todos los dígitos de ambos números, son iguales).

Características y análisis de eficiencia de este método:

1. Debido a que el ciclo for (k = 1; k <= m; k++) externo se recorre m veces (una para cada dígito) y el ciclo interior n veces (una para cada elemento en el archivo) el ordenamiento es de aproximadamente (m*n). Es decir, los requerimientos del tiempo para el método depende del número de dígitos (m) y el número de elementos del archivo (n). El ordenamiento es de O(m*n).

2. Si las llaves son complejas (es decir, si casi cada número que puede ser una llave lo es en realidad) m se aproxima a log n, por lo que (m*n) se aproxima a (n log n).

3. Si la cantidad de dígitos es grande, en ocasiones es más eficiente ordenar el archivo aplicando primero el ordenamiento de raíz a los dígitos más significativos y después utilizando inserción simple sobre el archivo ya reorganizado. En casos donde la mayoría de los registros del archivo tengan diferente número de dígitos significativos, este proceso elimina pasos innecesarios en los dígitos menos significativos.

Ventajas:

1. El ordenamiento es razonablemente eficiente si el número de dígitos en las llaves no es demasiado grande.

2. 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.

Desventajas:

1

ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA

1. Se requiere conocer la cantidad de dígitos del valor máximo (para saber cuando el método ya acomodó todos los elementos).

2. Se requiere de espacio para almacenar los punteros del frente y de la parte posterior de la cola, además de un campo adicional en cada registro que se utiliza como puntero a la lista encadenada.

 Suponiendo que se quiere ordenar n números, cada uno de ellos compuesto de k dígitos. El siguiente es un ejemplo con n = 10 y k = 5 (número de dígitos por número).

73895937548214999046048539417154963704718056466496

 

Imaginando que estos dígitos forman parte de una matriz, podemos decir que a [i, j] es el j-ésimo del i-ésimo elemento del conjunto. Es fácil, en una pasada, ordenar el conjunto de la llave de ordenación es un solo dígito, por ejemplo el tercero de izquierda a derecha:

99046821499417170471664968056493754738950485354963

 Para ordenar un conjunto de llaves completas, repetimos el proceso dígito por dígito, en cada pasada separando los elementos según el valor del dígito respectivo, luego recolectándolos para formar una sola cola, y realimentando el proceso con esos mismos datos. El conjunto completo queda finalmente ordenado si los dígitos se van tomando de derecha a izquierda. Como hay que realizar k pasadas y cada una de ellas toma tiempo O(N), el tiempo total es O(k N), que es el tamaño del archivo de entrada (en bytes). Por lo tanto, la ordenación tomó un tiempo lineal en el tamaño de los datos.

A continuación, se muestra el procedimiento que se sigue para este ordenamiento:

2

ESTRUCTURA DE DATOS (ING.) UNIDAD 6. ORDENACION INTERNA M.C. ROSA MARIA MICHEL NAVA

// Se define un arreglo de N registros o estructuras que contengan un campo de información y uno como puntero para almacenar la dirección del nodo siguiente.// FRENTE y POSTERIOR son arreglos auxiliares// X  es el arreglo original con los valores a ordenar// EXP, PRIMERO, I, J, K, P, Q y Y son variables de tipo entero

RADIX( X[ ], N){

Para I desde 0 y mientras I < N–1 Hacer{NODO[ I ]. INFO = X[ I ] y NODO[ I ]. SIG = I + 1;

}Hacer NODO[ N–1 ]. INFO = X[ N–1 ], NODO[ N–1 ]. SIG = -1 y PRIMERO = 0;Para K desde 1 y Mientras K sea menor o igual que el total de dígitos Hacer {

Para I desde 0 hasta 9 Hacer {         FRENTE[ I ] = -1 y POSTERIOR[ I ] = -1;

}    EXP = Elevar 10 a la K–1; Repetir Mientras (PRIMERO != -1) {        

Hacer P = PRIMERO, PRIMERO = NODO[ PRIMERO ]. SIG,Y = NODO[ P ]. INFO, J = Residuo de dividir ((Y entre EXP) entre 10) y Q = POSTERIOR[ J ];

Si (Q = -1) entonces Hacer FRENTE[ J ] = P;De lo contrario Hacer NODO[ Q ]. SIG = P;Hacer POSTERIOR[ J ] = P;

} Para J desde 0 y Mientras J < 10 y FRENTE[ J ] = -1 Hacer Incrementar J;Hacer PRIMERO = FRENTE[ J ];Repetir Mientras (J <= 9){

Para I desde J+1 y Mientras I < 10 y FRENTE[ I ] = -1 Hacer Incrementar I;

Si (I <= 9) entonces {            Hacer P=I y NODO[ POSTERIOR[ J ] ]. SIG = FRENTE[ I ];} Hacer J = I;

}     Si (POSTERIOR[P] != -1) Hacer NODO[ POSTERIOR[ P ] ]. SIG = -1;} Para I desde 0 hasta N–1 Hacer {

X[ I ]= NODO[ PRIMERO ]. INFO yPRIMERO = NODO[ PRIMERO ]. SIG;

} }

3