Szukam algorytmów sortowania, które mogą działać na dużej ilości danych, tj. Mogą działać nawet wtedy, gdy cały zestaw danych nie może być jednocześnie przechowywany w pamięci głównej.
Jedynym kandydatem, którego do tej pory znalazłem, jest sortowanie według scalania: możesz zaimplementować algorytm w taki sposób, że skanuje on zestaw danych przy każdym scaleniu bez zatrzymywania wszystkich danych w pamięci głównej na raz. Odmiana sortowania scalonego, o której myślę, została opisana w tym artykule w rozdziale Używanie z napędami taśm .
Myślę, że to dobre rozwiązanie (ze złożonością O (nx log (n)), ale jestem ciekawy, czy istnieją inne (być może szybsze) algorytmy sortowania, które mogą działać na dużych zestawach danych, które nie mieszczą się w pamięci głównej.
EDYTOWAĆ
Oto kilka dodatkowych informacji, zgodnie z wymaganiami odpowiedzi:
- Dane muszą być sortowane okresowo, np. Raz w miesiącu. Nie muszę wstawiać kilku rekordów i stopniowo sortować dane.
- Mój przykładowy plik tekstowy ma około 1 GB tekstu UTF-8, ale ogólnie chciałem rozwiązać problem, nawet jeśli plik miałby, powiedzmy, 20 GB.
- Nie ma go w bazie danych i ze względu na inne ograniczenia nie może być.
- Dane są zrzucane przez innych jako plik tekstowy, mam własny kod do odczytu tego pliku tekstowego.
- Format danych to plik tekstowy: znaki nowej linii to separatory rekordów.
Jednym z możliwych ulepszeń, które miałem na myśli, było podzielenie pliku na pliki, które są wystarczająco małe, aby można je było posortować w pamięci, a na koniec scalić wszystkie te pliki przy użyciu algorytmu, który opisałem powyżej.