关于双重散列(double hashing)和Brent 改进算法(Brent’s improvement)的一道例题

本文通过一个实例介绍了双重散列(Double Hashing)方法,展示了如何使用两个哈希函数有效解决冲突。在给定的哈希表中,通过双重散列解决了数据10、19、31、22、14、16的插入问题,解释了在冲突发生时如何计算探测顺序。此外,还探讨了Brent's Improvement这种提高查找速率的改进策略,该策略在冲突时允许元素间相互移动以减少冲突。
摘要由CSDN通过智能技术生成

当我们用两个哈希函数的时候,探测的效率得到了提升,并且在一定程度上避免了聚集。

给出两个哈希函数 h1,h2 满足 h1,h2:K——> {0,1,...,m-1}

Double hashing:设定h(k,i) = (h1(k) + ih2(k)) mod m    其中(i = 0,1,2,...,m-1);m为表长

h2(k)的选择:每个值k的探测顺序必须达到所有位置0, . . . ,m。这意味着h2(k)不等于0,并且它不能整除m,h2应该独立于h1来选择。

例题:m=7 , h1(k) = k mod 7, h2(k) = 1 + (k mod5)  对数据 10 19 31 22 14 16 进行双重散列

解:

k           10        19        31        22       14       16

h1(k)      3         5          3           1         0         2

h2(k)      1         5          2           3         3         5

对于10,19 没有冲突直接放入表中

h1(10) mod 7 = 3

h1(19) mod 7 = 5

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值