Como se ha mencionado en otras respuestas, puede utilizar un enfoque similar al algoritmo de combinación de clasificación.
Imagine que sus datos están en un disco duro (almacenamiento secundario).
- Lea fragmentos de 1 GB (o menos) del archivo en una matriz.
- Ordene los elementos de esta matriz utilizando cualquier algoritmo de ordenación in situ.
- Escriba el resultado en un nuevo archivo (los llamaremos archivos de salida intermedios).
- Repita los pasos 1 a 3 hasta que todos los datos se lean desde el archivo de entrada.
Durante el proceso de fusión, siga estos pasos:
- ¿Cuántas computadoras hay en un Tesla X?
- ¿Qué tarjeta gráfica y HDD serán los más adecuados para mi PC?
- ¿La placa base más barata compatible con AMD FX6300?
- ¿Qué es lo mejor que se puede hacer con una computadora portátil vieja?
- ¿Cómo se comunican las computadoras entre sí?
- Abra todos los archivos de salida intermedios simultáneamente.
- Crea una lista ordenada. Los elementos de esta lista son un par de valores. Un valor es la ID del archivo desde el que se leyó el elemento de datos, y el segundo valor es el elemento de datos en sí. La lista se ordena según los valores del elemento de datos. Inserte un elemento de datos de cada archivo de salida intermedio.
- Ahora lea un elemento de la lista ordenada (el elemento más pequeño) y escríbalo en su archivo final de salida combinada.
- Cada vez que extraiga el elemento más pequeño de la lista ordenada, use el ID de archivo de ese elemento para extraer un nuevo elemento de datos del archivo de salida intermedio correspondiente e insértelo en la lista ordenada.
- Continúe este proceso hasta que todos los elementos de datos se escriban en el archivo final de salida combinada.
Cuando implemente esto, asegúrese de que su función de transmisión de archivos no asigne archivos completos a la RAM. De lo contrario, usarás mucha memoria y esto superará el propósito de toda esta farsa. En el pasado, QDataStream :: readRawData () y QDataStream :: writeRawData () en Qt framework 5.4 me han funcionado bien. No he probado otros métodos para la transmisión de archivos, por lo que no puedo hacer ningún comentario elaborado al respecto.