hash table 哈希表(散列表)

本文介绍了哈希表(又称散列表)的基本概念,包括其作为快速查找的数据结构以及关键的哈希函数设计。讨论了哈希冲突的常见处理策略,如扩大哈希表容量、开放地址法和链地址法,并解释了装填因子在减少冲突中的作用。哈希函数通过将输入映射到表的特定位置,但在哈希冲突时,需要采用相应策略确保数据的有效存储和检索。
摘要由CSDN通过智能技术生成

hash table ,也叫散列表。涉及到哈希函数、哈希冲突处理的问题。哈希函数是哈希表的关键,是用来从值到哈希表索引(存放位置)的映射。

比如:要存放一个学校学生的姓名,他们是Amanda, Jack, Andy, Tom, Bob, Black等等500个人。我们可以设计一个哈希表,容量为500,来存放这些学生的信息。哈希表的目的是快速访问,利用数组的随机访问性,快速的通过下表访问元素。需要设计一个哈希函数,来决定每个人存在什么地方。比如有一个哈希函数:

h(name) = {

return name[0] -'A'

}

这个函数会按照首字母序把信息放在对应位置。但是Andy和Amanda会造成冲突,因为一个位置上不能存两个人,Amanda去存时发现Andy已经占用了这个位置,此时就需要冲突处理。

一、基本概念

散列法存储的思想是由关键字值和hash函数决定数据的存储地址。哈希表是单向的,即通过key获得hash值,可以得到存储地址,而反过来知道hash,无法算得key。
例如,最多有31个不重复的0~999之间的数字需要存放,此时可以用一个31容量的数组保存这些数字,并且使用一个hash 函数:
h(i) = n mod 31 
将这些0~999的数字映射到0~30。但是会存在哈希冲突的问题。比如95和64映射的结果都是2,此时就需要解决哈希冲突了。

二、常用的哈希函数

1、直接定址法

直接定址法的哈希函数是关键码的线性函数,即: H(key)=a*key+b (a,b为常数)。

2、除留余数法
除留余数法的基本思想是:选择某个适当的正整数p,以关键码除以p的余数作为哈希地址,即H(key)=key mod p,其中哈希表的大小最好是质数,即P是质数。
3、数字分析法
数字分析法根据关键码在各个位上的分布情况,选取分布比较均匀的若干位组成哈希地址。
4、平方取中法
平方取中法是对关键码平方后,按散列表大小,取中间的若干位作为散列地址。
5、折叠法
折叠法是将关键码从左到右分割成位数相等的几部分,最后一部分位数可以短些,然后将这几部分叠加求和,并按哈希表表长,取后几位作为哈希地址。通常有两种叠加方法:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值