哈希表处理地址冲突的方法及成功查找的平均长度
来源:互联网 发布:出租房用什么软件 编辑:程序博客网 时间:2024/05/18 03:34
首先通过一道例题来引出这篇博客的主旨:
[腾讯]已知一个线性表(38,25,74,63,52,48),假定采用散列函数 h(key)=key%7 计算散列地址,并散列存储在散列表A[0…6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为多少?
求得哈希地址(存在地址冲突)
当地址冲突时,每次地址+1 [2,3…] 直到找到空位
总的平均查找长度
=每个元素的查找长度之和
/总的元素个数
,即:(1+1+2+1+4+3)/6=2
处理冲突的方法
通过这道题不难看出,这里涉及了哈希表处理地址冲突的方法:线性探测再散列。下面就处理冲突的几种方法作整理:
1. 开放定址法 H[i]=(H(key)+d[i]) MOD m
其中H(key)为哈希函数;m为哈希表表长;d[i]为增量序列,下面的三种取法对应着三种探测类型:
(1)线性探测再散列:d[i]=1,2,3,…,m-1
(2)二次探测再散列:d[i]=1²,-1²,2²,-2²,3²,…,±k²
(3)随机探测再散列:d[i]=伪随机数序列
总结:用线性探测再散列可以保证做到:只要哈希表未填满,总能找到一个不发生冲突的地址H[k],而二次探测再散列只有在哈希表长m为形如4j+3(j为整数)
的素数时才可能,随机探测再散列,则取决于伪随机数列。
2. 再哈希法
在同义词(计算的hash值相同的记录)产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。这种方法不易产生”聚集”,但增加了计算的时间。
3. 链地址法
将所有关键字为同义词的记录存储在同一线性表中。在链表中的插入位置可以在表头或表尾;也可以在中间,以保持同义词在同一线性表中按关键字有序
例:已知一组关键字为(19,14,23,01,68,20,84,27,55,11,10,79) 则按哈希函数 H(key)=key MOD 13
和链地址法处理冲突构造所得的哈希表如下:
查找成功时,01,55,19,20,10,11需要一次;14,68,84,23需要两次;27需要三次;79需要四次。
平均成功查找长度为:(6*1+4*2+1*3+1*4)/12=21/12
4. 建立一个公共溢出区
所有关键字和基本表中关键字为同义词的记录,不管它们右哈希函数得到的哈希地址是什么,一旦发生冲突,都填入溢出表。
- 哈希表处理地址冲突的方法及成功查找的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表的平均查找长度
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
- 哈希表查找不成功时的平均查找长度计算和查找成功时的ASL
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
- 哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
- 哈希表(等概率情况下)查找成功与查找不成功的平均查找长度
- 哈希表查找不成功的平均查找长度
- 链地址法和线性探测法求查找成功与不成功的平均查找长度ASL
- 链地址法和开放定址法,求等概率下查找成功时的平均查找长度
- 哈希表查找——成功和不成功时的平均查找长度
- python type(object) 与 isinstance(object, base) 区别
- ubuntu16.04安装pycharm生成快捷方式以及命令使用说明
- windows安装solr并配置tomcat
- Execution failed for task ':app:compileDebugJavaWithJavac'. Failed to create MD5 hash for file ...
- Filebeat如何保证在日志文件被切割(或滚动rolling)时依然正确读取文件
- 哈希表处理地址冲突的方法及成功查找的平均长度
- git使用
- 装备系统学习--B站李三影教程
- gpu显存与模型文件的关系
- Netsoft Json 高级用法
- PHP调试时print_r ,var_dump的区别
- PAT 乙级 1076. Wifi密码 (15)
- ClassLoader工作机制
- 【SVN】项目清除SVN标记