布谷鸟哈希最早于2001 年由Rasmus Pagh 和Flemming Friche Rodler 提出。该哈希方法是为了解决哈希冲突的问题而提出,利用较少计算换取了较大空间。名称源于该哈希方法行为类似于布谷鸟在别的鸟巢中下蛋,并将别的鸟蛋挤出的行为。它具有占用空间小、查询迅速等特性,可用于Bloom filter 和内存管理。

算法描述

算法使用hashA 和hashB 计算对应key 的位置。

当两个哈希任意位置为空,则选择一个位置插入

让两个哈希有位置为空时,则插入到空位置

当两个哈希位置均不为空时,随机选择两者之一的位置上keyx 踢出,计算踢出的keyx 另一个哈希值对应的位置进行插入,转至2执行(即当再次插入位置为空时插入,仍旧不为空时,踢出这个keyy)

图例

1. 插入key1 两个位置均为空,则插入任意位置.

2. 插入后

3. 插入key2 两个位置有一个位置为空,则插入空的位置中

4. 插入后效果

5. 新插入keyi 发现对应两个位置均被占据

6. 随机选择一个位置提出所在位置的key(key1),将踢出的key 放置在另一个哈希结果对应的位置上

7. 如果踢出的key(key1)又占据/踢出了其他key(keyj)的位置,则反复执行上面的过程直到结束

其他

Cockoo hash 有两种变形。一种通过增加哈希函数进一步提高空间利用率;另一种是增加哈希表,每个哈希函数对应一个哈希表,每次选择多个张表中空余位置进行放置。三个哈希表可以达到80% 的空间利用率。

Cockoo hash 的过程可能因为反复踢出无限循环下去,这时候就需要进行一次循环踢出的限制,超过限制则认为需要添加新的哈希函数。

在SOSP 11 的SLIT 文章中有使用Cockoo hash。

增加哈希表过程如下:

当新插入一个key hashA 在上面哈希表位置和hashB 在下面哈希表的位置分别被key1 和keyx 占据,任选一个key 提出(这里选择key1)。

计算key1 hashB 的值然后插入到下面的hashB 对应的哈希表中。

PS

文中图使用graphviz 绘制,图例第七张图片生成文件如下:

1: digraph G {

2: "node0" [

3: label = "null | null | keyi | null | null | key1 | key2 | ......"

4: shape = "record"

5: ];

6:

7: "node2"[

8: label="key1"

9: ];

10:

11: "node3"[

12: label="key2"

13: ];

14:

15: "node1"[

16: label="keyi"

17: ];

18:

19: "node1"->"node0":f2[color="red",shape="record",label="hashA"];

20: "node1"->;"node0":f6[color="red",shape="record",label="hashB"];

21:

22: "node0":f2->;"node2";

23: "node0":f5->;"node2"[style="dotted"];

24:

25: "node0":f2->;"node3"[style="dotted"];

26: "node0":f6->;"node3";

27:

28: "node0":f5:s->;"node0":f7:s[color="blue",shape="record",label="keyj"];

29: }

在GVEdit 在使用的时候,F5 是生成图片,并在对应的目下生成了响应的图形文件,相关设置在Graph setting 里面,第一次用的时候总是找不到export image 的方法,总导出不了对应图片。

布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希相关推荐

  1. 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希

    查看原文:http://www.dullgull.com/2012/05/cuckoo-hash-%e5%b8%83%e8%b0%b7%e9%b8%9f%e5%93%88%e5%b8%8c/ 布谷鸟哈 ...

  2. 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)

    系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...

  3. mysql 自定义哈希函数_C++ STL无序容器自定义哈希函数和比较规则(超级详细)...

    前面在讲解 unordered_map.unordered_multimap.unordered_set 以及 unordered_multiset 这 4 种无序关联式容器(哈希容器)时,遗留过一个 ...

  4. 除留余数法构造哈希函数并用链地址法处理哈希冲突【C++实现】

    1.题目描述 哈希函数为H(key)=key%13,哈希冲突处理方法为:链地址法 c语言版数据结构上的例子 2.代码实现 首先建立一个哈希链表结点类HashNode,用于存放处理冲突时的关键字,其数据 ...

  5. 布谷鸟哈希函数的参数_用于并发读密集型的乐观Cuckoo(布谷鸟) Hashing

    用于并发读密集型的乐观Cuckoo(布谷鸟) Hashing:Optimistic Cuckoo Hashing for concurrent, read-intensive applications ...

  6. 利用Splatting提交参数(Hash,哈希)

    $infos = @{} $infos.Path = 'c:\Windows' $infos.Recurse = $true $infos.Filter = '*.log' $infos.ErrorA ...

  7. 变色龙哈希函数Chameleon Hash Functions

    变色龙哈希函数Chameleon Hash Functions 一.哈希函数 1.1 哈希函数定义 1.2 哈希函数性质 1.3 哈希函数存在的问题 二. 变色龙哈希函数 2.1 变色龙哈希函数定义 ...

  8. Hash——哈希法概念、哈希函数构造方法、哈希冲突解决办法(重点讨论链地址法)

    声明:本篇博客根据回顾老师上课知识和书籍<数据结构--用C语言描述>(耿国华)整理得出,仅作知识回顾学习用. 1.哈希法 哈希法又称散列法.杂凑法.关键字地址计算法.相对应的表称为哈希表. ...

  9. 密码学小知识(6):变色龙哈希函数(Chameleon Hash)

    本篇博文将介绍变色龙哈希函数. 在介绍变色龙哈希函数之前,我们先简单回顾一下经典的哈希函数,这样就能对比它们之间的差别. 文章目录预览 本篇博文将介绍变色龙哈希函数. 一.哈希函数 二.变色龙哈希函数 ...

最新文章

  1. 4514: [Sdoi2016]数字配对
  2. 移动端开发 rem 单位使用问题
  3. Centos 6.4 搭建LANMP一键安装版
  4. NOIP200905潜伏者
  5. POPUP_TO_DECIDE
  6. 【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树
  7. Delphi使用ADO组件访问ACCESS数据入门例程
  8. 拆分路径 java_JAVA 类文件中的路径如何拆分和替换
  9. python glob.glob使用
  10. oracle 11g 如何实现坏块检查、恢复?
  11. 近40万辆奥迪车被召回,有你的吗?
  12. [LeetCode#127]Word Ladder
  13. linux服务器忘记ssh密码_【Linux】配置linux服务器之间ssh不用密码访问
  14. 第二章 信息化规划与组织
  15. 实时视频流:工作原理
  16. 斗圣苍穹游戏代码(点关注,不迷路,还有更多c++小程序等着你)
  17. 使用PS给PDF文件加水印
  18. lms全称是什么意思_lms是什么意思?
  19. 3dmax2014 uv用法_3DSMAX演示一个硬表面模型UV展开的方法
  20. BigBrother:UCloud 全链路大规模网络连通性检测系统详解

热门文章

  1. 七牛:测试域名过期?自己域名又没备案?这里有一招完美解决你烦恼
  2. 【温故而知新】JavaWEB回顾(八)
  3. 使用SuperWebSocket 构建实时 Web 应用
  4. pandas常用命令
  5. java apex_Apex基础知识(一)
  6. Papers with Code一个查找论文和对应代码的神器
  7. python小练习6--lambda表达式的使用
  8. 手机vnc远程桌面,手机vnc远程桌面教程加配置说明
  9. Altium设置菜单之系统菜单
  10. Process ID 59:0 owns resources that are blocking processes on Scheduler 2