布谷鸟哈希函数的参数_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/
布谷鸟哈希最早于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 布谷鸟哈希相关推荐
- 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希
布谷鸟哈希最早于2001 年由Rasmus Pagh 和Flemming Friche Rodler 提出.该哈希方法是为了解决哈希冲突的问题而提出,利用较少计算换取了较大空间.名称源于该哈希方法行为 ...
- 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)
系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...
- mysql 自定义哈希函数_C++ STL无序容器自定义哈希函数和比较规则(超级详细)...
前面在讲解 unordered_map.unordered_multimap.unordered_set 以及 unordered_multiset 这 4 种无序关联式容器(哈希容器)时,遗留过一个 ...
- 除留余数法构造哈希函数并用链地址法处理哈希冲突【C++实现】
1.题目描述 哈希函数为H(key)=key%13,哈希冲突处理方法为:链地址法 c语言版数据结构上的例子 2.代码实现 首先建立一个哈希链表结点类HashNode,用于存放处理冲突时的关键字,其数据 ...
- 布谷鸟哈希函数的参数_用于并发读密集型的乐观Cuckoo(布谷鸟) Hashing
用于并发读密集型的乐观Cuckoo(布谷鸟) Hashing:Optimistic Cuckoo Hashing for concurrent, read-intensive applications ...
- 利用Splatting提交参数(Hash,哈希)
$infos = @{} $infos.Path = 'c:\Windows' $infos.Recurse = $true $infos.Filter = '*.log' $infos.ErrorA ...
- 变色龙哈希函数Chameleon Hash Functions
变色龙哈希函数Chameleon Hash Functions 一.哈希函数 1.1 哈希函数定义 1.2 哈希函数性质 1.3 哈希函数存在的问题 二. 变色龙哈希函数 2.1 变色龙哈希函数定义 ...
- Hash——哈希法概念、哈希函数构造方法、哈希冲突解决办法(重点讨论链地址法)
声明:本篇博客根据回顾老师上课知识和书籍<数据结构--用C语言描述>(耿国华)整理得出,仅作知识回顾学习用. 1.哈希法 哈希法又称散列法.杂凑法.关键字地址计算法.相对应的表称为哈希表. ...
- 密码学小知识(6):变色龙哈希函数(Chameleon Hash)
本篇博文将介绍变色龙哈希函数. 在介绍变色龙哈希函数之前,我们先简单回顾一下经典的哈希函数,这样就能对比它们之间的差别. 文章目录预览 本篇博文将介绍变色龙哈希函数. 一.哈希函数 二.变色龙哈希函数 ...
最新文章
- 各类商会协会单位类织梦模板(带手机端)
- 怎样增加混凝土粘聚性_改善中低强度等级混凝土粘聚性的方法
- [Bug]当IDENTITY_INSERT设置为OFF时,不能为表“xx”中的标识列插入显示的值
- 考前自学系列·计算机组成原理·IEEE 754 单精度浮点数和真值之间的转化
- tableau可视化数据分析60讲(八)-tableau计算函数(重点知识)
- linux war版本管理,linux(centos8):用systemctl管理war包形式的jenkins(java 14 / jenkins 2.257)...
- linux socket recv函数如何判断收完一包_linux 下经典 IO 复用模型 epoll 的使用
- 达摩院里的女Leader,一面温柔似水一面灿烂如阳
- CentOS7.2中安装rabbitmq
- java lambda表达式_「JAVA8」- Lambda 表达式
- python处理excel的优势-Python处理Excel数据的坑,一文让你不用重复犯错
- Zookeeper 和redis做分布式锁区别
- Julia: 1.0 ! “startup.jl” 的妙用, 设置IDE启动时,自动运行某文件或某行命令
- python2.0安装教程_Python2.7 【安装教程】
- 学习日记:scipy库的版本差异
- android 头像修改
- Keras.metrics中的accuracy总结
- ZUI————对话框闪退问题
- 逆向脱壳-fsg手动脱壳
- 程序员的“我爱你”表达方式