海量数据处理由于网上几篇文章已经总结的比较详细, 这里就不再铺开阐述;下面👇主要讲涉及的数据结构的特点以及背后的逻辑做相关说明;
寻找热门查询,300
万个查询字符串中统计最热门的10
个查询?
分析:这些查询串的重复度比较高,虽然总数是1千万
,但如果除去重复后,不超过3百万
个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。
所以我们放弃分而治之/hash映射的步骤,直接上hash_map
统计,然后排序。So
,针对此类典型的TOP K
问题,采取的对策往往是:hash_map
+ 堆。
解法:(有重复/数据量减少)
hash_map
统计 + 堆排序
注:
如果要求速度, 可以采用空间换时间的策略;将数据分成n
份(通过hash
%n
), 分别求出每一份的Top K
再合并求总的Top K
;
附: