我现在正在准备一个面试,这让我想起了在之前的一次面试中有人问过我的一个问题,大概是这样的:
“有人要求你设计一些软件,连续显示谷歌上排名前10位的搜索词。你可以访问一个 feed,该 feed 提供了无穷无尽的实时搜索条目,这些条目目前正在谷歌上搜索。描述您将使用什么算法和数据结构来实现此。你要设计两个变种:
(i)显示有史以来最常用的10个搜索词(即从你开始阅读提要开始)。
(ii)只显示过去一个月最热门的10个搜寻项目,每小时更新一次。
你可以用一个近似值来获得前10名,但你必须证明你的选择是正确的。”
我在这次采访中失败了,仍然不知道如何实现这一点。
第一部分要求在无限列表的一个不断增长的子序列中列出10个最常见的项。我研究了选择算法,但找不到任何在线版本来解决这个问题。
第二部分使用有限的列表,但是由于处理的数据量很大,您不能真正将整个月的搜索条件存储在内存中,并且每小时计算一个直方图。
这个问题因为前10名列表不断更新而变得更加困难,所以你需要通过一个滑动窗口来计算你的前10名。
Any ideas?