计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)
散列表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。映射函数叫做散列函数,存放记录的数组叫做散列表。
装填因子
关键字个数 / 表长
处理冲突
一般来说冲突不可避免的,只能尽可能地减少冲突的发生。在建立Hash表的时候必须进行冲突处理。
下面主要介绍线性探测法:也是一种比较常用的处理冲突的方法(但是极易产生堆积问题)
线性探测法
即从发生冲突的地址(记做d)开始,依次探查d的下一个地址,直至找到一个空位置为止。记住这句话。查找时若查到空位置还没有找到需要查找的元素则说明不在列表中,结合前一句话理解一下,还是比较容易理解的。这个为后面计算查找失败的平均长度提供了计算思路。链地址法
通过单链表将关键字连接起来,利用这种方法不会产生堆积问题。但是所谓的堆积问题,并不能完全通过利用单链表法来避免。毕竟并不是适用于任何问题,在能够利用链地址法不能解决冲突的问题,也许利用线性探测法可以有着不错的效果。
性能分析
即本文的主要内容,查找成功与查找失败的分析。
查找成功
的平均查找长度
即找到表中已有表项的平均比较次数查找失败
的平均查找长度
即找不到待查的表项但能找到插入位置
的平均比较次数
平均查找长度的计算
直接以题目来理解会比较快些:
现有长度为11 且初始为空的散列表HT,散列函数H(key) = key % 7,采用线性探查法解决冲突。将关键字序列87,40,30,6,11,22,98,20 依次插入HT后,HT的查找失败的平均长度是多少呢? 查找成功的平均查找长度又是多少呢?
① 首先,通过散列函数并且利用线性探测法给他们每个字划分好自己的位置;
② 记录每个字冲突的次数,后面在计算查找成功的平均长度会用到;
③ 查找失败计算每个查找失败对应地址的查找次数,即从所查位置开始往后查直至查到空位置位置;
④ 其实,后面熟悉过程之后,在列出下面的每个关键字对应地址的表格之后就可以秒出答案;
注意事项
查找失败时对应的地址在这个题目,只能是7 即 0~6 ;
ASL 查找失败= (9 + 8 + 7 + 6 + 5 + 4 + 3 )/ 7 = 6
ASL 查找成功= (1 + 1 + 1 + 1 + 1 + 1 + 1 + 2)/ 8 = 9 / 8
散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
关键字 | 98 | 22 | 30 | 87 | 11 | 40 | 6 | 20 | |||
冲突次数 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
OK,上面把例子说完了,可以再看看下面这个题目,来测试下是否理解了上面的那些需要注意的点。
将关键字序列(7,8,30,11,18,9,14)散列存储到散列表中。散列表的存储空间是从0开始的一维数组,散列函数为H(key) = (3*key)mod 7,处理冲突采用线性探测法,要求装填因子为0.7。
(1)画出所构造的散列表。
(2)分别计算等概率情况下的查找成功和不成功的平均查找长度。(12/7 和 18/7
)
(1)数组大小 = 7 / 0.7 = 10
散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
关键字 | 7 | 14 | 8 | 11 | 30 | 18 | 9 |
(2)
①查找成功时
散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
关键字 | 7 | 14 | 8 | 11 | 30 | 18 | 9 | |||
冲突次数 | 0 | 1 | 0 | 0 | 0 | 2 | 2 | |||
比较次数 | 1 | 2 | 1 | 1 | 1 | 3 | 3 |
ASL 查找成功= (1 + 2 + 1 + 1 + 1 + 3 + 3 )/ 7 = 12 / 7
②查找失败时
散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
关键字 | 7 | 14 | 8 | 11 | 30 | 18 | 9 | |||
比较次数 | 3 | 2 | 1 | 2 | 1 | 5 | 4 |
ASL 查找失败= (3 + 2 + 1 + 2 + 5 + 4)/ 7 = 18 / 7
【总结】简单吧,主要就是查找失败时除以的分母是 mod 后面的那个数,而不是关键字的个数。
计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)相关推荐
- 求一颗二叉排序树查找成功和失败情况下的平均查找长度
/** * 实验题目: * 求一颗二叉排序树查找成功和失败情况下的平均查找长度 * 实验目的: * 掌握二叉排序树的查找过程及其算法设计 * 实验内容: ...
- 数据结构 散列表 除留余数法 线性探测法解决冲突
已知9名学生的信息,每个学生信息包括编号和姓名.学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳.用散列表实现以编号为关键码的查找.散列函 ...
- SJTU散列表的建立
[问题描述]采用除留余数法构造散列函数H(key) = key mod p,散列表的表长为m,其中p≤m,采用线性探测法处理冲突(当探测到表的最后一个位置仍无空位时,从表的开始位置重新探测).现将n( ...
- 散列表查找的一个实例
这里解决冲突的方法是开放地址法:"开放地址指的是表中尚未被占用的地址,开放地址法就是当冲突发生时候,形成一个地址序列,沿着这个序列逐个进行探测,直到找到一个空的开放地址,将发生冲突的关键字存 ...
- 009.查找手机电话簿【散列表】
1. 散列表 顺序存储的结构类型需要一个一个地按顺序访问元素,当总量很大且我们所要访问的元素比较靠后时,顺序存储的结构类型性能就比较低.而散列表是一种空间换时间的存储结构,也是提升效率的一种比较常用的 ...
- 散列表查找失败平均查找长度
如果你看了很多其他博客然后都看不懂看到了这篇,你一定可以容易懂的!我佛了,这么简单的东西死板地讲题目不讲原理鬼看得懂啊,这种风气真的不行,我忍不住想骂一声垃圾,啥玩意儿,误人子弟!原理懂了啥题不会做? ...
- 数据结构课程设计-利用散列表做一个电话号码查找系统
[基本要求] (1)设每个记录有下列数据项:电话号码.用户名.地址: (2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表: (3)采用一定的方法解决冲突: (4)查找并显示给定电话号码的 ...
- 等概率情况下查找成功时的平均查找长度
4.设散列表的地址范围为0-17,散列函数为:H(K)=K MOD 13,K为关键字.用线性探测法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49),完成以 ...
- 哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度
哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度 了解ASL的公式 线性探测法求ASL 链地址法求ASL 了解ASL的公式 查找成功时:ASL =1n\frac{1}{n}n1 ∑i=1 ...
最新文章
- 上交三月月赛[SJTU] 1106 sudoku
- javascript高级程序设计之BOM
- 使用SVN提示“工作副本已经锁定”的解决办法
- 揭秘继承技术之虚函数
- 安装分布式文件系统MooseFS
- 微软开源AI诊断工具Error Analysis
- 【附答案】Java面试2019常考题目汇总(一)
- 第8章 Service基础Activity与Service绑定
- 值得收藏的品牌案例—到集设,灵感即到
- Eclipse中Tab的配置(设置为按一下Tab键,效果是按4次空格,而不是4个空格的缩进)
- avast高级版许可文件_明道云私有部署版已上架腾讯云镜像市场
- 考研数据结构(3)笔记
- C# 根据模板 导出 Excel 图表 (NPOI组件)
- 分支限界法之布线问题
- 数字孪生:迈向未来,智慧城市大脑运营方案及整体建设解决方针
- QT property属性的应用
- diy服务器个人主机_DIY个人服务器
- access有效性规则不为空值_access窗体文本框有效性规则中输入is not null无效
- 基于依存句法分析的实体关系提取
- 30个HTML+CSS前端开发案例(五)
热门文章
- ASP.NET动态网站课程设计——个人网页
- 今天终于玩了HiPiHi
- 用C语言实现高铁客运订票系统
- 男人女人应该不要随便离婚
- MFC如何调用Flash
- c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf
- MFC手动添加窗口 最大化 最小化 还原 关闭
- org.springframework.orm.hibernate3.HibernateSystemException: Exception occurred inside setter of com
- Python识别中文
- 《图解HTTP》-第十一章(完结)