首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊面试探查

亚马逊面试探查
EN

Stack Overflow用户
提问于 2012-08-27 03:04:04
回答 2查看 5.5K关注 0票数 14

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

我在一个博客上发现了这个问题,但是我不能理解答案。答案是:哈希表+ min-heap

我理解为什么哈希表而不是min-heap部分,有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-27 13:38:02

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

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

  • Create a new element x with x.key=word and x.count=1.
  • Add x to the hash-tableO(1).
  • Add x连接到max-heapO(lgn).

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

hash-table中的

  • Find x。到x.count++.

O(1).

  • Update x.count

当需要检索top 10 trending words时:

max-heap执行

  • Extract 10次。10*O(lgn)=O(10*lgn)=O(lgn).

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

票数 7
EN

Stack Overflow用户

发布于 2012-08-28 15:05:20

如果您只想保留前10位,那么使用max-heap就太过分了。将这10个条目保存在一个排序的数组中会更简单、更快。

对于排序,只需从数组底部开始使用插入排序即可。你必须检查候选人是否已经在前十名中,如果需要的话,更新它的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12133026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档