【发布时间】:2016-04-29 14:28:08
【问题描述】:
假设我有一个多行字符串的文件,如何按字典顺序排列字符串的行数?
详情:
- 文件大小约为32GBytes;
- 每一行可视为一个句子,其中包含可变数量的单词,以空格分隔,即每行的长度不固定;
- 每个单词只包含 ASCII 字符;
- 我只有 8 GBytes 内存,但磁盘空间不受限制;
我能弄清楚的是一个外部合并排序,对于这个指定的问题有什么更好的主意吗?
【问题讨论】:
-
外部合并排序听起来是个不错的选择。您也可以考虑根据(比如说)第一个字符来拆分文件——首先制作一个小直方图来弄清楚如何拆分它——然后对每个生成的子文件进行排序并将它们连接起来。 (您可以实际编写子文件,也可以通过单独的 32GB 大文件动态生成每个子文件。)
-
很难比
sort < infile > outfile做得更好。 GNUsort(可能还有 Windows 版本)自动处理比内存大得多的文件,必要时使用高效的多通道合并。