Monografia Del Algoritmo Radyx Sort

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 12

1

UNIVERSIDAD TECNOLÓGICA DE LOS ANDES


FACULTAD DE INGENIERÍA
DEPARTAMENTO ACADÉMICO DE INGENIERÍAS
E.P. DE ING. DE SISTEMAS E INFORMÁTICA

Algoritmos y Programacion II

INGENIERO
Godofredo Poccori Umeres
TEMA DE INVESTIGACION
Algoritmo Radix Sort
ESTUDIANTES
Saavedra Quillahuaman Alexis
Salazar Llavilla Joseph
Quispe Huaman Juan Pablo
Yapura Rupaylla Joel

CUSCO – PERÚ
2024
2

Radix Sort: Un Algoritmo de Ordenación Eficiente

Introducción

Radix Sort es un algoritmo de ordenación eficiente que se utiliza para ordenar


números enteros u otros datos que pueden representarse como una secuencia de dígitos. A
diferencia de otros algoritmos que se basan en comparaciones, como Quick Sort o Merge
Sort, Radix Sort clasifica los elementos por cada dígito, empezando desde el dígito menos
3

significativo hasta el más significativo. Este método, conocido como clasificación de dígitos,
es particularmente efectivo para manejar grandes volúmenes de datos de longitud fija o rango
limitado.

La eficiencia de Radix Sort se debe a su capacidad para ordenar números en tiempo


lineal O(nk)O(nk)O(nk), donde nnn es el número de elementos y kkk el número de dígitos.
Esto lo hace ideal para aplicaciones que requieren una ordenación rápida y precisa de grandes
conjuntos de datos. En esta monografía, exploraremos el funcionamiento de Radix Sort, su
fundamento teórico, un ejemplo detallado y la implementación del algoritmo en Python,
además de discutir sus ventajas y limitaciones.

Historia y Origen

Radix Sort tiene sus raíces en los primeros días de la computación, mucho antes de
que existieran las computadoras electrónicas modernas. Su concepto básico se remonta a las
máquinas de clasificación de tarjetas perforadas utilizadas para el procesamiento de datos a
principios del siglo XX.

El algoritmo fue formalmente descrito y analizado por Harold H. Seward en 1954 en


su tesis doctoral en el MIT. Seward lo llamó "distribución digital", sentando las bases para lo
4

que hoy conocemos como Radix Sort. Durante la década de 1960, con el auge de las
computadoras mainframe, Radix Sort ganó popularidad debido a su eficiencia en el
ordenamiento de grandes volúmenes de datos, especialmente en aplicaciones comerciales y
gubernamentales.

En las décadas de 1970 y 1980, con la llegada de las computadoras personales y el


desarrollo de algoritmos de ordenamiento más versátiles como QuickSort, Radix Sort perdió
algo de protagonismo. Sin embargo, ha experimentado un resurgimiento en las últimas
décadas debido a su utilidad en ciertos escenarios específicos, como el ordenamiento de
enteros en rangos limitados o cadenas de longitud fija. Actualmente, Radix Sort sigue siendo
relevante en campos como el procesamiento de big data, donde su eficiencia en ciertos tipos
de datos lo hace valioso para aplicaciones especializadas.

¿Qué es Radix Sort?

Radix Sort es un algoritmo de ordenación que organiza los elementos en una lista
ordenada de manera no comparativa. A diferencia de los algoritmos de ordenación basados en
comparaciones, como Quick Sort o Merge Sort, Radix Sort clasifica los datos procesando uno
por uno los dígitos o caracteres que componen los elementos. Este enfoque lo hace
particularmente eficiente para ciertos tipos de datos, especialmente números enteros de
longitud fija o datos que pueden representarse de manera posicional.

Fundamentos del Algoritmo

Radix Sort funciona utilizando un proceso de clasificación basado en dígitos o


posiciones, comenzando generalmente desde el dígito menos significativo (LSD por sus
siglas en inglés) y avanzando hacia el dígito más significativo (MSD). Este método
aprovecha la representación posicional de los datos, como los números en base decimal,
donde cada dígito tiene un valor basado en su posición.

Funcionamiento de Radix Sort

El funcionamiento de Radix Sort se puede explicar en los siguientes pasos:

1. Identificación de la Máxima Longitud de Dígitos: El algoritmo primero determina


la longitud máxima de los números a ordenar, que será el número de iteraciones
5

necesarias para clasificar todos los elementos. Por ejemplo, para los números 170, 45,
75 y 802, la máxima longitud de dígitos es 3.
2. Clasificación por Dígitos Menos Significativos (LSD Radix Sort): En cada paso,
Radix Sort clasifica los números en función de un dígito específico, comenzando con
el dígito menos significativo. Para realizar esta clasificación, se puede utilizar un
algoritmo de ordenación estable como Counting Sort, que agrupa los números en
"cubetas" basadas en el valor del dígito actual.
3. Agrupación y Reordenación: Después de clasificar por el dígito actual, los números
se recogen de las cubetas en el orden correspondiente. Este proceso asegura que los
números con el mismo valor en el dígito actual se mantienen en su orden relativo
original, lo que es esencial para la estabilidad del algoritmo.
4. Repetición del Proceso: El proceso de clasificación y recolección se repite para el
siguiente dígito más significativo hasta que todos los dígitos hayan sido procesados.
Al final de estas iteraciones, los números estarán completamente ordenados.

Ejemplo: Ordenación de Números Enteros

Lista de números: [3, 45, 120, 76, 9, 1, 1005, 289, 44, 8]

Objetivo: Ordenar la lista en orden ascendente utilizando Radix Sort.

Paso 1: Identificar la Longitud Máxima de Dígitos

Para determinar cuántas veces debemos realizar el proceso de ordenación,


encontramos el número con la mayor cantidad de dígitos en la lista. En este caso, 1005 tiene
4 dígitos, por lo que el algoritmo deberá procesar hasta el cuarto dígito (unidades, decenas,
centenas y millares).

Paso 2: Clasificación por el Dígito Menos Significativo (Unidades)

Clasificamos los números según el valor del dígito menos significativo (dígito de las
unidades):

● 0: [120, 1005]
● 1: [1]
● 3: [3]
● 4: [44]
6

● 5: [45]
● 6: [76]
● 8: [8]
● 9: [9, 289]

Lista después del primer paso: [120, 1005, 1, 3, 44, 45, 76, 8, 9, 289]

Paso 3: Clasificación por el Segundo Dígito (Decenas)

Ahora clasificamos los números según el segundo dígito (decenas):

● 0: [1, 3, 8, 9]
● 2: [120, 289]
● 4: [44, 45]
● 6: [76]
● 0: [1005] (el dígito de las decenas en 1005 es 0 porque no hay un segundo dígito
significativo)

Lista después del segundo paso: [1, 3, 8, 9, 1005, 120, 289, 44, 45, 76]

Paso 4: Clasificación por el Tercer Dígito (Centenas)

Clasificamos ahora por el tercer dígito (centenas):

● 0: [1, 3, 8, 9, 44, 45, 76]


● 1: [1005, 120]
● 2: [289]

Lista después del tercer paso: [1, 3, 8, 9, 44, 45, 76, 1005, 120, 289]

Paso 5: Clasificación por el Cuarto Dígito (Millares)

Finalmente clasificamos por el cuarto dígito (millares):

● 0: [1, 3, 8, 9, 44, 45, 76, 120, 289]


● 1: [1005]

Lista después del cuarto paso: [1, 3, 8, 9, 44, 45, 76, 120, 289, 1005]
7

Resultado Final

La lista final completamente ordenada es: [1, 3, 8, 9, 44, 45, 76, 120, 289, 1005].

Explicación Detallada del Proceso

1. Identificación del Máximo Número de Dígitos (k): Este paso es crucial porque
determina cuántas veces se debe repetir el proceso de clasificación. En nuestro
ejemplo, 1005 tiene 4 dígitos, por lo que realizamos cuatro iteraciones.
2. Clasificación en Cada Iteración: En cada iteración, Radix Sort clasifica los números
en función de un dígito específico, comenzando desde el dígito menos significativo y
avanzando hacia el más significativo.
○ Para cada dígito, los números se distribuyen en "cubetas" basadas en el valor
del dígito actual. Por ejemplo, durante la primera iteración, los números se
clasifican según el dígito de las unidades.
○ Después de distribuir los números en las cubetas, se recogen en orden. Este
proceso de recolección mantiene el orden relativo de los números con el
mismo valor de dígito, lo que es esencial para mantener la estabilidad del
algoritmo.

Aplicación del Algoritmo Radix Sort en Python


8

Explicación del Código

● Función counting_sort(arr, exp)


○ Propósito: Ordena el array arr según el dígito en la posición exp (unidades,
decenas, etc.).
○ Proceso:
■ Contar Ocurrencias: Calcula cuántas veces aparece cada dígito en la
posición actual (exp).
■ Convertir Conteo a Posiciones: Ajusta el array count para que refleje
las posiciones finales de los elementos en el array de salida.
■ Construir Array de Salida: Usa el array count para construir el array
output ordenado.
■ Copiar Resultados: Copia el contenido de output de nuevo a arr.
● Función radix_sort(arr)
○ Propósito: Ordena el array arr utilizando el algoritmo Radix Sort.
○ Proceso:
9

