Cuckoo Hash 布谷鸟哈希

1. 定义: 

一种解决hash冲突的方法,其目的是使用简单的hash 函数来提高hash table的利用率,同时保证O(1)的查询时间。基本思想是使用2个hash函数来处理碰撞,从而每个key都对应到2个位置。

2. 操作:

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

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

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

4. 衍生背景:

Cuckoo中文名叫布谷鸟,这种鸟有一种即狡猾又贪婪的习性,它不肯自己筑巢, 而是把蛋下到别的鸟巢里,而且它的幼鸟又会比别的鸟早出生,布谷幼鸟天生有一种残忍的动作,幼鸟会拼命把未出生的其它鸟蛋挤出窝巢,今后以便独享“养父 母”的食物。借助生物学上这一典故,cuckoo hashing处理碰撞的方法,就是把原来占用位置的这个元素踢走,不过被踢出去的元素还要比鸟蛋幸运,因为它还有一个备用位置可以安置,如果备用位置上 还有人,再把它踢走,如此往复。直到被踢的次数达到一个上限,才确认哈希表已满,并执行rehash操作。

cuckoo_preview

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

cuckoo hashing

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
布谷鸟算法(Cuckoo Search Algorithm)是一种基于自然进化的优化算法,灵感来自于布谷鸟的繁殖行为。这个算法最初由李普林创造,其目标是解决优化问题。 布谷鸟算法的基本思想是通过模拟布谷鸟的繁殖行为来进行优化。在算法开始时,一群初始的布谷鸟(解向量)被散布在搜索空间中。每个布谷鸟都代表了一个潜在的解。布谷鸟通过寄生的方式将自己的蛋(新的解)放在其他布谷鸟的巢中,同时扔掉当前巢的解。较好的解能够吸引更多的布谷鸟,从而有更高的概率传递到下一代。通过这种方式,解的质量会逐渐提高。 算法的基本步骤如下: 1. 初始化布谷鸟的初始位置和适应度。 2. 对于每个布谷鸟,生成一个新解作为蛋,并更新适应度。 3. 根据适应度的大小,更新每个布谷鸟的位置。 4. 选择一些布谷鸟,根据一定的概率将它们的蛋放到其他布谷鸟的巢中。 5. 重复步骤2至4,直到达到终止条件。 在Python中实现布谷鸟算法可以使用以下步骤: 1. 定义问题的适应度函数,用于评估解的质量。 2. 随机初始化布谷鸟的初始位置。 3. 对于每个布谷鸟,生成一个新解,并更新适应度。 4. 根据适应度的大小,更新每个布谷鸟的位置。 5. 根据一定的概率选择一些布谷鸟,将它们的蛋放到其他布谷鸟的巢中。 6. 重复步骤3至5,直到达到终止条件。 7. 返回最优解。 总的来说,布谷鸟算法是一种用于解决优化问题的自然进化算法,在Python中可以通过定义适应度函数和实现一系列步骤来进行实现。它的独特之处在于模拟了布谷鸟的繁殖行为,通过寄生和选择的方式不断优化解的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值