大文件处理

文章介绍了在处理大型日志文件时,通过分块、取模、哈希统计和堆排序等方法找到IP地址出现次数最多的问题;针对内存限制,提出使用位图和位表示法处理大量整数;同时讨论了在1G内存下找到两个大文件交集的策略以及寻找100亿整数中只出现一次的整数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?
  • 分而治之的思想
  1. 将IP 地址转换为整型,然后对100取模,相同取模结果的IP 地址会输出到一个文件中。
  2. 通过Hash表统计每个文件中最多的IP 地址
  3. 比较100个文件中出现次数最多的IP地址即为结果
与上题条件相同,如何找到top K的IP?

-概念:
大根堆用于升序排序(所以求最小的前k个数用大根堆),小根堆用于降序排序(所以求最大的前k个数(常见的topk问题,基本都是求最大的前k个数)用小根堆)。

  • 堆排序的时间复杂度是O(NlogN),空间复杂度是O(1),在海量数据及内存不足的条件下
  • 首先设置一个大小为K的堆(最大top建最小堆,最小topk,使用最大堆)
  • 扫描数组,与根结点比较,然后插入到堆中,并维护堆的特性
  • 数组扫描结束,堆中的k个结点,就是topk
  • 根据堆特性,交换根结点和最后一个叶子结点,原跟结点出堆,然后继续维持堆特性。直至最后一个结点,即为top k
给定100亿个整数,设计算法找到只出现一次的整数
  • 整数4个字节,100亿整数,占用空间100亿*4=40G,整数范围0-42亿9千万
  • 使用二进制2位标示可能出现的三种情况00 标识没有出现,01标识出现1次,11标示出现了1次以上
  • 使用位图变形,使2个位标识一个数的状态。40亿整数只需要1G的空间
  • 在这里插入图片描述
2.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?

在这里插入图片描述

给一个超过100G大小的日志文件, 日志中存着IP地址, 设计算法找到出现次数最多的IP地址?
  • 将日志文件的每个ip对1000取余,100G文件分成1000个小文件,每个文件100MB,电脑内存够用了。
  • 多有相同的ip都进入到了同一个文件。统计每个文件中的ip出现的次数。可以利用hash桶的kv模型对每个文件的ip出现次数进行统计
给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集
  • 将其中的一个文件所有整数建立位图,然后读取另一个文件里面 的整数,去位图里面查,查到了,就是两个文件的交际,没找到则该整数不是两文件的交集
给定100亿个整数,设计算法找到只出现一次的整数
  • hash分成100份文件,然后比较各自文件中出现一次的整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值