我正在尝试解决如何高效地对一个无法在内存中容纳的大型数据集进行排序的问题。从高层次上看,显而易见的答案是使用一些标准算法对适合在内存中容纳的整块进行排序,将这些块写入磁盘,然后合并它们。 合并它们是问题所在。
假设数据分成C个块,因此我有C个文件要合并。如果我一次进行C路归并,则技术上我有一个O(N ^ 2)的算法,但只需要执行O(N)次向磁盘写入操作。如果我将它们迭代地合并为C / 2个文件,C / 4个文件等,则我有一个O(N log N)的算法,但必须执行O(N log N)次向磁盘写入操作,因此具有巨大的常数项。
这个难题的典型解决方案是什么? 有没有好的解决方案?