亚马逊采访概率

时间:2012-08-26 19:04:04

标签: algorithm

有一个很大的单词文件正在动态变化。我们不断在其中添加一些词语。您如何在每个时刻跟踪前10个趋势词?

我在博客中发现了这个问题,但我无法理解答案。 答案是:哈希表+最小堆

我理解为什么hashtable而不是min-heap部分,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:7)

如果是top 10 trending words,那么您应该使用max-heaphash-table

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

  • Create一个新元素x x.key=wordx.count=1
  • Add xhash-tableO(1)
  • Add xmax-heapO(lgn)

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

    {li> Find x位于hash-tableO(1)
  • Update x.countx.count++

当需要检索top 10 trending words时:

  • Extract来自max-heap 10次。 10*O(lgn)=O(10*lgn)=O(lgn)

如您所见,所有必需的操作最多都在O(lgn)完成。

答案 1 :(得分:1)

如果你只想保持前10名,那么使用max-heap是一种过度杀伤力。将10个条目保存在排序的数组中会更简单,更快。

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