[数据结构]散列表-链接法和开放寻址法 线性探查
2016-08-30 23:31
846 查看
在介绍hash表之前首先提到直接寻址表
但是由于实际上存储在字典里的关键字集合K比实际上所有可能的关键字的全域U要小的多,因此散列表所需要的存储空间比直接寻址表要小的多
通过散列函数
h:U -> {0,1,2…m-1}
其中m 远小于|U|
但是对于h(2)=h(5)这样的访问冲突,我们采用两种方法来解决
① 链接法
② 开放定址法
链接法,插入最坏运行时间O(1),查找最坏运行时间和表的长度成正比。
开放寻址法,所有的元素都存储在散列表中,要系统的检查所有的表项,直到找到所需的元素,或者所需的不在表中。用开放寻址法来插入元素,需要进行探查,直到找到空的槽来存放关键字为止。典型的探查方法有线性探查。
下面介绍一个线性探查的例子:(本位置X被占据,继续寻找下一个x+1的位置,直到找到空槽为止)
设散列表的长度为11,哈希函数H(k)=(k的第一个字母在字母表中的序号)mod11, 若输入的顺序为(D,BA,TN,M,CI,I,K,X,TA)采用内散列表,处理冲突方法为线性探查法,按要求构造哈希表,在等概率的情况下,查找成功的平均查找长度为?
D: 4%11=4 1次
BA:2%11=2 1次
TN:20%11=9 1次
M:13%11=2 已被占据,放在3; 2次
CI:3%11=3 已被占据,放在4;4已被占据放在5 3次
I:9%11=9 已被占据,放在10 2次
K:11%11=0 1次
X:24%11=2 已被占据放在3 已被占据放在4 已被占据放在5 已被占据放在6 5次
TA:20%11=9 已被占据放在10 已被占据放在0 已被占据放在1 4次
所以平均查找长度为(1+1+1+2+3+2+1+5+4)/9 = 20/9
总结:
链接法其中优点有:
1、链接法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
2、由于链接法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况。
开放寻址法不用指针,潜在地节约了空间,用这些空间可存放更多的槽,从而潜在地减少了冲突,提升了速度。
但是由于实际上存储在字典里的关键字集合K比实际上所有可能的关键字的全域U要小的多,因此散列表所需要的存储空间比直接寻址表要小的多
通过散列函数
h:U -> {0,1,2…m-1}
其中m 远小于|U|
但是对于h(2)=h(5)这样的访问冲突,我们采用两种方法来解决
① 链接法
② 开放定址法
链接法,插入最坏运行时间O(1),查找最坏运行时间和表的长度成正比。
开放寻址法,所有的元素都存储在散列表中,要系统的检查所有的表项,直到找到所需的元素,或者所需的不在表中。用开放寻址法来插入元素,需要进行探查,直到找到空的槽来存放关键字为止。典型的探查方法有线性探查。
下面介绍一个线性探查的例子:(本位置X被占据,继续寻找下一个x+1的位置,直到找到空槽为止)
设散列表的长度为11,哈希函数H(k)=(k的第一个字母在字母表中的序号)mod11, 若输入的顺序为(D,BA,TN,M,CI,I,K,X,TA)采用内散列表,处理冲突方法为线性探查法,按要求构造哈希表,在等概率的情况下,查找成功的平均查找长度为?
D: 4%11=4 1次
BA:2%11=2 1次
TN:20%11=9 1次
M:13%11=2 已被占据,放在3; 2次
CI:3%11=3 已被占据,放在4;4已被占据放在5 3次
I:9%11=9 已被占据,放在10 2次
K:11%11=0 1次
X:24%11=2 已被占据放在3 已被占据放在4 已被占据放在5 已被占据放在6 5次
TA:20%11=9 已被占据放在10 已被占据放在0 已被占据放在1 4次
所以平均查找长度为(1+1+1+2+3+2+1+5+4)/9 = 20/9
总结:
采用开放定址法处理散列表的冲突时,其平均查找长度高于链接法处理冲突
链接法其中优点有:
1、链接法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
2、由于链接法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况。
开放寻址法不用指针,潜在地节约了空间,用这些空间可存放更多的槽,从而潜在地减少了冲突,提升了速度。
相关文章推荐
- 详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)
- 哈希之闭散列-线性算法和二次探查法
- 数据结构--解决散列冲突,分离链接法
- [数据结构]四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
- js-数据结构-散列表(线性探查)
- C++数据结构--.哈希表线性探测开放寻址法与独立表链地址法
- 散列(哈希)表的C++简单操作和实现(线性探查)
- 【数据结构】 线性表的链接表
- 第13题用线性探查法实现的散列表 POWERBY KTL
- 数据结构与算法之散列(分离链接法)<七>
- 数据结构:散列1(分离链接法)
- 数据结构--解决散列冲突,分离链接法
- 【数据结构】对于线性表的顺序和链接两种存储方式的主要优缺点
- 线性探查法实现的散列表(哈希表)类
- 进程虚拟内存空间---线性区的数据结构
- (8) Java源码分析 ---- LinkedList (对应数据结构中线性表中的双向循环链表,JDK1.6)
- 《数据结构》2.5线性表的其他表示形式
- 实验 哈希表线性探测再散列
- 数据结构第一天、线性表的顺序表示与实现
- PAT 数据结构 02-线性结构1. Reversing Linked List (25)