布隆过滤器和海量数据面试题

哈希切割topK问题

给一个超过100G大小的logfile,log中存着ip地址,设计算法找到出现次数最多的ip地址,与上题条件相同,如何找到topK的ip?如何直接用Linux系统命令实现?

(1)topK的ip

思路:使用堆

(2)寻找次数最多

思路:分割成多个文件,分别多每个文件进行统计,统计方式用hash,ip为key,次数为value,然后就可以统计出每个ip出现的次数,然后再比较出出现次数最大的。

如果是找前k个出现次数最多的ip,就把出现的次数作为堆用来比较的的key,ip地址作为value,把刚刚用哈希统计好的次数,建立存储数据一定的小堆(用其中一个文件先建立一个topK堆,然后再用其他文件中的数据替换插入),出现次数多的都在堆里,然后根据次数对应的找到ip。

 

位图的应用

给定100亿个整数,设计算法找到只出现一次的整数

思路:

分割为多个文件,两个为比特位表示出现的次数

 

 

给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集

分割多个文件,编号相同的文件比较,一个比特位表示是否出现

 

位图变形

1一个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数

位图(两个比特位表示一个数据)

 

布隆过滤器

给两个文件,分别有100亿个query(字符串),我们只有1G内存,如何找到两个文件交集?分别给出精确算法

思路:思路的第一步都是先把两个文件分割成很多文件,然后每个编号相同的文件比较。

为什么使用布隆过滤器:字符串转化整形数字,两个字符串可能都转化为了同一个整形数据,这样单纯的位图就无法解决

近似算法:布隆过滤器,用不同的计算方法,让query映射多个位图(对应多个比特位),让多个位图中对应的位置都置1,找的时候通过query再次去找所有位图对应的位置是否全为1,如果都是1就可能存在,如果有一个不为1,就说明一定不在。(缺点:不能作删除操作)

精确算法:使用哈希(闭散列法和开链法):转化的整数为key,query为value,寻找的时候有两个比对条件,这样就比较精确了。

思考:

如何扩展BloomFilter使得它支持删除元素的操作?

思路:把每个位被映射的次数用一个变量记录起来,删除的时候就减一即可。(不过这样做还是在增加了不少内存,感觉不太实用)

如何扩展BloomFilter使得它支持计数操作?

思路:弄一个变量计数呗,这变量放哪呢

 

倒排索引

给上千个文件,每个文件大小为1K-100M,给n个词,设计算法对每个词找到所有包含它的文件

思路:

精确方法:在hash表中加载每个文件吧,hash的key用词转化的整形,然后用整形映射词的位置,如果有哈希冲突就用方法解决,然后在用n词去匹配是文件中否存在这个词。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值