大数据和空间限制

1.认识布隆过滤器
题目:不安全网页的黑名单包含100亿个黑名单,每个网页URL最大占用64B。限制想要实现一直网页过滤器,可以更好网页的URL判断网页是否在黑名单上。
要求:1.允许万分之一的失误。2.使用额外空间不超过30G。
布隆过滤器:长度为m的bit类型的数组,即数组中的每个位置只占一个bit。
这里写图片描述
在假设一共有k个hash函数,这些函数的输出域s大于或者等于m,并且彼此独立优秀。输入同一个对象,经过hash函数算出了的结果也是独立的,对算出来的每一个结果都对m取余,然后在bit array上设为1。
这里写图片描述
输入一个对象,如果bitMap已经全部为1,则这个数是重复的。
这里写图片描述
2.只用2GB内存在20亿个整数中找到出现次数最多的数
题目:一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。内存现在为2GB。
方法:将包含20亿个数的大文件用hash函数分成16个小文件,然后对每个小文件进行hash表来统计其中每种数出现的次数,这样在16个文件中出现次数最多的就是次数最多的。
3. 40亿个非负整数中找到没出现的数
32位无符号的整数范围是0-4294967295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有没有出现过的数。可以使用1G的内存。
40亿*4B=160亿字节,16G
解答:1.将范围平分为64个区间,每个区间是67108864个数。第一次遍历申请64的整数数组,用了统计区间i上的数有多少,遍历40亿个数,根据当前数是多少决定哪个区间上的计数增加。例如3422552090/67108864=51,即是第51区间的计数增加。
2.遍历64位数组,发现37区间的计数小于67108864,进行第二次遍历:
申请场地为67108864的bit map。
遍历40亿个数,此时只关注落在3、区间的数,记为num其他忽略
如果步骤2的num在区间37区间上,arr[num-67108864*37]设置为1。
遍历完成后,37区间必然存在第i为位置没被设置成1,67108864*37+i

4. 找到100亿个URL中重复的URL已经搜索词汇的topK问题
1. 100亿hash分成1000份,在hash找出每个url的次数
2. 100亿hash分成1000份,在小根堆找出topK.
5.一致性hash算法的基本原理
服务器集群实现数据缓存的常见算法:
1.无论是增删改查,将数据的id通过hash函数转换成hash值,记为k
2.如果机器有N台,计算k%N的值,该值时该数据所属的机器编号,增删改查操作都在此机器上。
问题:增加机器或者删除机器,代价较高,所有数据不得不根据id重新计算一遍hash值,并对性的机器数进行取模运算操作。
解决方法:hash一致性算法。
假设数据的id通过hash函数转换成的hash值的范围是 232 ,也就是在0- 232 -1的数字之间。我们能将这些数字头尾相连,形成一个闭环,那么一个数据在id计算出hash值后认为对应到环中的一个位置上。想象机器也在环中,机器在环中的位置根据机器id计算出的hash值来决定,首先把该数据的id用hash函数计算出hash值,并映射到环中相应的位置,然后顺时针寻找离这个位置近的机器,那这台机器是该数据的归属。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值