散列函数设计:除留余数法
来源:互联网 发布:软件测试基础方法 编辑:程序博客网 时间:2024/06/05 02:45
散列函数设计:除留余数法
转载地址
感谢分享
除留余数法介绍
除留余数法此方法为最常用的构造散列函数方法。对于散列表长为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为12的话,就可能出现下面的情况,所有的关键字都得到了0这个地址数,这未免也太糟糕了点。
但是我们如果不选用p=12来做除留余数法,而选用p=ll,则结果如下:
这个时候就只有12和144有冲突,相对来说,就要好很多了。
如何合理选取p值
使用除留余数法的一个经验是,若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数或不包含小于20质因子的合数。这句话怎么理解呢?要不这样吧,我再举个例子:某散列表的长度为100,散列函数H(k)=k%P,则P通常情况下最好选择哪个呢?A、91 B、93 C、97 D、99实践证明,当P取小于哈希表长的最大质数时,产生的哈希函数较好。我选97,因为它是离长度值最近的最大质数。
0 0
- (4)散列函数设计:除留余数法
- (4)散列函数设计:除留余数法
- 散列函数设计:除留余数法
- 除留余数法实现简单hash函数
- HashMap (除留余数+拉链法)
- 哈希表的实现 除留余数法
- 等式数量--hash算法之除留余数法
- 数据结构---哈希表(KV模式)(除留余数法)
- 实现哈希表查找(除留余数法)
- 数字电路设计之恢复余数除法器的verilog实现
- 数据结构 c语言实现哈希(hash)表查找 除留余数法构建hash函数开放定值法线性探测处理冲突
- 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表
- 【除留余数法定义hash函数+平方探测法解决hash冲突】数据结构实验之查找五:平方之哈希表
- 哈希表之除留余数法+线性探测法,链地址法,公共溢出区法
- 数据结构之HashTable(除留余数法—链地址法)
- 除留余数法实现哈希表,开vector法解决冲突
- nyoj-138-找球号(二)----hash算法之除留余数法+vector
- 【哈希表除留余数法+BSGS算法求离散对数】POJ Discrete Logging 2417
- vector使用swap释放内存
- 459. Repeated Substring Pattern
- 文章标题
- Oracle Study---Oracle 11g 不可见索引案例
- linux中rpm命令的一些使用总结
- 散列函数设计:除留余数法
- 三条技巧让你的译文“说得通”
- 合数分解 UVA
- web.xml version3.1 配置
- pwntools初体验
- flex布局
- POJ 3213 PM3 可能会
- 每天一个adb命令:am 命令详解
- 练习系统 实验一 谁拿了最多的奖学金