除留余数法学习

除留余数法介绍
除留余数法此方法为最常用的构造散列函数方法。对于散列表长为m的散列函数公式为:
f( key ) = key mod p ( p ≤ m )
mod是取模(求余数)的意思。事实上,这方法不仅可以对关键字直接取模,也可在折叠、
平方取中后再取模。


一个例子
  很显然,本方法的关键就在于选择合适的p, p如果选得不好,就可能会容易产生同义词。
  下面我们来举个例子看看:
  有一个关键字,它有12个记录,现在我们要针对它设计一个散列表。如果采用除留余数法,
  那么可以先尝试将散列函数设计为f(key) = key mod 12的方法。比如29 mod 12 = 5,所以
  它存储在下标为5的位置。


  不过这也是存在冲突的可能的,因为12 = 2×6 = 3×4。
  如果关键字中有像18(3×6)、30(5×6)、42(7×6)等数字,它们的余数都为6,这就和78所对应
  的下标位置冲突了。


如何合理选取p值


  使用除留余数法的一个经验是,若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数或不包含小于20质因子的合数。


  这句话怎么理解呢?要不这样吧,
  我再举个例子:某散列表的长度为100,散列函数H(k)=k%P,则P通常情况下最好选择哪个呢?
  A、91 B、93 C、97 D、99
 实践证明,当P取小于哈希表长的最大质数时,产生的哈希函数较好。我选97,因为它是离长度值最近的最大质数。
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值