algorithm - 如何对可变长度的大句子文件进行排序?

标签 algorithm sorting ranking

假设我有一个包含很多行字符串的文件,如何按照字典顺序对字符串行进行排序?

详细信息:

  • 文件大小约为32GBytes;
  • 每一行可视为一个句子,由空格分隔的单词个数可变,即每一行的长度不固定;
  • 每个单词只包含 ASCII 字符;
  • 我只有 8 GBytes 的内存,但没有无限的磁盘空间;

我能弄清楚的是外部归并排序,对于这个特定问题有没有更好的主意?

最佳答案

文件大小和内存之间的差异并不大,因此我建议根据首字母将文件拆分为更多较小的文件 - 或者如果不够,则根据前两个字母拆分。

然后您可以使用快速排序对它们中的每一个进行排序并保存,然后当它们被排序时,您可以将它们放回一起。

仍然是 O(N) 次 I/O 操作和 O(n*log(N)) 次 CPU 操作。

PS:外部归并排序也是一个好方法。

关于algorithm - 如何对可变长度的大句子文件进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940908/

相关文章:

查找图中哈密顿路径数的算法

algorithm - 当两条边具有相同权重时的 Dijkstra 算法

java - 我正在尝试编写一个带有升序和降序选项的选择排序

java - 如何使用 lambda 表达式基于一个变量对对象列表进行排序?

algorithm - 具有具有流动能力的节点的图的 Edmonds-Karp 算法

c++ - 优化或新算法来解决这个问题?

algorithm - 为什么我们对排序一个已经排序的文件需要多长时间感兴趣?

mysql - 信息架构和检索 - 确定查询的优先级

math - 如何减轻排名系统中的跟风效应(投票行为)?

algorithm - 按受欢迎程度对歌曲列表进行排序