我知道解决这个问题的一种方法是对单词及其相应的单词计数进行哈希处理。然后遍历哈希地图并找出前三名。
有没有更好的方法来解决这个问题?如果我使用BST而不是HashMap会更好吗?
答案 0 :(得分:1)
Trie是一个很好的数据结构。不需要哈希计算,插入和更新的时间复杂度为字典大小O(1)
。
答案 1 :(得分:0)
HashMap或BST是合理的选择。每种语言的表现取决于您需要计算的单词数量。在这些情况下,探查器是您的朋友(VisualVM是一个合理的选择)。
答案 2 :(得分:0)
我敢打赌哈希表在这种情况下会有更好的表现,因为可能有很多不同的词。查询将O(1)
超过O(log N)
。
答案 3 :(得分:0)
基本上 histogram 是这样做的标准方法,您可以选择要用于直方图界面的实现,它们之间的区别实际上是特定于实例的 - 每个有其优点和缺点。
您可能还需要考虑使用 map-reduce 设计来获取字数:
map(doc):
for each word:
emitIntermediate(word,"1")
reduce(word,list<string>):
emit(word,size(list))
如果你有很多文档,这种方法可以提供很好的可扩展性 - 使用map-reduce接口,或者如果你喜欢functional programming,可以使用优雅的解决方案。
注意:此方法与哈希解决方案基本相同,因为映射器使用散列传递(key,values)
元组。