课堂笔记-数据结构课设week4

大量数据问题

  • 最热门10个查询串
  • 找出TopK
  • 两文件共同url
查找两个文件中共同的url

给A,B两个文件,各存放50亿条URL,每条URL占用64个字节,内存限制为4G,找出A,B中相同的URL。

本题目题解参考博客:两个50亿url文件找出共同的url的个人思考解法@建安七子

  1. 布隆过滤器
    第一种方法是用布隆过滤器,利用布隆过滤器的特性来获得相同URL,但这种方法有个问题,布隆过滤器是有效果误差的,会将一部分不同的也当时相同的识别进来,虽然通过设置长度控制函数个数能够降低这个误差,但依然有误差,一旦题目变成了找出不同的URL,就歇菜了,而且布隆过滤器也要求一次性申请全部长度的内存,如果内存限制更小,比如1G,512M,或者数据量更大,那布隆过滤器也无法满足。

  2. 哈希切分对比法
    第二种方法是分而治之的思想,按照同一种哈希算法把两个50亿的文件都分割成若干小文件,每个小文件都让他能够4G内存加载起来,小文件之间对比,再把对比结果整合。这个方案弥补了布隆过滤器的问题,如果分布能够均匀的话,利用更小的内存都能够做这个事情,无非就是更多的文件么,但这带来了一个新的问题,选择什么样的哈希算法能够分布均匀,无论什么哈希算法都有分布不均匀的可能性,那么就又不稳定的可能性

  3. 切分排序法
    第一步,将每个文件等距拆分成若干小文件,这里不需要算法,目的只是获得各自的一堆小文件,距离不同都行。时间复杂度:O(n)。
    第二步,每个小文件内部排序(排序算法随意,排序方法和方向相同)。时间复杂度:随排序算法。
    第三步,将排序好的小文件还原回大文件,保证大文件排好序。时间复杂度:O(n*logn)。
    第四步,对比两个排好序的文件就简单啦,几乎不会耗费内存。时间复杂度:O(n)。

第三步的还原可能存在一些问题,不过我们可以保存每个文件的第一条记录,用这些记录来对所有文件进行排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值