【刷题】面筋-算法-在海量IP中找出访问次数最多的100个IP
2023-09-14 08:59:08 时间
一、基本想法
对于海量的数据,我们知道如果将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
相关文章
- 【计算机网络】网络层 : 总结 ( 功能 | 数据交换 | IP 数据报 | IPv4 地址 | IPv6 地址 | 路由选择协议 | 路由算法 )★★★
- Linux:统计IP的奇妙之旅(linux统计ip)
- 查看MySQL连接IP的简单方法(mysql查看连接ip)
- 权限MySQL配置添加IP访问权限(mysql添加访问ip)
- 修改Linux虚拟机IP,让你轻松拥有更好网络访问(修改linux虚拟机ip)
- 数据库解决Oracle数据库IP修改问题(oracle修改ip)
- 访问Linux下禁止IP访问的技术实现(linux禁止ip)
- Linux虚拟IP:为你提供快捷的网络连接方式(linux虚拟ip)
- 限制Linux IP 访问限制实施策略(linux访问ip)
- 访问从 Oracle 控制IP访问:权限机制实现(oracle指定ip)
- 禁止IP访问Linux系统:安全保护的关键解决方案(linux禁止ip访问)
- webLinux终端下设置IP访问Web服务器(linux设置ip访问)
- 权限Linux服务器IP访问控制优化方案(linux服务器ip访问)
- MSSQL禁止IP访问:拒绝非法访问!(mssql禁止ip访问)
- Linux用户IP记录:有效管理访问你的系统(linux用户ip)
- 基于Redis的IP访问限制实现(redis限制ip访问)
- Linux环境下限制IP访问的技术实现(限制ip访问linux)
- 建立IP连接实现MSSQL远程访问(连接mssql ip设置)
- 提高性能通过Redis改善IP复用(得便redis改ip)
- 使用Oracle Oracle IP解析获取完美互联网体验(ip解析 oracle)
- 在Redis集群中实现单一IP访问(redis集群单一ip)
- 限制Redis连接多IP访问式阻隔(redis限制多个ip)
- Redis实现多IP间连接开启新的可能(redis连接多ip)
- Redis访问榜首TOP IP榜(redis 访问最多ip)
- 控制利用Redis设置IP访问控制(redis 设置ip访问)
- 使用淘宝IP库获取用户ip地理位置