哈希表解决冲突的方式
哈希表解决冲突的4种方式
- 开放地址法
- 1.线性探测法
- 2.平方探测法
- 3.再散列法
- 4.伪随机序列法
装填因子=关键字个数 / 表长
开放地址法
1.线性探测法
假设冲突的位置为d,则线性探测函数就从d开始依次加1,直到找到空位置,然后放入元素。
公式:h(x)=(Hash(x)+i)%HashTable.size()
【2010年全国试题41(10分)】将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表。
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
(1)表长=关键字个数 / 装填因子 = 7/0.7=10
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
7 | 14 | 8 | 11 | 30 | 18 | 9 |
(2)
①查找成功的平均探测长度
查找7,次数1
查找8,次数1
查找30,次数1
查找11,次数1
查找18,次数3
查找9,次数3
查找14,次数2
ASL(success) = 查找各个数所需次数和 / 表中元素个数 = (1+1+1+1+3+3+2)/ 7 = 12/7
②查找失败的平均探测长度
查找失败即查找一个不存在于序列中的数,但查找时我们并不知道
查找70,次数3:H(70)=0,从0号位置开始线性查找
0号位置:未找到,次数1
1号位置:未找到,次数2
2号位置:无元素,假设70存在于序列中,那么70应该放在2号位置上,但2号位置为空,说明哈希表中不存在70,因此就可以判断查找失败了,此时次数3
因此,我们可以看出一个规律:查找失败次数等于从各号位置开始直到遇到的第一个空位置(且该空位置在模数号(即7号)位置之前)所需次数
ASL(fail) = 各位置查找失败所需次数和 / 表长 = (3+2+1+2+1+5+4)/ 7 = 18/7
2.平方探测法
公式:h(x)=(Hash(x)±i^2)%HashTable.size()
3.再散列法
设置多个哈希函数,但第一个哈希函数计算出来的位置发生冲突时,就用第二个哈希函数,直到不发色冲突为止,但这样增加了时间成本。
4.伪随机序列法
建立一个伪随机数发生器,并给定一个随机的数做起点。
哈希表解决冲突的方式相关推荐
- 哈希表解决冲突的两种方式
虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的.当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时.冲突就难免会发 生.另外,当关键字的实际取值大于哈希表的长度时,而且表中 ...
- 哈希表 - 解决哈希冲突(总结)
什么是哈希表 哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过关键码映射的位置去寻找存放值的地方. 举例说明:新华字典中,获取"暗"字详细信息,需要根据拼音an去查找拼音索 ...
- 解决Hash(哈希表)冲突的四种方案
解决Hash(哈希)冲突的四种方案 参考&鸣谢 解决哈希冲突必须知道的几种方法 小僵鱼 你还应该知道的哈希冲突解决策略 vivo互联网技术 解决哈希冲突的三种方法 kaleidoscopic ...
- 哈希表(概念,冲突的解决,实现哈希桶)
目录 概念 冲突 如何尽量减少冲突? 负载因子 解决冲突的几种方案 冲突严重时的解决办法 哈希表的实现 基本类型哈希桶实现 泛型哈希桶实现 注意!!! 概念 构造出一种存储结构,通过某种函数使元素的存 ...
- leetcode哈希表解决异位词问题
哈希表 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构. 它通过计算出一个键值的函数(hash function),将所需查询的数据映射到表中一个位置 ...
- 哈希表、冲突处理方法、查找长度
1.定义 哈希函数就是将关键字和它的存储位置之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应.按这个思想建立的表为哈希表. 2.哈希函数的构造方法 2.1 直接定址法 取关键 ...
- 哈希表及其冲突与排解
本文来自于对邓俊辉老师编著<数据结构(C++语言版)(第3版)>和网上大神们的博客整理而来. 博客中有个人理解,而个人水平有限,故若有错误的地方,请留言指出,谢谢! 一.哈希表 1.哈希表 ...
- git解决冲突的方式
冲突1: 当你commit以后,在执行git pull –rebase的时候出现冲突,请按如下步骤解决: 1 找到冲突文件,解决冲突 2 执行git add xxx(xxx为冲突文件全路径) 3 执行 ...
- 12.前K个高频元素---使用优先队列和哈希表解决
一.目的 写本片博客的目的是为了让自己和大家了解优先队列的用法以及HashMap的两种遍历方式 二.首先讲解一下什么是优先队列 PriorityQueue保存队列元素的顺序不是它们加入队列的顺序,而是 ...
最新文章
- LeetCode 973. K Closest Points to Origin--TopK 问题--最小堆--C++,Python解法
- 03-JDBC学习手册:JDBC中几个重要接口和异常处理
- bzoj 4921: [Lydsy六月月赛]互质序列
- Linux之Server环境配置
- SendMail与Postfix的架构备忘2
- 被边缘化的“卓越亚马逊”
- Tensorflow学习教程------tensorboard网络运行和可视化
- 【bzoj2693】jzptab 莫比乌斯反演+线性筛
- linux应用之----进程通信
- Python -- reload 函数
- Web前端求职必备 常见前端面试题汇总(二)
- Luogu4640 BJWC2008 王之财宝 容斥、Lucas
- python写一个表白程序_用Python个女神做一个表白神器
- nginx 使用自定义 log_format 以及输出自定义http头
- 14-微信小程序商城 产品详情页布局(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
- 三调专题(一)宗地四至提取的量化算法及FME实现
- Mysql大数据优化方案
- Kafka安装与简介
- 人脸识别原理:(初级篇)内含PPT
- 免费实用的jpg转换成pdf工具