Hash 差分bloom过滤器和FM草图
bloom过滤器和散列草图(也是FM草图)之间有什么区别?它们的用途是什么?散列草图/Flajolet Martin草图 Flajolet,p./Martin,G.(1985):数据库应用的概率计数算法,载于:《计算机与系统科学杂志》,第31卷,第2期(1985年9月),第182-209页 杜兰德,M./Flajolet,p.(2003):大基数的对数计数,摘自:Springer LNCS 2832,算法ESA 2003,第605-617页 散列草图用于计算集合中不同元素的数量 鉴于:Hash 差分bloom过滤器和FM草图,hash,set,duplicates,counting,bloom-filter,Hash,Set,Duplicates,Counting,Bloom Filter,bloom过滤器和散列草图(也是FM草图)之间有什么区别?它们的用途是什么?散列草图/Flajolet Martin草图 Flajolet,p./Martin,G.(1985):数据库应用的概率计数算法,载于:《计算机与系统科学杂志》,第31卷,第2期(1985年9月),第182-209页 杜兰德,M./Flajolet,p.(2003):大基数的对数计数,摘自:Springer LNCS 2832,算法ESA 2003,第605-617页 散列草图用于计算集合中不同元素的数量 鉴于: 长度为
- 长度为l的位数组B[]
- 映射到[0,1,…2^l]的(单个)散列函数h()
- 一个函数r(),给出输入二进制表示中最低有效位的位置(例如000101返回1001000返回4)
- pn:=h(x)返回一个伪随机数
- 应用r(pn)将位数组的位置设置为1 由于h()的输出是伪随机的,所以每一位i被设置为1~n/(2^(i+1))次
- 查找位数组中最右边0的位置p
- p=log2(n),求n得到集合中不同元素的个数; 结果可能高达1.83个震级
- 在数据挖掘、P2P/分布式应用、文档频率估计等方面
布隆过滤器 Bloom,H.(1970):允许错误的哈希编码中的空间/时间权衡,载于:《ACM通信》,第13卷,第7期(1970年7月),第422-426页 Bloom过滤器用于测试元素是否为集合的成员 鉴于:
- 长度为m的位数组B[]
- k个不同的散列函数h_k(),映射到[0,…,m-1],即m位数组的一个位置
- 将h_k应用于x(h_k(x)),对于所有k,即得到k值
- 将数组B中的结果位设置为1(如果已设置为1,则不做任何更改)
- 使用所有散列函数h_k(h_k(y))获取要检查的位置p_k,即,对于每个函数h_k,您将获得一个位置p_k
- 如果数组B中的一个位置p_k设置为0,则元素y肯定不在该集中
- 如果p_k给出的所有位置都是1,那么元素y可能(!)在集合中
- 假阳性率约为(1-e^(-kn/m))^k,不可能出现假阴性
- 通过增加散列函数的数量,可以降低误报率;但是,同时bloom过滤器会变慢;k的最佳值是k=(m/n)ln(2)
- 一开始,它被用作数据库中的廉价过滤器,以过滤掉与查询不匹配的元素
- 今天的各种应用程序,例如在Google BigTable中,以及用于IP查找的网络中,等等