14

有一个大文件是动态变化的。我们不断地在其中添加一些词。您将如何跟踪每时每刻的前 10 个热门词汇?

我在博客中发现了这个问题,但我无法理解答案。答案是:hash table + min-heap

我明白为什么哈希表而不是最小堆部分,有人可以帮助我吗?

4

2 回答 2

8

如果是,top 10 trending words那么您应该使用 amax-heap和 a hash-table

当一个新词被添加到文件中时:

  • Createx一个带有x.key=word和的新元素x.count=1
  • Add xhash-table. O(1).
  • Add xmax-heap. O(lgn).

当现有单词添加到文件中时:

  • Find xhash-table. O(1).
  • Update x.countx.count++.

当需要检索top 10 trending wordsthen 时:

  • Extract从 10 次max-heap10*O(lgn)=O(10*lgn)=O(lgn).

如您所见,所有需要的操作最多在O(lgn).

于 2012-08-27T05:38:02.393 回答
1

如果你只想保持前 10 名,那么使用最大堆就大材小用了。将 10 个条目保存在有序数组中会更简单、更快。

对于排序,只需使用从数组底部开始的插入排序。如果需要,您将必须检查候选人已经进入前十名并更新其位置的情况。

于 2012-08-28T07:05:20.473 回答