搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
AllinToyou
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
window系统下搭建hadoop的运行环境_hadoop在windo怎么运行
2
Kubernetes——Kubernetes命令操作集合_k logs -f
3
卡尔.波普尔摘要: 科学的方法_卡尔波普尔科学方法论
4
【大数据面试题大全】大数据真实面试题(持续更新)
5
linux从github上拉取项目到本地遇到Permission denied (publickey). fatal: Could not read from remote repository._linux fatal: could not read from remote repository
6
Spring Boot 3.1.4 和 Spring Security 升级:提升应用程序安全性与性能_spring boot3修复security问题
7
数字ic设计|ASIC芯片开发过程_asic项目运行一般分为哪些阶段
8
本地计算机如何使用代理服务器,自动设置代理ip_电脑如何使用代理
9
4年外包终上岸,我只能说这类公司以后能不去就不去_去过外包就永远只能去外包了
10
分布式与微服务区别?
当前位置:
article
> 正文
【软考】哈希表
作者:AllinToyou | 2024-04-17 00:11:12
赞
踩
【软考】哈希表
目录
一、概念
1.1 定义
二、哈希函数的构造方法
2.1 说明
2.2 特性
三、处理冲突的方法
3.1 说明
3.2 开放定址法
3.2.1 说明
3.2.2 线性探测
3.3 链地址法
3.4 再哈希法
3.5 建立公共溢出区
四、哈希表的查找
4.1 查找过程
4.2 查找特点
4.3 装填因子
一、概念
1.1 定义
1.一般存储结构由于记录在存储结构中的相对位置是随机的,查找时通过一系列与关键字的比较才能确定被查记录在表中的位置。
2.哈希表则通过计算一个以记录的关键字为自变量的函数(称为
哈希函数
)来得到该记录的存储地址。
3.哈希表中进行查找时,需用同一哈希函数计算得到待查记录的存储地址,然后到相应的存储单元去获得有关信息再判定查找是否成功。
4.根据设定的哈希函数H(key)和处理冲突的方法,将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的像作为记录在表中的存储位置,这种表称为
哈希表
,这一映射过程称为
哈希造表
或
散列
,所得的存储位置称为
哈希地址
或
散列地址
。
5.对于某个哈希函数H和两个关键字K
1
和K
2
,如果K
1
≠K
2
,而H(K
1
)=H(K
2
),则称为
冲突
。
6.
具有相同哈希函数值的关键字
对该哈希函数来说称为
同义词
。
7.冲突只能尽可能减少而不能完全避免,因为哈希函数是从关键字集合到地址集合的映像。
8.通常关键字集合比较大,它的元素包含所有可能的关键字,而地址集合的元素仅为哈希表中的地址值。
9.一般情况下,哈希函数是一个
压缩映像
,冲突是
不可避免
的。
二、哈希函数的构造方法
2.1 说明
1.常用的哈希函数构造方法有直接定址法、数字分析法、平方取中法、折叠法、随机数法和除留余数法等。
2.2 特性
1.哈希函数应是一个压缩映像函数,它应具有较大的压缩性,以节省存储空间。
2.哈希函数应具有较好的散列性,虽然冲突是不可避免的,但应尽量减少。
3.要减少冲突,就要设法使哈希函数尽可能均匀地把关键字映射到存储区的各个存储单元,这样就可以提高査找效率。
4.在构造哈希函数时,一般都要对关键字进行计算,且尽可能使关键字的所有组成部分都能起作用。
三、处理冲突的方法
3.1 说明
1.解决冲突就是为出现冲突的关键字找到另一个“空”的哈希地址。在处理冲突的过程中,可能得到一个地址序列 H(i=1,2,…,k)。
3.2 开放定址法
3.2.1 说明
1.
H
i
=(H(key)+d
i
)%m
i=1,2,…,k (k ≤ m-1)其中,H(key)为哈希函数,m为哈希表表长
2.常见的增量序列有:
线性探测
再散列d
i
=1,2,3,…,m-1;
二次探测
再散列d
i
=1
2
,-1
2
,2
2
,-2
2
,…,±k
2
(k≤m/2);
随机探测
再散列d
i
=伪随机数序列
3.2.2 线性探测
1.最简单的产生探测序列的方法是进行
线性探测
,也就是发生冲突时,顺序地到存储区的下个单元进行探测。
2.例如,某记录的关键字为 key,哈希函数值 H(key)。若在哈希地址j发生了冲突(即此位置已存放了其他记录),则对哈希地址j+1进行探测,若仍然有冲突,再对地址 j+2 进行探测,依此类推,直到找到一个“空”的单元并将元素存入哈希表。
3.线性探测法可能使第i个哈希地址的同义词存入第 i+1 个哈希地址,这样本应存入第 i+1个哈希地址的元素变成了第 i+2个哈希地址元素的同义词
4.线性探测法的优点:思路清楚,算法简单
5.线性探测法的缺点:① 溢出处理需另编程序。一般可另外设立一个溢出表,专门用来存放上述哈希表中放不下的记录。实现溢出表最简单的结构是顺序表,查找方法可用顺序查找。② 线性探测法很容易产生聚集现象。所谓聚集现象,就是存入哈希表的记录在表中连成一片。当哈希函数不能把关键字很均匀地散列到哈希表中时,尤其容易产生聚集现象,这种情况下会增加探测的次数,从而降低了查找效率。
6.用户可以采取多种方法减少聚集现象的产生,二次探测再散列和随机探测再散列是两种有效的方法。
3.3 链地址法
1.也叫拉链法。
2.在查找表的每个记录中增加一个链域,链域中存放下一个具有相同哈希函数值的记录的存储地址。
3.利用链域把发生冲突的记录链接在一个链表中
4.当链域的值为null,表示已没有后继记录
5.对于发生冲突时的查找和插入操作和线性表一样
3.4 再哈希法
1.H
i
=RH
i
(key)(i=1,2,…,k)
2.RH
i
均是不同的哈希函数,即在同义词发生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。这种方法不易产生聚集现象,但增加了计算时间。
3.5 建立公共溢出区
1.发生冲突,都填入到公共溢出区中。
四、哈希表的查找
4.1 查找过程
1.在哈希表中进行查找操作时,用与存入元素时相同的哈希函数和冲突处理方法计算得到待查记录的存储地址,然后到相应的存储单元获得有关信息再判定查找是否成功。
4.2 查找特点
1.哈希表在关键字与记录的存储位置之间建立了直接映像,由于冲突,使得哈希表的查找过程仍然是一个给定值和关键字进行比较的过程。所以需要以平均查找长度衡量哈希表的查找效率。
2.在查找过程中需要和给定值进行比较的关键字的个数取决于三个因素:哈希函数、处理冲突的方法和哈希表的装填因子。
4.3 装填因子
1.装填因子的定义
2.α标志着哈希表的装满程度。
3.α越小,发生冲突的可能性越小;α越大,表中已填入的记录越多,再装填记录时,发生冲突的可能性就越大,则查找时,给定值需与之进行比较的关键字的个数也越多。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/AllinToyou/article/detail/437168
推荐阅读
article
2023
年终总结
(
脚踏实地
,
仰望星空)...
2023
年
,
经历非常多的大事情
,
找工作、实习、研究生毕业、堂哥结婚、大姐买车、申博、读博、参加马拉松
,
有幸这一年全家人平...
赞
踩
article
【初阶
数据结构
】
树结构
与
二叉树
的
基础
概念
...
树与
二叉树
的
基本
概念
详解,带你从0开始入门树状结构【初阶
数据结构
】
树结构
与
二叉树
的
基础
概念
...
赞
踩
article
Python
小项目:基于
tkinter
开发
邮件
发送程序_不固定
发件人
收件人
的发送
邮件
程序...
本文介绍了一个使用
Python
和
tkinter
库创建的简单
邮件
发送界面。用户可以通过界面输入
发件人
邮箱、名称,
收件人
邮箱...
赞
踩
article
安装
idea
社区
版并
开发
JavaWeb
项目
_
idea
社区
版能写
web
项目
...
众所周知,
idea
是一个很强悍的javaIDE,但是
社区
版只能
开发
java
项目
而不能
开发
web
项目
。作为学生,在学习时,...
赞
踩
article
使用
HTMLTestRunner
生成
Python
测试报告
_
python
htmltestru...
使用
HTMLTestRunner
生成
Python
测试报告
在
Python
中进行单元测试是很常见的,但如何将测试...
赞
踩
article
沉睡者IT - 做
网赚
就是
搞流量搞转化!_沉睡者
it
- 为
你
解密那些
卖
虚拟资源
和
知识付费课程
的
平台...
因为
你
的
信誉好,产品好,服务好,售后好,
你
足够专业,给他们
的
是最好
的
,所以他们才会选
你
。
比如现在
有
很
多
网课,录一套相关
的
...
赞
踩
article
【
MySQL
系列】
统计
函数
(
count
,sum,avg)详解_
mysql
统计
函数
...
返回SELECT语句检索的行数。结果是一个bigint值返回所选列的行数。返回SELECT语句检索的指定字段行数。结果是...
赞
踩
article
如何获得《
幻兽
帕鲁
》隐藏
帕鲁
唤
夜兽
?13000个配种配方查询
幻兽
帕鲁
Steam
好评率还在涨 Mac...
最后提醒下各位
苹果电脑
的用户,你用macOS玩
幻兽
帕鲁
,最好是M系列芯片,16GB以上的内存,才能更好的发挥Crosso...
赞
踩
article
Linux
——
prinf
隐藏的
缓冲区
...
3.强制刷新 (1)方法一:遇到\n自动刷新 printf("hello\n");(2)使用fflush刷新屏幕 ffl...
赞
踩
article
CentOS
7.9
配置
IP
地址
的几种方式:手把手教你选择最佳方案_centos
7.9
配置
ip
地址
...
文中提供了多种
配置
IP
地址
的方式,用户可以根据自己的需求选择适合的方法进行
配置
。无论采用哪种方式,都需要确保网络连接正常...
赞
踩
article
IPS
的
规则
从哪来_
ips
规则
...
目录前言PeiQI WiKi文库⭐⭐⭐TALOS⭐⭐⭐⭐国家信息安全漏洞库⭐⭐⭐⭐⭐白阁文库seebugCERTexpl...
赞
踩
article
docker
安装佩奇文库
_
nas
docker
peiqi
...
User/Pass:
peiqi
:
peiqi
(手动更新:进入Docker执行命令,/usr/share/nginx/h...
赞
踩
article
基于
SpringBoot
+Vue
校园
失物招领
网站
的
设计
与实现_
校园
失物招领
网站
开发
...
近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设...
赞
踩
article
使用
Scrapy
抓取
图片
并保存_
scrapy
下载
图片
...
我们知道使用requests与selenium
下载
图片
都是非常简单的,那么
scrapy
是怎么
下载
图片
的呢?1.保存
图片
需...
赞
踩
article
Llama2
模型
本地部署(
Mac
M1
16G
)...
环境:
Mac
M1
16G
、Conda。
Llama2
模型
本地部署(
Mac
M1
16G
) 环境准...
赞
踩
article
基于
springboot
实现的后台
RBAC
权限
管理
系统_
rbac
权限
管理
springboot
...
一款 Java 语言基于SpringBoot2、Layui、Thymeleaf、MybatisPlus、Shiro、My...
赞
踩
article
20
个最
重要
的
DevOps
面试题
...
点击下方公众号「关注」和「星标」回复“1024”获取独家整理的学习资料!
DevOps
代表开发和运营。这是一种新的软件开...
赞
踩
article
XIlinx
MIG
控制
DDR3
SO-
DIMM
内存条(二):
MIG
IP
核学习...
这里只学习
DDR3
和 DDR2 SDRAM Memory Interface。1 简介Xilinx 7系列FPGA 存...
赞
踩
article
Spring
Security
笔记_基于aop、
过滤器
链、拦截器的
spring
带的权限框架 结合r...
spring
Security
学习笔记_基于aop、
过滤器
链、拦截器的
spring
带的权限框架 结合
rabc
(
role
...
赞
踩
article
RabbitMQ
集群
部署...
RabbitMQ
集群
镜像模式部署rabbitmq
集群
模式有2种普通
集群
模式(无高可用性): 默认模式,以两个节点(rab...
赞
踩
相关标签
2023年终总结
2024年度规划
2023年
总结
规划
学习规划
数据结构
开发语言
算法
c语言
python
邮件
tkinter
intellij-idea
java
tomcat
网络
搜索引擎
qt
网赚
创业
运营
创业项目
网赚项目
mysql