基本思想:

cuckoo hash是一种解决hash冲突的方法,其目的是使用简单的hash 函数来提高hash table的利用率,同时保证O(1)的查询时间

基本思想是使用2个hash函数来处理碰撞,从而每个key都对应到2个位置。

插入操作如下:

1. 对key值hash,生成两个hash key值,hashk1和 hashk2, 如果对应的两个位置上有一个为空,那么直接把key插入即可。

2. 否则,任选一个位置,把key值插入,把已经在那个位置的key值踢出来。

3. 被踢出来的key值,需要重新插入,直到没有key被踢出为止。

我们先来看看cuckoo hashing有什么特点,它的哈希函数是成对的(具体的实现可以根据需求设计),每一个元素都是两个,分别映射到两个位置,一个是记录的位置,另一个是 备用位置。这个备用位置是处理碰撞时用的,这就要说到cuckoo这个名词的典故了,中文名叫布谷鸟,这种鸟有一种即狡猾又贪婪的习性,它不肯自己筑巢, 而是把蛋下到别的鸟巢里,而且它的幼鸟又会比别的鸟早出生,布谷幼鸟天生有一种残忍的动作,幼鸟会拼命把未出生的其它鸟蛋挤出窝巢,今后以便独享“养父 母”的食物。借助生物学上这一典故,cuckoo hashing处理碰撞的方法,就是把原来占用位置的这个元素踢走,不过被踢出去的元素还要比鸟蛋幸运,因为它还有一个备用位置可以安置,如果备用位置上 还有人,再把它踢走,如此往复。直到被踢的次数达到一个上限,才确认哈希表已满,并执行rehash操作。如下图所示(图片来源):

我们不禁要问发生哈希碰撞之前的空间利用率是多少呢?不幸地告诉你,一维数组的哈希表上跟其它哈希函数没什么区别,也就50%而已。但如果是二维的呢?

一个改进的哈希表如下图所示,每个桶(bucket)有4路槽位(slot)。当哈希函数映射到同一个bucket中,在其它三路slot未被填满 之前,是不会有元素被踢的,这大大缓冲了碰撞的几率。笔者自己的简单实现上测过,采用二维哈希表(4路slot)大约80%的占用率(CMU论文数据据说 达到90%以上,应该是扩大了slot关联数目所致)。

摘自:http://coolshell.cn/articles/17225.html

转载于:https://www.cnblogs.com/bonelee/p/6409733.html

Cuckoo hash算法分析——其根本思想和bloom filter一致 增加hash函数来解决碰撞 节省了空间但代价是查找次数增加...相关推荐

  1. 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想

    转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

  2. Hash(哈希/散列)和Bloom Filter(布隆过滤器)

    文章目录 Hash(函数/表) Bloom Filter 布隆过滤器的误识别问题 总结 参考 Hash(函数/表) Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域 ...

  3. 大数据量下的集合过滤—Bloom Filter

    算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘 ...

  4. 布隆过滤器(Bloom Filter)原理及优缺点剖析

    直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中. 和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储 ...

  5. 【guava】大数据量下的集合过滤—Bloom Filter

    1.概述 转载防丢失,请看原文 算法背景 相似文章:Bing搜索核心技术BitFunnel原理 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树. ...

  6. 布隆过滤器速度_布隆过滤器(Bloom Filter)详解

    布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元 ...

  7. Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接

    From:https://cloud.tencent.com/developer/article/1084962 Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤 ...

  8. php bloomfilter,【Bloom filter】Python实现Bloom filter

    hash table具有查找高速的特点,bloom filter在此基础上,解决了内存耗大的问题,代价就是不考虑100%的准确率,存在一定的错误率(可以接受程度) 3.Python实现以及使用 代码实 ...

  9. 布隆过滤器(Bloom Filter)、布谷鸟过滤器(Cuckoo Filter)、商过滤器(quotient filter)(持续更新~~~~)

    过滤器 位图 布隆过滤器(Bloom Filter) 布谷鸟过滤器(Cuckoo Filter) 商过滤器(quotient filter) 文章参考链接 位图 在讨论布隆过滤器之前,先看一下位图是什 ...

最新文章

  1. sql基础教程和mysql基础教程_书评「SQL基础教程(第2版)」| 你应该知道的基础知识点梳理·上...
  2. 常用的shell脚本
  3. mysql 关联 update_关于SQL UPDATE关联更新
  4. python自动化办公 百度网盘-Python自动化办公实战教程2020最新带源码
  5. NYOJ 1066 CO-PRIME(数论)
  6. Swift中文教程(十六) 自动引用计数
  7. 话题:什么是前端工程化?
  8. 【小型JavaFx项目】英汉词典
  9. 万有引力(Law of universal gravitation)
  10. CIFAR10 代码分析详解——cifar10_train.py
  11. 云计算对21世纪IT人才的挑战
  12. C语言:字符串转为long long --- atoll函数
  13. 如何使用 frontend-tracker 工具收集前端错误?
  14. el-tree对已知节点设置disable
  15. 无法连接到本地daytime服务 connect到daytime时返回-1 处理
  16. 2021-2022软件架构与设计趋势报告
  17. 你们知道第一个发Nature的中国人是谁吗?
  18. 用计算机来谈生僻字,语义搜索及框计算:从百度查生僻字谈起
  19. C#程序崩溃捕获与自动重启方法(简洁有效)
  20. C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码

热门文章

  1. LSM树(Log-Structured Merge Tree)存储引擎
  2. thttpd + Cgicc
  3. re2c php,PHP的词法解析器:re2c
  4. jenkins docker 安装_docker 安装 Jenkins
  5. sql server修改字段编码格式_原理:一条 sql 的执行过程详解
  6. 使用商业模式的九大模块去分析京东的商业模式_商业模式—筑基篇(1)
  7. 大牛整理:java去掉字符串中的逗号
  8. 【深度学习】基于注意力机制的Transformer处理医疗影像
  9. 机器学习(MACHINE LEARNING)Sklearn通用学习模式
  10. Comet oj比赛组队