散列查找

 

 基本思想

以关键字 key 为自变量,通过一个确定的函数 h(散列函数),计算出对应的函数值 h(key),作为数据对象的存储地址可能不同的关键字会映射到同一个散列地址上,即 h(keyi) = h(keyj)(当 keyi≠ keyj),称为“冲突”——需要某种冲突解决策略。

 

常用策略

换个位置:开放地址法

同一位置的冲突对象组织在一起:链地址法

 

开放定址法

一旦产生了冲突(该地址已有其它元素),就按某种规则去寻找另一空地址若发生了第 i 次冲突,试探的下一个地址将增加 di,基本公式是: hi (key) = (h(key)+di) mod TableSize (1 ≤ i ≤ TableSize)di 决定了不同的解决冲突方案。

1. 线性探测

以增量序列 1,2,…, (TableSize - 1) 循环试探下一个存储地址

2. 平方探测法

​以增量序列+1,-1,+2,-2,+4,-4,+8,-8……且 q ≤ ⌊ TableSize/2 ⌋ 循环试探下一个存储地址如果散列表长度是某个 4k+3(k是正整数)形式的素数时,平方探测法就可以探查到整个散列表空间。

3. 双散列

二次再散列法是指第一次散列产生哈希地址冲突,为了解决冲突,采用另外的散列函数或者对冲突结果进行处理的方法。

4. 再散列

​当散列表元素太多(即装填因子 α 太大)时,查找效率会下降解决的方法是加倍扩大散列表,这个过程就叫"再散列",扩大时,原有元素需要重新计算放置到新表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值