Data structures 什么是异或滤波器?
有一个相对较新的数据结构(2020年)被称为,它被用作Bloom过滤器的替代品Data structures 什么是异或滤波器?,data-structures,xor,bloom-filter,xor-filter,Data Structures,Xor,Bloom Filter,Xor Filter,有一个相对较新的数据结构(2020年)被称为,它被用作Bloom过滤器的替代品 什么是异或滤波器?与布卢姆过滤器相比,它有哪些优势?它是如何工作的?如果要存储在过滤器中的所有项目都是事先知道的,那么XOR过滤器被设计为Bloom过滤器的替代品。与布鲁姆过滤器一样,它代表了一组近似值,其中不允许出现误报,但允许出现误报 与Bloom过滤器一样,XOR过滤器存储大量位。不过,与Bloom过滤器不同的是,我们认为每个位都是它自己的数组槽,在XOR过滤器中,位被组合成L位序列,对于一些参数L,我们将在后
什么是异或滤波器?与布卢姆过滤器相比,它有哪些优势?它是如何工作的?如果要存储在过滤器中的所有项目都是事先知道的,那么XOR过滤器被设计为Bloom过滤器的替代品。与布鲁姆过滤器一样,它代表了一组近似值,其中不允许出现误报,但允许出现误报 与Bloom过滤器一样,XOR过滤器存储大量位。不过,与Bloom过滤器不同的是,我们认为每个位都是它自己的数组槽,在XOR过滤器中,位被组合成L位序列,对于一些参数L,我们将在后面选择。例如,XOR筛选器可能如下所示:
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| 11011 | 10010 | 11101 | 11100 | 01001 | 10101 | 01011 | 11001 | 11011 |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
接下来,我们选择三个散列函数h1、h2和h3,它们与Bloom过滤器一样,将项目散列到数组中的插槽中。这些散列函数允许我们获取一个项目x并计算其表代码,我们通过将点h1(x)、h2(x)和h3(x)中的项目XORing在一起来实现。此处显示了一个示例:
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| 11011 | 10010 | 11101 | 11100 | 01001 | 10101 | 01011 | 11001 | 11011 |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
^ ^ ^
| | |
h3(x) h1(x) h2(x)
Table code for x: 10010 xor 01001 xor 10101
= 01110
为了完成这幅图,我们还需要一个称为指纹函数的散列函数,表示为f(x)。指纹功能将一个值作为输入,并输出一个称为x指纹的L位数字。为了查看x是否存储在表中,我们检查x的表代码是否与x的指纹匹配。如果是这样,我们说x(可能)在表中。如果不是,我们说x(肯定)不在表中
将此想法与布鲁姆过滤器进行比较是很有帮助的。使用Bloom过滤器,我们将x散列到多个位置,然后通过将所有内容合并在一起,从这些位置导出一个值,最后检查得到的值是否等于1。使用异或过滤器,我们将x散列到三个位置,通过将它们一起异或,从这些位置导出一个值,最后检查得到的值是否等于f(x)
为了改变异或滤波器的假阳性率,我们只需改变L的值。具体地说,f(x)碰巧匹配h1(x)、h2(x)和h3(x)给出的三个位置的异或的可能性为2-L,因为这是随机L位值匹配另一个位置的概率。因此,为了得到ε的假阳性率,我们只需设置L=log2ε-1
挑战的部分是填表。事实证明,这样做有一个非常简单的策略。要存储n个元素的列表,请创建一个大小为1.23n的表。然后,使用此递归过程:
- 为了降低Bloom过滤器的误报率,我们必须添加更多的函数。具体来说,对于ε的错误率,我们需要使用log2ε-1散列函数。另一方面,异或过滤器总是恰好使用三个哈希函数
- 因此,Bloom筛选器中的查找通常比XOR筛选器中的查找慢,因为探测到的每个表槽基本上位于随机位置,并且可能导致缓存未命中。使用Bloom过滤器,每个项目有log2ε-1缓存未命中。使用XOR过滤器,每个项有三个缓存未命中
- 布卢姆过滤器使用更多的空间。错误率为ε的Bloom过滤器需要一个大小为1.44n log2ε-1的表格。异或滤波器具有1.23n个项的数组,每个项的长度为log2ε-1位,总空间使用量为1.23n log2ε-1