Estoy buscando algoritmos de clasificación que puedan funcionar en una gran cantidad de datos, es decir, que puedan funcionar incluso cuando no se pueda mantener todo el conjunto de datos en la memoria principal a la vez.
El único candidato que he encontrado hasta ahora es el tipo de combinación: puede implementar el algoritmo de tal manera que escanee su conjunto de datos en cada combinación sin mantener todos los datos en la memoria principal a la vez. La variación del tipo de fusión que tengo en mente se describe en este artículo en la sección Usar con unidades de cinta .
Creo que esta es una buena solución (con complejidad O (nx log (n)), pero tengo curiosidad por saber si hay otros algoritmos de clasificación (posiblemente más rápidos) que puedan funcionar en grandes conjuntos de datos que no caben en la memoria principal.
EDITAR
Aquí hay algunos detalles más, como lo requieren las respuestas:
- Los datos deben clasificarse periódicamente, por ejemplo, una vez al mes. No necesito insertar algunos registros y ordenar los datos de forma incremental.
- Mi archivo de texto de ejemplo tiene aproximadamente 1 GB de texto UTF-8, pero quería resolver el problema en general, incluso si el archivo fuera, digamos, 20 GB.
- No está en una base de datos y, debido a otras restricciones, no puede estarlo.
- Los datos son volcados por otros como un archivo de texto, tengo mi propio código para leer este archivo de texto.
- El formato de los datos es un archivo de texto: los nuevos caracteres de línea son separadores de registros.
Una posible mejora que tenía en mente era dividir el archivo en archivos que sean lo suficientemente pequeños como para ordenarlos en la memoria, y finalmente fusionar todos estos archivos usando el algoritmo que he descrito anteriormente.