关于哈希的几个概念
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=伪随机序列
拉链法:所有的同义词存在一个线性链表中,形成同义词链。适用于经常插入删除的操作。像用于图的邻接表法。
相关文章推荐
- 关于缓冲、缓存等几个易混淆的概念
- WCDMA缩略语 & 几个容易混淆的概念 & 关于掉话原因分析
- 管理会计中关于成本的几个概念
- 关于鼠标事件坐标位置的几个概念
- 几个关于Webservice的名词概念
- 关于移植的几个概念
- 关于MRP的几个概念
- 关于功率放大电路的几个基本概念
- 关于AJAX的几个重要概念
- 关于Qt中脚本的几个概念
- 关于MRP的几个概念
- 关于模块结构的几个重要概念
- 关于MRP的几个概念
- 关于J2EE Tranaction的几个基本概念
- 关于MRP的几个概念
- Apache源代码分析——关于模块结构的几个重要概念
- 关于MRP的几个概念
- [转]关于指针的几个概念
- 关于J2EE Tranaction的几个基本概念
- HTML:关于位置的几个概念