slot增长前如图a,key为0、6的元素都可以放得下,但当key为12的元素到来时,编号为1的slot里有冲突了,这时需要将slot数翻一倍了,于是变成了图b。此时slot数由原来的4变为了现在的8,但“有效的”slot只有5个:编号分别为0到4。key为12的元素放入4号slot,因为12除8余4。按照一般的Larson策略来讲,4号slot的“兄弟slot”是0号slot,所以在增长完成后0号slot里所有除8余4的元素都要移到“新slot”即4号slot里,举个例子:如果0号slot里有key为16、20、24、28的元素,那key为20、28的元素必须移到4号slot,其它的(16和24)留在0号slot。
只更新一个slot的代价是——查询要稍微复杂些:先用8去除key,如果余数对应的slot“不存在”,则再用4去除,得到正确的slot编号。例如查询6,先 6 mod 8 得6,6号slot还不存在(只是分配了内存,数据结构上还不存在),所以只能再除4,得2,到2号slot去找,找到。图b右下方的公式可能有一些误导:它通过看s(k)是否小于n(<=5)来判断对应的slot是否存在,而在通常的情况下,增长的slot可能不是4号。假如增长的是6号,这时4、5、7号slot是“不存在”的,再用这个公式硬套就不行了。所以关键的判断标准是slot“是否存在”,而不是编号本身是大是小。
Per-Ake Larson的这一经典动态哈希算法以一小点查询时间的损失换来了数据更新的高效和平滑,因此得到了广泛的使用:GNU的gdbm、Berkeley的ndbm、雅虎的mdbm,都是使用这个算法。
相关推荐
介绍感知哈希原理与基本流程
对已有的负载平衡的改进算法,通过一致性哈希算法,负载平衡更加的有效。
用C#语言封装一个动态哈希表类的源码 可以运行在VS2005
在分布式系统中,常常需要使用缓存,而且通常是集群,访问缓存和添加缓存都需要一个 hash 算法来寻找到合适的 Cache 节点。但,通常不是用取余hash,而是使用我们今天的主角—— 一致性 hash 算法。
FeatureHashing, 用 R 实现特征散列 FeatureHashingLinux: 获胜: OS X: 用 R 实现特征散列简介特性,也称为散列技巧,是一种将特征转换为向量的方法... 在关联 array 中不查找索引,它将哈希函数应用到特性中,并将它
哈希、动态数组总结
哈希计算器哈希计算器哈希计算器哈希计算器
一致性哈希,consistent hashing。 算法入门必备 清晰版本,非扫描。
这篇论文对于哈希算法的总结比较到位,有助于对各类哈希算法做简单了解。
对一批关键字集合采用开放定址哈希表的存储结构来建立相应的哈希表和完成查找过程。 (1) 熟练掌握哈希表的构造方法 (2) 理解哈希表与其他结构表的实质性差别。
局部敏感哈希动机-音乐识别的挑战在每个人的人生中的某个时刻,他们第一次听到一首很棒的歌曲,并且很想知道它的名字是什么。 在这种情况下,我经常不愿承认。 不再!! 自从我在2014年首次了解以来,她就一直是我的...
哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2...
输入:待哈希数据序列 功能要求:输出哈希方法和解决冲突的方法(文字输出),输出哈希表
哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找
哈希查找: 1、 哈希表类的哈希函数采用除留余数法哈希函数; 2、 解决哈希冲突的函数采用开放定址法中的线性探察法。 3、 建立一个由10个数据元素组成的集合; 4、 测试哈希表长度m=13和m=11两种情况下的哈希表,并...
大规模图像检索中的哈希算法选讲
universal hashing(在随机算法或数据结构中)是指从具有一定数学属性的哈希函数族中随机选择哈希函数。 即使数据是由对手选择的,这也保证了预期的少量冲突。 已知许多通用族(用于对整数,向量,字符串进行哈希...
数据结构哈希表的实现,很值得初学者的学习与应用,看完代买能够掌握基本哈希表的应用
哈希表(散列表)和哈希查找方法,解决冲突方法教程