Sto cercando algoritmi di ordinamento che possano funzionare su una grande quantità di dati, cioè che possano funzionare anche quando l'intero set di dati non può essere conservato nella memoria principale contemporaneamente.
L'unico candidato che ho trovato finora è unire l'ordinamento: è possibile implementare l'algoritmo in modo tale da scansionare il tuo set di dati ad ogni unione senza tenere tutti i dati nella memoria principale contemporaneamente. La variazione del tipo di unione che ho in mente è descritta in questo articolo nella sezione Uso con unità nastro .
Penso che questa sia una buona soluzione (con complessità O (nx log (n)) ma sono curioso di sapere se ci sono altri algoritmi di ordinamento (forse più veloci) che possono funzionare su grandi set di dati che non rientrano nella memoria principale.
MODIFICARE
Ecco alcuni dettagli in più, come richiesto dalle risposte:
- I dati devono essere ordinati periodicamente, ad esempio una volta al mese. Non è necessario inserire alcuni record e i dati devono essere ordinati in modo incrementale.
- Il mio file di testo di esempio è di circa 1 GB di testo UTF-8, ma volevo risolvere il problema in generale, anche se il file fosse, diciamo, 20 GB.
- Non si trova in un database e, a causa di altri vincoli, non può esserlo.
- I dati vengono scaricati da altri come file di testo, ho il mio codice per leggere questo file di testo.
- Il formato dei dati è un file di testo: i caratteri di nuova riga sono separatori di record.
Un possibile miglioramento che avevo in mente era quello di dividere il file in file abbastanza piccoli da essere ordinati in memoria e infine unire tutti questi file usando l'algoritmo che ho descritto sopra.