青岛达内的小编总结,Bloom filter将集合中的元素映射到位数组中,用k(哈希函数个数)个映射位是否全1表元素是否在该集合
Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。
A,B两个文件,各存放50亿条URL,每条URL占用64B,内存限制4G,求A,B文件URL交集。如果是三个乃至n个文件呢
先计算下内存占用,4G=2^32大概40亿*8大概340亿bit
n=50亿,若按出错率0.01算需要大概650亿bit
现在可用340亿,相差不多,可能会使出错率上升
另外如果这些url与ip是一一对应的,就可以转换成ip,则大大简单了
同时本题若允许有一定的错误率,可使用Bloom filter
将其中一个文件中的url使用Bloom filter映射为340亿bit,然后挨个读取另外一个文件的url,检查是否在Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)

BitMap
用一个bit位标记某个元素对应的Value, 而Key即是该元素
由于采用了bit为单位来存储数据,因此在存储空间方面,相对于 HashMap大大节省
看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(假设这些元素没有重复)。
要表示8个数,我们就只需要8个Bit(1Byte),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0
然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1,因为是从0开始的,所以要把第5位置1
然后遍历一遍bit区域,将是1的位的编号输出(2,3,4,5,7),就达到了排序的目的。
适用范围
可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下
基本原理及要点
使用bit数组来表示某些元素是否存在,比如8位电话号码
扩展
Bloom filter可以看做是对BitMap的扩展
已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数
8位最多99 999 999,大概需要99m个bit,大概十几M字节的内存即可(可理解为从0~99 999 999的数字,每个数字对应一个bit位,所以只需要99M个bit约12.4M的Bytes,这样就用了小小的12.4M左右的内存表示了所有的8位数的电话)
以上就是青岛达内给大家做的内容详解,更多关于UI的学习,请继续关注青岛达内