【数据结构】一些海量数据处理问题

1. 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址(hash文件切分)


把这个100个G的文件分成1000份左右的文件,然后把这个100个G里面相同的IP地址, 使用相同的散列

函数将所有IP地址转换为一个整数key,再利用 index=key%1000就可将相同IP分到同一个文件




2. 给定100亿个整数, 找到其中只出现一次的整数(位图变形, 用两位来表示次数).


这100亿个数据有三种状态:不存在、 存在一次、存在多次。

故此,我们需要对传统位图进行扩展,用两位来表示一个整数的状态:00表示不存在、01表示存在一次, 10表示存在多次,11表示无效状态。

3. 有两个文件, 分别有100亿个query(查询词, 字符串), 只有1G内存, 找到两个文件的交集(hash文件切分 + 布隆过滤器).


在32位操作系统下,一个整数有32个字节,所以100亿整数 = 100 * 4字节 = 40G,所以不能一次性查找


精确的算法:哈希文件切分

将两个文件中的query hash到N个小文件中,并标明query的来源,在各个小文件中找到重合的query

将找到的重合query汇总,得到交集


近似算法:使用布隆过滤器

把一个文件的内容存入布隆过滤器,然后使用另一个布隆过滤器中查找是否存在,找到交集的元素,因为

可能出现哈希冲突,所以这是一种近似的算法, 不是百分之百精确


4. 给上千个文件, 每个文件大小为1K - 100M, 设计算法找到某个词存在在哪些文件中(倒排索引).


首先,把这个词存入一个单项链表中,头结点存储这个词,链表后面存储的都是文件名,然后依次遍历每个

文件,取出文件中的每一个单词并与这个词对比,若找到,就将此文件的文件名添加到后面的链表中,遍历

完所有文件,然后就得到了这个词存在在哪些文件中


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值