【问题标题】:Counting repeated words in a file计算文件中的重复单词
【发布时间】:2011-04-25 22:34:32
【问题描述】:

目标:查找文件中所有单词的计数。文件包含 1000 多个单词

我的方法:使用HashMap<String,Integer>() 来存储和统计每个单词在文件中出现的次数。

问题: HashMap() 是最好的方法还是使用二叉树来确保更快的查找速度会更好,因为文件中有大量的单词?

或者有更好的方法吗?

HashMap 会导致大量内存开销,这是不希望的。

【问题讨论】:

  • 让我们为此创建一个代码高尔夫 ;)

标签: java string data-structures hashmap


【解决方案1】:

所以你在寻找不同的词?

我能想到的最有效的结构是Trie

这是一个开源实现:Google Code patricia-trie

虽然我倾向于同意 Mitch Wheat 的观点——听起来 HashMap 应该可以正常工作(最好避免过早优化......所以你应该使用 HashMap 直到你证明它是一个瓶颈)

【讨论】:

    【解决方案2】:

    1000 - 10000 字非常小。

    Hashmap 就可以了。

    【讨论】:

      【解决方案3】:

      我建议在 Perl/PHP 中执行这样的任务。用机关枪杀死苍蝇是非常困难的。

      【讨论】:

        【解决方案4】:

        HashMap 是完美的。你需要存储

        • 遇到的每个单词的副本
        • 每个的计数

        HashMap 真的不会存储更多的东西!

        【讨论】:

          【解决方案5】:
          1. 假设字符串不是很长,Michael 建议的“Trie”方法会很好。 Trie 中的节点可以存储字符和以该字符结尾的字符串的“计数”。这应该会大大降低存储需求(再次假设字符串是均匀分布和重叠的)

          2. 假设计数不会在调用之间保持不变,在使用 HashMap 时,让 Map 来自 Integer => Integer - 其中“key”是字符串的哈希码并为计数赋值。这应该是一个有效的解决方案 - 具有快速查找和减少内存占用的特点。

          【讨论】:

            猜你喜欢
            • 2013-12-09
            • 2014-08-11
            • 2021-04-13
            • 1970-01-01
            • 1970-01-01
            • 2016-01-23
            • 1970-01-01
            • 2013-05-05
            • 1970-01-01
            相关资源
            最近更新 更多