哈希表
来源:互联网 发布:故宫淘宝营销策略分析 编辑:程序博客网 时间:2024/06/06 05:44
- 概述
- 哈希函数的基本构造方法
- 处理冲突的常用方法
- 哈希表的建立、查找及其ASL分析
概念
哈希表的基本思想
在记录的存储地址与它的关键词之间建立一个确定的对应关系,这样理想状态下不经过比较,一次存储就能得到所查元素。
哈希表
一个有限的连续的地址空间,用以容纳用哈希地址存储的记录。
哈希函数
记录的存储位置与它的关键词之间存在的一种对应关系
冲突
对不同的关键字可能得到同一哈希地址,即
key1≠key2 ,而H(key1)=H(key2)
同义词
具有相同函数值的关键字对该哈希函数来说称做同义词。
哈希散列地址
根据设定的哈希函数H(key)和处理冲突的方法确定的记录的存储位置。
装填因子
表中填入的记录数n和哈希表表长m之比。
α=n/m
哈希函数的基本构造方法
若是非数字关键字,则需先对其进行数字化处理。
直接定址法
此法仅适合于:地址集合的大小 = 关键字集合的大小
例:
有一个1岁到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。(即H(key)=key)
若有一个解放后出生的人口调查表,关键字是年份,哈希函数取关键字加一常数:
数字分析法
取关键字的若干数位作为哈希地址。
假设关键字集合中的每个关键字都是由 s 位数字组成 (u1, u2, …, us),分析关键字集中的全体,并从中提取分布均匀的若干位或它们的组合作为地址。
此方法仅适合于:能预先估计出全体关键字的每一位上各种数字出现的频度。
平方取中法
取关键字平方后的中间几位作为哈希地址。
求“关键字的平方值” 的目的是“扩大差别” ,同时平方值的中间各位又能受到整个关键字中各位的影响。
此方法适合于: 关键字中的每一位都有某些数字重复出现频度很高的现象。
折叠法
将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几个部分的叠加和(舍去进位)作为哈希地址。
此方法适合于: 关键字的数字位数特别多。
除留余数法
H(key)=key MOD p (p<=m)
m:哈希表的表长
p:最好为素数,有助于哈希表的散列
为什么要对 p 加限制?
给定一组关键字为: 12, 39, 18, 24, 33, 21, 若取 p=9, 则对应的哈希函数值将为: 3, 3, 0, 6, 6, 3
可见,若 p 中含质因子 3, 则所有含质因子 3 的关键字均映射到“3 的倍数”的地址上,从而增加了“冲突”的可能。
随机数法
H(key)=random(key)
此方法适合于:关键字长度不等时的情况。
处理冲突的常用方法
开放定址法 (空缺编址法)
(为产生冲突的地址寻找下一个哈希地址)
Hi = ( H(key)+di ) MOD m
i=1,2, …, k (k<=m-1)
m:哈希表的表长; di:增量序列
1)线性探测再散列 di= 1,2, …, m-1
缺陷:有聚集(堆积)现象—非同义词地址冲突。
若冲突,则依次位置+1,直到找到空闲位置,插入
2)二次探测再散列 di= 12, -12, 22, -22, 32,…,+-k2
k <=m/2
若冲突,则以冲突位置为基准,依次看
+12,−12,+22,−22,+32,−32,... 的位置上是否空闲,若空闲则插入,以此类推。
3)伪随机探测再散列 di = 伪随机数序列
4) 双重散列函数探查法 di= i*h1(key)
0< i <=m- 1
要求:h1(key)的值与m互素。
m为素数时, h1(key)可取1到m-1之间的任何数,建议h1(key)=key mod (m-2) +1
m为2的方幂时, h1(key)可取1到m-1之间的任何奇数
再哈希法
Hi = RHi(key) i=1,2, … , k RHi为不同的散列函数
链地址法
为每个哈希地址建立一个单链表,存储所有具有同义词的记录。
建立一个公共溢出区
哈希表的建立、查找及其ASL分析
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- .哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 面向对象的六大原则
- 462_部分或圆形透明蒙版
- Delphi 7编写的Webservice生成的DLL部署到IIS上(续)
- 产品与运营之用户激励机制
- 使用jsp/servlet简单实现文件上传所遇到的问题
- 哈希表
- 消费者JmsListener应用源码浅析
- php分页显示数据库内容
- 最小生成树(城市之间的最短距离)
- 配置方法数超过 64K 的应用
- copy构造函数的调用时机1和2
- 222. Count Complete Tree Nodes
- APP开发实战148-使用AOP技术输出Log的具体实现
- 【WEB】前端系统配色方案(全览)