假设有一个算法X,需要2个步骤才能最终输出到文件。
我们还要说收集的数据太大而无法保存在RAM中,并在第2步采取行动之前写入文件。
例如,获取包含数字的500GB文件,作为步骤1的输出。每行一个数字。第2步必须按升序对行进行排序。
第2步如何在不读取输入文件的情况下有效地对数字进行排序?
答案 0 :(得分:1)
最有效的方法是将交换空间增加500 GB并进行单一排序,让操作系统内存管理器处理缓存。
另一种方法是将数据分成适合的部分,例如250个2GB文件。对每个进行排序,然后对结果进行合并排序。
答案 1 :(得分:1)
" Gnu CoreUtils"可用作源代码,或内置于Linux发行版中的可用于Windows的预编译,包含Gnu拆分和Gnu排序例程。
如果您的数据可以排列成每个分类记录在一个单独的行上,那么split函数会将一个大文件拆分成多个较小的文件。每个较小的文件可以使用Gnu排序函数在内存中单独排序,最后所有排序的较小文件可以合并排序回一个大文件,另一个选项为Gnu sort。
http://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html Interview puzzle: Sorting a million number input with limited memory