【刷题】面筋-算法-在海量IP中找出访问次数最多的100个IP

一、基本想法

对于海量的数据,我们知道如果将IP请求写到日志的话,就变为一个超大文件统计次数的问题,但是单机处理可能速度会比较慢,不能一次性加载到内存计算。

对于这类问题,我们首先想到的就是分治处理的思路。

二、详细思路

分治法就是“化大为小”,“化单为多”,我们可以将所有IP分放在100个文件中,然后分别统计每个文件的topK。

但是需要注意的是, 必须保证每种IP地址只在一个文件中出现,比如我们可以采用模100的算法,将0,1,2,3,4...分别放入一百个文件中,然后使用HashMap分别统计每个文件中IP出现的次数。

到这步之后,如果我们需要统计所有文件的topK,可以采用最小堆的方式。具体的做法是,首先用K个数据构建最小堆,后面的数据依次判断是否入堆,如果入堆则进行调整,最后得到的就是次数最多的一百个IP。

三、总结

(1)将ip地址放入多个小文件中,保证每种IP只出现在一个文件中
(2)利用hashmap统计每个小文件中IP出现的次数
(3)利用最小堆得到所有IP访问次数最多的100个

参考链接

END

原文地址:https://www.cnblogs.com/anliux/p/12850582.html