Darksort es un algoritmo de ordenamiento que se presentó por primera vez en un artículo publicado en el International Journal of Soft Computing and Engineering en mayo de 2018 [1] . El algoritmo está diseñado para ordenar valores enteros y tiene una complejidad temporal y espacial de O(n), lo que lo convierte en un algoritmo de ordenamiento lineal.
El algoritmo funciona creando primero una tabla de acceso directo (DAT) que almacena la cantidad de ocurrencias de cada valor único en la matriz de entrada. Luego, la DAT se utiliza para crear una matriz ordenada, que se devuelve como salida del algoritmo.
Utiliza estructuras de datos avanzadas para mejorar la velocidad de ordenación. Es un algoritmo de ordenación de números enteros. Toma una matriz ordenada o no ordenada Array y un número entero Arraysize que describe el tamaño de la matriz, así como el máximo en <maxvariant>.
def DarksortDat ( Matriz , Tamaño de matriz ): máx = 0 ; para i en el rango ( 0 , Arraysize ): si ( máximo < Matriz [ i ]): máx = Matriz [ i ] nueva matriz = [ 0 ] * ( máx + 1 ) para i en el rango ( 0 , Arraysize ): newarray [ Matriz [ i ]] += 1 cuenta = 0 para i en el rango ( 0 , ( máx + 1 )): var = nueva matriz [ i ] mientras ( var > 0 ): Matriz [ count ] = i contar += 1 var -= 1 Devolver matriz
def DarksortDat < maxvariant > ( Matriz , Tamaño de matriz , máx ): nueva matriz = [ 0 ] * ( máx + 1 ) para i en el rango ( 0 , Arraysize ): newarray [ Matriz [ i ]] += 1 cuenta = 0 para i en el rango ( 0 , ( máx + 1 )): var = nueva matriz [ i ] mientras ( var > 0 ): Matriz [ count ] = i contar += 1 var -= 1 Devolver matriz
El algoritmo darksort original utiliza una tabla de acceso directo (DAT) para almacenar la cantidad de ocurrencias de cada valor único en la matriz de entrada. La DAT se utiliza luego para crear una matriz ordenada.
Esta variante utiliza un árbol AVL para almacenar los datos ordenados, lo que permite realizar operaciones de búsqueda e inserción de manera eficiente. Esta variante tiene la ventaja de poder realizar varias operaciones, como búsquedas e inserciones, en tiempo logarítmico.
Esta variante utiliza un montón para almacenar los datos ordenados, lo que permite recuperarlos en un tiempo casi constante. Esta variante es útil para aplicaciones en las que es necesario recuperar los datos de forma casi constante, como por ejemplo para mostrar anuncios a los clientes.
Darksort se puede extender a cualquier estructura de datos que pueda crear e insertar. Esta variante permite que Darksort se extienda a cualquier estructura de datos que admita operaciones de creación e inserción. En general, DarksortDAT es la variante más importante, pero las versiones de la estructura de datos pueden mejorar la complejidad espacial. La complejidad espacial es exactamente el doble del tamaño de la matriz de entrada, así como de los espacios incluidos en la matriz finalarray máxima. La complejidad espacial es grande porque darksort mantiene espacios para los números que faltan en el conjunto de datos en la memoria. [2]
def DarksortGDS ( Matriz , Tamaño de matriz ): máx = 0 ; para i en el rango ( 0 , Arraysize ): si ( máximo < Matriz [ i ]): máx = Matriz [ i ] nueva matriz = [ 0 ] * ( máx + 1 ) para i en el rango ( 0 , Arraysize ): newarray [ Matriz [ i ]] += 1 Crear . GDS #(AVL o Heap por ejemplo) para i en el rango ( 0 , ( máx + 1 )): var = nueva matriz [ i ] mientras ( var > 0 ): GDS . insertar ( i ) var -= 1 devolver GDS
Darksort es un algoritmo de ordenamiento estable. Se puede cambiar a orden descendente iterando hacia atrás sobre la nueva matriz en el bucle for final.
La complejidad espacial de Darksort es O(n), lo que significa que la cantidad de memoria requerida por el algoritmo crece linealmente con el tamaño de la matriz de entrada. Sin embargo, la complejidad espacial se puede mejorar utilizando estructuras de datos como árboles AVL o heaps. [3]
Darksort es superior a otros algoritmos de ordenamiento lineal en determinadas circunstancias. Por ejemplo, Darksort es más rápido que el ordenamiento por conteo cuando no hay demasiados espacios vacíos en los datos. Darksort también es más rápido que el ordenamiento por radix cuando el tamaño de las palabras es grande y las claves son muy distintas. [4]
Darksort es un algoritmo de ordenamiento lineal único con un rendimiento superior al de todos los demás algoritmos de ordenamiento lineal en determinadas circunstancias, aunque la complejidad espacial puede ser mayor que en otras. Es un algoritmo de ordenamiento de números enteros.