一尘不染

查找前10个搜索词的算法

algorithm

我目前正在准备面试,它使我想起了上次面试中曾经被问到过的一个问题:

“已经要求您设计一些软件,以连续显示Google上排名前10位的搜索词。您可以访问Feed,该Feed提供了当前在Google上搜索的无穷实时搜索词源。请描述哪种算法和数据结构您将用来实现此目的。您将设计两个变体:

(i)显示所有时间(即自您开始阅读提要以来)的前10个搜索词。

(ii)仅显示过去一个月的前10个搜索字词,每小时更新一次。

您可以使用一个近似值来获得前十名的列表,但您必须证明自己的选择是正确的

第一部分要求在无限列表的不断增长的子序列中提供10个最频繁的项。我研究了选择算法,但找不到任何在线版本来解决此问题。

第二部分使用有限列表,但是由于要处理大量数据,您无法真正将整个月的搜索字词存储在内存中,也无法每小时计算一次直方图。

前十名列表不断更新的事实使问题变得更加棘手,因此您需要以某种方式在滑动窗口上计算前十名。

有任何想法吗?


阅读 267

收藏
2020-07-28

共1个答案

一尘不染

好吧,看起来数据量很大,存储所有频率的成本也许很高。 当数据量太大 以至于我们无法希望将其全部存储时,我们进入 数据流算法领域

该领域的有用书籍:
Muthukrishnan-“数据流:算法和应用程序”

我从上文中选择的与该问题密切相关的参考文献: Mokuani,Manku-“数据流上的近似频率计数”
[pdf]

顺便说一下,斯坦福大学的Motwani(编辑)是一本非常重要的“随机化算法”书的作者。
本书的第11章处理这个问题编辑: 对不起,不好的参考,该特定的章节是在另一个问题上。经过检查后,我建议使用
Muthukrishnan的

书中的
5.1.2节
__
(可在线获取)。

嘿,不错的面试问题。

2020-07-28