哈希表与哈希函数

哈希表(散列表):基于哈希函数的一种查找表/一种根据关键字直接进行访问的数据结构,哈希表(散列表)建立了关键字和存储地址之间的映射关系。
哈希函数(散列函数):把查找表中的关键字映射成该关键字对应地址的函数
冲突:哈希函数把两个或者两个以上的关键字映射到同一地址。

哈希函数(散列函数)构造方法
原则
(1)散列函数的定义域包含全部关键字、值域则依赖于散列表的大小或地址范围
(2)散列函数计算出的地址等概率、均匀的分布在全部地址中,减少冲突的发生
(3)散列函数尽量简单,较短时间计算出关键字的散列地址
常用方法
(1)直接定址法:关键字的线性函数的值作为散列地址。适用于关键字分布连续
H(key) = a*key+b
(2)除留余数法:
[质数:除了1和它本身无其它因数]
假定散列列表长为m,取一个不大于m但最接近或者等于m的质数p,根据公式计算关键字的散列地址
H(key) = key % p
(3)数字分析法:
关键字是r进制数(2、8、10),r个数码中只有几种数码经常出现,选取数码分布均匀的作为散列地址
(4)平方取中法:
取关键字的平方值的中间几位作为散列地址,散列地址与关键字的每一位都有关系,可以使散列地址分布均匀
处理冲突的方法
为产生冲突的关键字寻找下一个空的Hash地址
开放定址法:空闲地址既向它的同义词表项开放又向它的非同义词表项开放
H(key为散列函数,m表示散列列表长,di为增量序列)
di的取法有四种
(1)线性探测法:di = 0,1,2,…m-1,发生冲突后顺序查看下一个单元,直到找出一个空单元,这种方法查找效率低
(2)平方探测法:k<=m/2
散列长度m必须是满足4k+3的素数
(3)再散列法
di = Hash2(key)时称为再散列法,第一个散列函数计算出来的地址发生冲突时,再利用第二个散列函数作为地址增量

i为冲突次数,初始为0
(4)伪随机序列法,di=伪随机数序列

拉链法:把所有同义词存储到一个线性表中,线性链表由散列地址唯一标识。(同义词:映射到同一地址上的关键字称为同义词)

文章参考:王道数据结构以及李春葆数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值