■ Encuentra el Número Máximo: Determina el número máximo en el


array para saber cuántos dígitos procesar.
■ Ordena por Cada Dígito: Itera sobre cada posición de dígito (unidades,
decenas, centenas, etc.) y llama a counting_sort para ordenar el array
basado en esa posición de dígito.

Resultado

● Entrada: [3, 45, 120, 76, 9, 1, 1005, 289, 44, 8]


● Salida: [1, 3, 8, 9, 44, 45, 76, 120, 289, 1005]

Ventajas del Radix Sort

1. Eficiencia en Datos de Longitud Fija: Radix Sort es extremadamente eficiente para


ordenar números enteros o cadenas de longitud fija, ya que puede hacerlo en tiempo
lineal O(nk), donde n es el número de elementos y k es el número de dígitos.
2. Ordenación Estable: Radix Sort es un algoritmo estable, lo que significa que
preserva el orden relativo de los elementos con valores iguales.
3. No Comparativo: A diferencia de otros algoritmos de ordenación, Radix Sort no
realiza comparaciones entre los elementos, lo que lo hace útil en escenarios
específicos donde las comparaciones son costosas.
4. Escalabilidad: Funciona bien con grandes volúmenes de datos, especialmente cuando
los valores de los elementos tienen una longitud limitada.

Desventajas del Radix Sort

1. Requiere Espacio Adicional: Radix Sort necesita espacio adicional para almacenar
los contenedores temporales utilizados en cada paso de clasificación, lo que puede ser
una desventaja en sistemas con memoria limitada.
2. No es Generalmente Aplicable: No es tan versátil como los algoritmos basados en
comparaciones, ya que su eficiencia depende de la longitud y el rango de los datos a
ordenar.
3. Complejidad de Implementación: Puede ser más complejo de implementar
correctamente en comparación con otros algoritmos de ordenación más intuitivos.
10

4. Dependencia de la Representación de los Datos: La eficiencia de Radix Sort está


muy ligada a cómo se representan los datos. Si los datos no se pueden representar de
manera efectiva como una secuencia de dígitos, el algoritmo pierde su ventaja.

Cuadro Comparativo
11

Conclusiones

Radix Sort se destaca como un algoritmo de ordenación eficiente y especializado,


especialmente adecuado para ordenar números enteros o cadenas de longitud fija. Su
capacidad para ordenar en tiempo lineal O(nk) lo hace una opción atractiva para grandes
volúmenes de datos con características específicas. Sin embargo, su eficiencia depende en
gran medida de la representación y el rango de los datos, y requiere espacio adicional para su
funcionamiento.

En comparación con otros algoritmos de ordenación como Quick Sort, Merge Sort y
Bubble Sort, Radix Sort muestra una serie de ventajas y desventajas. Mientras que Radix Sort
es eficiente y estable, su implementación puede ser más compleja y menos versátil en
comparación con los algoritmos basados en comparaciones. Quick Sort, aunque rápido en
promedio, no es estable y puede tener un rendimiento pobre en el peor de los casos. Merge
Sort es estable y garantiza un rendimiento consistente, pero utiliza más memoria. Bubble
Sort, aunque simple de implementar, es ineficiente para grandes conjuntos de datos.
12

Referencias bibliográficas

1. Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). *Introduction to
algorithms* (3rd ed.). MIT Press.

2. Sedgewick, R., & Wayne, K. (2011). *Algorithms* (4th ed.). Addison-Wesley.3.


Weiss, M. A. (2014). *Data structures and algorithm analysis in C++* (4th ed.). Pearson.

4. Ahn, H., & Kwon, D. (2006). A new efficient radix sorting algorithm. *Journal of
Computer Science and Technology*, 21(6), 874-881. https://doi.org/10.1007/s11390-006-
0874-0

5. Knuth, D. E. (1998). *Sorting and searching* (The Art of Computer Programming,


Vol. 3). Addison-Wesley.

6. GeeksforGeeks. (n.d.). Radix sort algorithm. Retrieved July 25, 2024, from
[https://www.geeksforgeeks.org/radix-sort/](https://www.geeksforgeeks.org/radix-sort/)

7.TutorialsPoint. (n.d.). Radix sort - A detailed explanation. Retrieved July 25, 2024,
from https://www.tutorialspoint.com/data_structures_algorithms/radix_sort_algorithm

También podría gustarte