Cuckoo Filter(布谷过滤器)

Cuckoo Filter(布谷过滤器)

布谷过滤器是布隆过滤器的改进。

  1. 布隆过滤器:适用于高效地测试成员集且空间利用率高,但存在小概率错误正向的输出(即对象不在某个集合里面但布隆过滤器却输出存在),且不适用于集合中元素被删除时的情况。
  2. 布谷过滤器解决布隆过滤器不适用于元素被删除的情况。
Cuckoo filter(布谷过滤器)的优点:
  1. 支持动态添加和删除元素.
  2. 比布隆过滤器具有更高的性能.
1. Cuckoo Hash Table(布谷哈希表)

在这里插入图片描述

对于布谷过滤器而言,采用的不是位数组,而是桶数组,每一行即为一个bucket,且每个bucket都有4个空间。每个元素item都有两个hash function决定候选bucket.

1.1.插入元素过程:

假设:bucket1:=h1(x),bucket2:=h2(x)

如果bucket1和bucket2中有一个候选桶是empty,则选择空的候选桶插入。

relocate: 如果bucket1和bucket2中没有一个候选桶是empty,则选择其中一个候选桶 b,然后先将该桶的原元素插入到它对应的另外一个候选桶中,如果另外一个候选桶不是空的则递归执行该过程,然后再将x插入到候选桶b中。(注:until a maximum number of displacements is reached (e.g.500 times in our implementation ). If no vacant bucket is found, this hash table is considered too full to insert.)

其平均时间复杂度为O(1)

practical implementation: 会在上述的基础上,使得每个bucket可以存放多个item,如图1©所示。

1.2.查找过程:
检查h1(x)和h2(x)所对应的桶中是否包含这个元素(注:只要其中一个桶包含这个元素即可)

2. Cuckoo Filter Algorithm(布谷过滤器算法)

在Cuckoo Hash Table的基础上设计相关算法使得适用于集合成员测试(Using Cuckoo Hashing for Set-membership:)

2.1 Challenge and Proposal
  1. 空间利用率,查找速度=>多路联合布谷哈希表(mult-way associative cuckoo hash table).
  2. 哈希表空间=>每个元素先被哈希成固定长度的指纹(fingerprint)然后插入哈希表中.

=> 需要重新设计布谷哈希表

Challenge1:由于布谷哈希表中存在relocate的过程中,如果布谷哈希表中只存放item的哈希值,那么当item需要relocate时不知道另一个候选桶的位置.

Proposal1: cuckoo fifilters use partial-key cuckoo hashing to find an item’s alternate location based on only its fingerprint .

2.2 Concept:

entry:在布谷过滤器中布谷哈希表的基本单元。每一个entry存放一个fingerprint

cuckoo hash table: bucket的数组.一个bucket可以存放多个entries。

partial-key cuckoo hashing: 基于fingerprint来确定item的可替代位置.

  1. 对于item x,计算候选桶的哈希函数如下:

在这里插入图片描述

=>这样存在一个非常重要的属性:
已 知 h a s h ( x ′ s f i n g e r p r i n t ) , h 1 ( x ) 时 , h 2 ( x ) = h 1 ( x ) ⨁ h a s h ( x ′ s f i n g e r p r i n t ) 已 知 h a s h ( x ′ s f i n g e r p r i n t ) , h 2 ( x ) 时 , h 1 ( x ) = h 2 ( x ) ⨁ h a s h ( x ′ s f i n g e r p r i n t ) 每 个 f i n g e r p r i n t 生 成 的 哈 希 算 法 可 以 不 同 , 但 是 生 成 h 1 、 h 2 的 h a s h 算 法 是 相 同 的 已知hash(x's\quad fingerprint),h_1(x)时,h_2(x)=h_1(x)\bigoplus hash(x's\quad fingerprint)\\已知hash(x's \quad fingerprint),h_2(x)时,h_1(x)=h_2(x)\bigoplus hash(x's\quad fingerprint)\\每个fingerprint生成的哈希算法可以不同,但是生成h1、h2的hash算法是相同的 hash(xsfingerprint),h1(x),h2(x)=h1(x)hash(xsfingerprint)hash(xsfingerprint),h2(x),h1(x)=h2(x)hash(xsfingerprint)fingerprint,h1h2hash
​ 换句话说,alternative’s position=this position xor hash(x’s fingerprint),还要注意的是每个item的fingerprint都会事先被hash,可以确保item在relocate到完全不同部分的bucket中,从而减少哈希冲突并提高表的利用率。

2.3 Insert Operation

在这里插入图片描述

上面的Insert 算法表示当n>=MaxNumKicks时会出现桶溢出现象(bucket overflow).

2.4 Loop Up Operation

在这里插入图片描述

注释上面的查找过程不会出现 false negative question,只有当出现桶溢出时才会出现。

2.5 Delete Operation

在这里插入图片描述

布隆过滤器是不支持删除操作的,因为Bloom filter是位数组即元素即为0/1不能指向集合中的某个元素,而布谷过滤器中entry存放的是item的fingerprint可以唯一标识某个item.

所以Cuckoo Filter支持删除操作.

Bloom filter “delete operation”: 需要重建过滤器.

Cuckoo Filter delete operation: 在特定entry中删除其fingerprint.

删除操作的分析:

  1. 即使item x和item y同时存放在bucket i1中且fingerprint都相同(我的理解对于fingerprint的哈希计算不同item有不同生成算法),也不会出现false negative,但是会出现false positve。

    当删除item x后,y依然可以被认为是集合成员(不会出现false negative)。但是item x也依然会认为是集合成员(true positive)。

    very serious problem: 当item x 和y有相同的fingerprint时,但item x已经插入到bucket且item y没有插入bucket,如果此时执行delete(y),则会出现删除真实存在的item,出现false negative。

    => 因此需要事先要要求删除的元素一定是存在的元素.(This requirement also holds true for all other deletion-supporting fifilters.)

参考文献:

Cuckoo Filter: Practically Better Than Bloom

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cuckoo filter布谷过滤器)是一种用于替代布隆过滤器的数据结构。它是布隆过滤器的改进版本,具有更高的性能和支持动态添加和删除元素的能力。布谷过滤器使用了布谷哈希表(Cuckoo Hash Table)来实现。布谷哈希表将一个哈希表分成两份,并使用两个哈希函数来计算每个元素在两个桶中的位置。在查找时,最多只需要查找两次。在插入数据时,如果两个桶都已经被占用,就需要进行踢出操作,将原有的值踢出并插入到另一个桶中。这个过程类似于布谷鸟下蛋的过程,因此得名布谷过滤器布谷过滤器相对于布隆过滤器的优点是在错误率小于3%的情况下具有更高的空间性能,并且在查找时只需要两次访存,相比于布隆过滤器的K个Hash函数K次访存更加高效。然而,布谷过滤器也有一些缺点,例如当装填因子较高时容易出现循环问题,即插入失败的情况。此外,布谷过滤器的访问空间地址不连续,对于程序的局部性和Cache流水线来说不利。总的来说,布谷过滤器是一种性能更高、支持动态操作的过滤器结构,适用于需要高效测试成员集的场景。 #### 引用[.reference_title] - *1* [Cuckoo Filter(布谷过滤器)](https://blog.csdn.net/Blockchain210/article/details/126749068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [过滤器系列(二)—— Cuckoo filter](https://blog.csdn.net/qq_43590614/article/details/116608561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [cuckoo filter 简介](https://blog.csdn.net/qq_19483431/article/details/40506003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blockchain410

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值