哈希表

来源:互联网 发布:时时彩源码搭建视频 编辑:程序博客网 时间:2024/06/05 20:34

什么是哈希表?

哈希表就像一本书的目录,章节相当于关键字,通过对应的页码可以直接定位章节的位置。哈希表用一维数组保存关键字的内存地址,数组的长度为哈希表的表长。通过哈希函数求出哈希值定位到数组的下标,从而取出关键字的内存地址进行访问。

优点:查询速度快,O(1)

缺点:哈希表基于数组,不易扩充,而且冲突不可避免。若哈希表填满,性能下降。


构建哈希:

(1)直接寻址法:

关键字直接作为哈希地址

(2)数字分析法

寻找数字的规律,如学号、日期中的某几位

(3)除余法

关键字%m,m为不大于表长的整数,最好为素数

(4)随机数法

取一个随机函数,求关键字的随机值作为哈希地址,适合关键字长度不同的情况

(5)折叠法

将关键字分为长度相等的几个部分,求出这几个部分的和作为哈希地址

(6)平方取中法

求关键字的平方,取平方的某几位作为哈希地址


哈希冲突:

(1)开放地址法:

线性探测:增量d的取值为1、2、3、4……

二次探测:增量d的取值为-1、1、-4、4、-9、9……-k2,k

随机探测:增量d为随机序列

(2)拉链法:

将冲突的关键字,用单链表连接起来,哈希表中存储的是单链表的头指针。

(3)再哈希法:

当冲突时,用另外一个哈希函数,若还冲突再用另外一个哈希函数

(4)公共溢出区法:

当冲突时,将冲突的关键字存放在另外一个表中(公共溢出区)


负载因子:

设m为关键字的个数,n为表长。

则a = m/n 称为负载因子,负载因子过大,容易冲突。负载因子过小,造成空间的浪费。


哈希表的查找:

根据哈希函数求出关键字的哈希地址,到哈希表中找到关键字的地址,若对应的内容与关键字相同,则查找成功。否则按照解决冲突的规则,进行查找。

0 0
原创粉丝点击