Büyük miktarda veri üzerinde çalışabilen, yani tüm veri seti aynı anda ana bellekte tutulamadığında bile çalışabilen sıralama algoritmaları arıyorum.
Şimdiye kadar bulduğum tek aday birleştirme sıralamasıdır: algoritmayı, tüm verileri bir kerede ana bellekte tutmadan her bir birleştirme sırasında veri kümenizi tarayacak şekilde uygulayabilirsiniz. Aklımda olan birleştirme sıralaması varyasyonu Bu makalede Teyp sürücüleri ile kullanma bölümünde açıklanmaktadır .
Bu iyi bir çözüm olduğunu düşünüyorum (karmaşıklık O (nx log (n)) ile ama ana belleğe sığmayan büyük veri kümeleri üzerinde çalışabilecek başka (muhtemelen daha hızlı) sıralama algoritmaları olup olmadığını bilmek merak ediyorum.
DÜZENLE
Yanıtların gerektirdiği gibi bazı ayrıntılar:
- Verilerin periyodik olarak, örneğin ayda bir kez sıralanması gerekir. Birkaç kayıt eklemek ve veri kademeli olarak sıralanmış olması gerekmez.
- Örnek metin dosyam yaklaşık 1 GB UTF-8 metnidir, ancak dosya 20 GB olsa bile sorunu genel olarak çözmek istedim.
- Veritabanında değildir ve diğer kısıtlamalar nedeniyle olamaz.
- Veriler başkaları tarafından bir metin dosyası olarak dökülür, bu metin dosyasını okumak için kendi kodum var.
- Verilerin formatı bir metin dosyasıdır: yeni satır karakterleri kayıt ayraçlarıdır.
Aklıma gelen olası bir gelişme, dosyayı bellekte sıralanacak kadar küçük dosyalara bölmek ve son olarak yukarıda açıkladığım algoritmayı kullanarak tüm bu dosyaları birleştirmekti.