数据结构笔记(六)——散列(Hash Table)之散列函数(1)

本文介绍了散列表(Hash Table)的实现原理,重点讲解了散列函数的设计,包括关键字为整数时的取余法和平方取中法,以及关键字为字符串时的不同策略。讨论了如何通过散列函数使得关键字分布更均匀,并简要提到了冲突解决的方法,如分离链接法和开放定址法。
摘要由CSDN通过智能技术生成

散列表(hash table)的实现叫做散列(hashing)。这是以常数平均时间O(1)进行插入、删除和查找的技术。散列表没有顺序,需要元素间排序信息的操作,如findMin、findMax不会得到有效支持(就是这东西不是这么用的,你可以实现,但效率不会很高)。理想情况下,散列表是一个包含关键字的具有固定大小的数组,数组大小一般被视为散列表的一部分。数据通过散列函数简单的计算映射到数组适当的位置上,理想情况下当然是每个关键字对应一个位置,但这是不可能的。关键字那么多,数组大小总是有限的,总会有那么两个关键字被映射到同一个位置。因此我们放宽要求,希望散列函数简单,而且使关键字分布得比较均匀。一般关键字有整数和字符串,对应就有不同的散列函数,这里介绍几种散列函数:

关键字为整数:

1、取余法

用关键字对M取余作为散列地址,散列函数为hash(x)=x mod M,M一般为数组大小。这里的数组大小需要仔细考虑,设想如果M=10,而关键字都以0结尾,他们将会全部散列到0这个位置。一般取M为素数是比较好的选择。当然对于取余法还有很多可以改进的地方,比如对x进行线性运算(a*x+b)再取余来增大每个x的间隔,x乘一个小数对结果的小数部分进行其他操作等,散列函数还是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值