Saya mencari algoritma pengurutan yang dapat bekerja pada sejumlah besar data, yaitu yang dapat bekerja bahkan ketika seluruh kumpulan data tidak dapat disimpan dalam memori utama sekaligus.
Satu-satunya kandidat yang saya temukan sampai sekarang adalah penggabungan: Anda dapat mengimplementasikan algoritma sedemikian rupa sehingga memindai kumpulan data Anda di setiap penggabungan tanpa memegang semua data di memori utama sekaligus. Variasi jenis penggabungan yang ada dalam pikiran saya dijelaskan dalam artikel ini di bagian Penggunaan dengan tape drive .
Saya pikir ini adalah solusi yang baik (dengan kompleksitas O (nx log (n)) tetapi saya ingin tahu apakah ada algoritma pengurutan lainnya (mungkin lebih cepat) yang dapat bekerja pada set data besar yang tidak sesuai dengan memori utama.
EDIT
Berikut ini beberapa perincian lebih lanjut, sebagaimana disyaratkan oleh jawaban:
- Data perlu disortir secara berkala, misalnya sebulan sekali. Saya tidak perlu memasukkan beberapa catatan dan data diurutkan secara bertahap.
- Contoh file teks saya adalah sekitar 1 GB UTF-8 teks, tetapi saya ingin menyelesaikan masalah secara umum, bahkan jika file tersebut, katakanlah, 20 GB.
- Itu tidak dalam database dan, karena kendala lain, itu tidak bisa.
- Data dibuang oleh orang lain sebagai file teks, saya punya kode sendiri untuk membaca file teks ini.
- Format data adalah file teks: karakter baris baru adalah pemisah rekaman.
Satu kemungkinan peningkatan yang saya pikirkan adalah untuk membagi file menjadi file yang cukup kecil untuk diurutkan dalam memori, dan akhirnya menggabungkan semua file ini menggunakan algoritma yang saya jelaskan di atas.