您的位置:首页 > 其它

关于哈希的几个概念

2016-11-13 14:23 316 查看

关于哈希的几个概念

@(算法学习)

存储效率

装填因子

存储效率不知道这个名词具体含义,待补充。

装填因子 = 表中记录个数散列表长度

构造散列函数的方法

原则:

定义域包含全部需要存储的关键字,值域依赖于散列表大小

尽可能等概率,均匀分布到整个地址空间,降低冲突发生几率

散列函数计算应尽量简单

常用:

直接定址法:取关键字的线性函数值。

Hash(key)=a⋅key+b

不会冲突,但当关键字分布不连续时,空位很多

除留余数法:最简单常用的方法。散列表长度是m,选取一个不大于m但最接近或等于m的**质数**p。

Hash(key)=key % p

可能会有冲突。比如散列表长度是4,则可选的p是3,可以映射到0,1,2三个位置,3号这个位置无法映射到。3号映射位置是0,因此冲突。如果散列表长度是5,则可选的p是5,求余是0,1,2,3,4,恰好每个地址空间都可以映射到,不会冲突。

数字分析法:假设关键字是以r为基的数,并且哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干数位组成哈希地址。共r个数码(0~r-1),分析位的分布情况。

平方取中法:取关键字平方后的中间几位为哈希地址。通常在选定哈希函数时不一定能知道关键字的全部情况,取其中的哪几位也不一定合适,而一个数平方后的中间几位数和数的每一位都相关,由此使随机分布的关键字得到的哈希地址也是随机的。取的位数由表长决定。

折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位)作为哈希地址。

处理冲突的方法

开放定址法:可存放新表项的空闲地址既向同义词开放也向非同义词开放。

Hashi=(Hash(key)+di) % m,i=1,2,...;di是增量序列,m是表长

取定某一增量序列后,处理方法是确定的。

线性探测法:di=1,2,3,...m−1

平方探测(二次探测)法:di=12,−12,22,−22,...,k2,−k2,k≤m2,m=4k+3且为质数,可以避免出现堆积现象

再散列法:di=Hash2(key)

伪随机序列法:di=伪随机序列

拉链法:所有的同义词存在一个线性链表中,形成同义词链。适用于经常插入删除的操作。像用于图的邻接表法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息