我正在寻找一种排序算法,该算法可以处理大量数据,即,即使整个数据集无法一次保存在主存储器中,也可以使用。
我到目前为止发现的唯一候选对象是合并排序:您可以以这种方式实现该算法,即它在每次合并时都扫描您的数据集,而无需一次将所有数据保存在主存储器中。在本文的“ 与磁带机一起使用”部分中介绍了我想到的合并排序方式。
我认为这是一个很好的解决方案(复杂度为O(nx log(n)),但是我很想知道是否还有其他(可能更快)的排序算法可以处理不适合主内存的大型数据集。
编辑
这是答案所要求的更多详细信息:
- 数据需要定期分类,例如每月一次。我不需要插入一些记录,也不需要对数据进行递增排序。
- 我的示例文本文件大约是1 GB UTF-8文本,但是我想总体上解决该问题,即使该文件是20 GB。
- 它不在数据库中,并且由于其他限制,它不能在数据库中。
- 数据被其他人作为文本文件转储,我有自己的代码读取此文本文件。
- 数据的格式是文本文件:换行符是记录分隔符。
我想到的一种可能的改进是将文件拆分为足够小的文件,以便可以在内存中排序,最后使用上面描述的算法合并所有这些文件。