哈希函数(hash)

目录

散列函数

概念

冲突

构造散列函数tips

构造hash函数的方法

处理冲突的方法


散列函数

(散列表是根据给定的关键字计算出关键字在表中的地址。即散列表建立了关键字和存储地址之间的一种直接映射关系)

概念

一个把查找表中的关键字映射成对应地址的函数,记作Hash(key)=addr。

冲突

散列函数可能会把两个或两个以上的不同关键字映射到同一地址(这些发生碰撞的不同关键字称为同义词)

                                         (从视频里截的图,嘿嘿)

构造散列函数tips

①散列函数定义域必须包含全部需要储存的关键字,而值域的范围则依赖与散列表的大小或地址范围

②散列函数计算出来的地址应该能够等概率,均匀的分布在整个地址空间,从而减少冲突的发生

③散列函数颖尽量简单,能够在较短的时间内计算出任意关键字对应的散列地址

构造hash函数的方法

直接定址法:直接取关键字的某个线性函数值为散列地址,散列函数为H(key)=a✖key+b。(最简单且不会产生冲突)

除留余数法:假定散列表表长称为m,取一个不大于m但最接近或等于m质数p,利用取模把关键字转换成散列地址。散列函数为H(key)=key%p。(选p很重要)

处理冲突的方法

1、开放定址法

当冲突发生时,使用探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到找到碰到一个开放的地址 (即该地址单元为空)为止,将待插入的新结点存人该地址单元。
(用开放定址法建立散列表时,建表前须将表中所有单元置空)

(装填因子:a一般取0.5到0.9之间。目的是为了确定合适的表长。)

***探查序列:Hi=(H(key)+di)% m (i=1,2,…,k (k≤m-1) )

H(key)为哈希函数;m为哈希表表长;di为增量序列,可有下列三种取法:

(1)    di=1,2,3,…,m-1,称线性探测再散列;

(2)    di=12,-12,22,-22,33,…,±k2,(k≤m/2)称二次探测再散列;

(3)    di=伪随机数序列,称伪随机探测再散列。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值