【发布时间】:2013-02-07 08:09:31
【问题描述】:
我有一个巨大的文本文件(大于可用的 RAM 内存)。我需要计算所有单词的频率并将单词和频率计数输出到一个新文件中。结果应按频率计数的降序排序。
我的方法:
- 对给定文件进行排序 - 外部排序
- 按顺序统计每个单词的出现频率,将计数存储在另一个文件中(与单词一起)
- 根据频率计数对输出文件进行排序 - 外部排序。
我想知道是否有更好的方法来做到这一点。我听说过基于磁盘的哈希表吗?或 B+ 树,但以前从未尝试过。
注意:我在 SO 上看到过类似的问题,但没有一个必须解决数据大于内存的问题。
编辑:基于 cmets,一致认为实践中的字典应该适合当今计算机的内存。但是让我们假设一个单词词典,它大到无法放入记忆中。
【问题讨论】:
-
您正在使用哪种编程语言?
-
所有不同的单词仍然比 RAM 大吗?
-
如果只想统计字数,可以逐行读取,也可以按文件流读取。您不需要将整个文件加载到 RAM 中。
-
文件中有多少个不同的字词?如果您不存储重复项,它们是否适合内存?
-
真的吗?多少内存?即使是一本完整的字典也适合今天的计算机 RAM...
标签: java algorithm data-structures text-files word-count