哈希(附哈希直接取余的算法)

本文介绍了哈希的基本概念和几种常见的散列函数,包括直接取余法、平方取中法、叠加法、基数转换法和除留余数法。同时,讨论了处理哈希冲突的开放定址法、再散列法和链地址法等策略,并分享了一个使用直接取余法解决实际问题的代码示例。
摘要由CSDN通过智能技术生成

哈希的英文是Hash,一般被译为散列,也被音译为哈希,把任意长度的输入通过散列算法输出,该输出值就是散列值。一般散列算法会根据输入值计算出输出应该存储的位置,这个位置如果和已经存储键值冲突则需进行重新映射。常见的散列函数有:

(1)直接取余法: f(x)=(x+MAX)mod size 其中MAX是一个比较大的数,size是存储空间

(2)平方取中法:先计算关键字的平方然后有目的的选取中间的若干位作为散列地址。若,假设散列地址范围是[000,999],k=4731则k^2=22382361取第三位至第五位作为其散列地址,则H(k)=382

(3)叠加法:把关键字分割成位数相同的几部分,如最后一部分位数不够,则左边可以空缺。

(4)基数转换法:设原关键字是十进制数,人为的当做q进制数,再转换成十进制数作为散列地址。

(5)除留余数法:设散列范围的长度为m,将关键字值k除以某数p(p<=m)以后所得的余数作为散列地址。对应的散列函数为H(k)=k mod p

处理冲突的方法:

(1)开放定址法:将散列表中“空”的地址向处理冲突开放,当散列表未满时,处理冲突需要的“下一个”空位在该散列表中解决。因此,当发生冲突时散列函数为:Di=(H(k)+di) mod m

di的取法为:

(a)1,2,3,...m-1,称线性探测再散列。

(b)1,-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值