数据结构基础--散列表

news2025/2/2 15:05:36

一、散列简介

散列表,又叫哈希表(Hash Table),是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。也就是说,把关键字映射到一个表中的位置来直接访问记录,以加快访问速度。

通常,把这个关键字称为 Key,把对应的记录称为 Value,所以也可以说是通过 Key 访问一个映射表来得到 Value 的地址。而这个映射表,也叫作散列函数或者哈希函数,存放记录的数组叫作散列表

冲突:不同的关键码映射到同一个散列地址

二、散列函数

1)除留余数法

h(key)=key mod M

 key为关键字值,mod代表采用取模运算,M为散列表的长度。

M的取值十分重要,M选取不当可能造成严重冲突。如果key是十进制数,则M应当避免取10的幂。

一般而言,选择一个不超过M的最大的素数P,令散列函数h(key)=key mod P

2)平方取中法

这是一种常用的哈希函数构造方法。这个方法是先取关键字的平方,然后根据可使用空间的大小,选取平方数是中间几位为哈希地址。

哈希函数 H(key)=“key2的中间几位”因为这种方法的原理是通过取平方扩大差别,平方值的中间几位和这个数的每一位都相关,则对不同的关键字得到的哈希函数值不易产生冲突,由此产生的哈希地址也较为均匀。

3)折叠法

折叠法是将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位),这方法称为折叠法。

4)数字分析法

数字分析法是取数据元素关键字中某些取值较均匀的数字位作为哈希地址的方法。即当关键字的位数很多时,可以通过对关键字的各位进行分析,丢掉分布不均匀的位,作为哈希值它只适合于所有关键字值已知的情况。通过分析分布情况把关键字取值区间转化为一个较小的关键字取值区间

三、散列冲突处理办法

1)拉链法

拉链法的基本思想:相同散列地址的记录链成一单链表,m个散列地址就设m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构

 缺点:极端情况下,所有元素可能都聚集于一个散列地址对应的单链表中,所以最坏情况下完成一个关键字的搜索需要检查全部的n个元素

2)开地址法

线性探测法

需要注意的是, 这里的h(key)就已经进行了一次取模运算

以上图为例,h(key)=key mod 11

①35 mod 11=2 ,2号位置已经被24占用,因此向后探测②(2+1)mod 11=3,3号位置已经被80占用,因此向后探测③(2+2)mod 11=4,4号位置已经被58占用,因此向后探测④(2+3)mod 11=5,5号位置为空,将35放入该位置

缺点:由于是逐个位置向后排列,散列表中的元素产生聚集效应,也就是同义词元素在散列表中密集连续存储,这将导致散列表在镜像元素查找是探查的次数增加,从而影响搜索效率

二次探测法

需要注意的是, 这里的h(key)就已经进行了一次取模运算

 

 以上图为例,h(key)=key mod 11

①35 mod 11=2 ,2号位置已经被24占用,需要探测②(2+1^2)mod 11=3,3号位置已经被80占用,重新探测③(2-1^2)mod 11=1,1号位置为空,将35放入该位置

双散列法

 双散列法使用的两个散列函数分别是h1和h2。第一个散列函数用于计算探查序列的起始值,第二个散列函数用于辅助计算候选地址。

h2的作用:对h1散列值产生一个固定增量,实现跳跃式探查;改善二次聚集,对两个散列函数都为同义词的关键字很少

四、性能分析

使用平均查找长度ASL来衡量查找算法,ASL取决于:散列函数,处理冲突办法,装填因子

散列表中已存储集合元素个数n与散列表长M的比例n/M,称为散列表的装填因子。装填因子越大,说明表中记录数越多,表越满,发生冲突的可能性就越大,查找时比较次数就越多

拉链法优于开地址法;除留余数法作散列函数优于其他类型函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android设计模式详解之建造者模式

前言 Builder模式是一种创建型设计模式。 定义:将一个复杂对象的创建与它的表示分离,使得同样的构造过程可以创建不同的表示。 使用场景: 相同的方法,不同的执行顺序,产生不同的事件结果时;多个部件或零…

java学习day63(乐友商城)商品新增后台、商品编辑后台、搭建前台系统页面

1.商品新增 当我们点击新增商品按钮: 就会出现一个弹窗: 里面把商品的数据分为了4部分来填写: 基本信息:主要是一些简单的文本数据,包含了SPU和SpuDetail的部分数据,如 商品分类:是SPU中的cid1&…

大型项目都会使用到的Makefile

一、vi编辑器之神 1.vi编辑器的三种模式: 插入模式:可以编辑文档 编辑模式:可以敲一些命令,执行例如复制n行 剪切n行 ,粘贴等功能 命令模式:(最后一行模式) 在此模式下可以保存文件,退出vi…

第03讲:Redis的持久化方案

前言 redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。 redis提供两种持久化方式: RDB:快照,通过从服务器保存和持久化AOF&…

Codeforces Round #839 (Div. 3) A~G all answer

Dashboard - Codeforces Round #839 (Div. 3) - Codeforces 最近状态奇差无比,还有点生病,低烧反复横跳,应该没阳?(虽然家人都阳了,就剩我一个了wuwuwu~(A B C就不作解释了&#xff…

【小5聊】Python3 使用selenium模块实现简单爬虫系列一

第一次听说Python还是在工作的时候,还是一位女生在用,当时她说可以用来处理excel文档,特别是一些统计分析。第二次让我真正进入python世界,还是在一次C站举办的大赛上。聊聊你是因为什么机缘巧合进入到python圈的呢?不…

金盾杯2022-AGCTFS战队 wp

文章目录Web图书馆EzPHPeZphp2SQLSkip有来无回反败为胜Crypto小菜一碟RRSSAAsimpleRrandMISC盗梦空间qianda0_Sudoku数据泄露01-账号泄露追踪数据泄露02-泄露的密码数据泄露03-泄露的密钥ReverseTeaPwnLoginWtfWeb 图书馆 根据提示找到 干货|最全的Tomcat漏洞复现…

Qt5 网页标题、关键词提取工具Findyou

Qt5 网页标题、关键词提取工具Findyou 一、程序运行 运行界面 辅助功能,可用于将扫描器的扫描结果转换为url 二、所涉及的重要知识点 1、Qt爬取https的网页 来自宇龍_ https://blog.csdn.net/qq_45809384/article/details/122049295?spm1001.2014.3001.5506 打…

Foxmail客户端添加163账号和邮件备份163邮箱

文章目录一、Foxmail添加163账号1. 点击图标2. 账号管理3. 新建4. 手动设置5. 填写信息6. 创建二、邮件转移备份2.1. 邮件折叠2.2. 选择目标邮箱2.3. 同步服务端Foxmail客户端添加163账号的具体步骤如下:一、Foxmail添加163账号 1. 点击图标 首先打开Foxmail客户端…

51寻找数组中出现次数超一半的数

51寻找数组中出现次数超一半的数 一看题目就想用hash表,但是要求空间复杂度为1,说明不可以用哈希表去存。一直在原地数组上思考,类似桶排序,可是这取决于数值的大小,最后还是看了题解,学到了。 思想是&…

外汇天眼:一笔赚了12600美元 你羡慕吗?

在外汇投资中,黑平台一直是外汇投资圈的一枚毒瘤,不能顺利出金也是外汇投资面临的最大风险之一。 对于外汇投资者而言,外汇交易平台的选择至关重要。 选择好的外汇交易平台,最重要的是:选择安全可靠的平台&#xff0…

Blackmagic黑魔法摄像机braw视频帧损坏文件修复方法

Blackmagic是全球知名的影视级产品供应商,其高清摄像机是国内外各种剧组的最爱。Blackmagic的新产品目前使用braw格式,其编码采用自定义的raw编码,视频的效果和阿莱不相上下。之前我们已经多次介绍过这种braw文件的修复,近期我们处…

grpc的使用

GRPC学习 本文包括grpc的入门使用和四种实现方式 文章目录一、GRPC 安装和hello world1、什么是GRPC2、安装grpc和代码3、服务端3.1、取出 server3.2、挂载方法3.3、注册服务3.4、创建监听4、客户端二、protobuf语法三、GRPC server 的使用1、普通服务2、流式传入(客…

通达信破解接口怎么委托下单?

通达信破解接口主要是利用数学公式建立模型,通过大量数据判断未来价格走势,通过程序选股。虽然选股也比较广泛,但也能覆盖A股市场的四千多只股票,能排除强行涨跌等人为因素,执行的纪律性强。所以对于通达信破解接口对股…

【笔记】git 修改之前的提交记录信息(git commit -m ‘...‘)

文章目录一、修改最后一条提交记录信息二、修改前面某条或某几条提交记录信息一、修改最后一条提交记录信息 git commit --amend进入vi编辑器后: 按i下方出现’- - 插入 - -‘的提示时,便可编辑提交记录信息按ESC,输入:wq保存退出&#xff0…

ICG衍生物ICG-Sulfo-OSu的产品描述及保存建议

中文名称 ICG-Sulfo-OSu 英文名字 ICG-Sulfo-OSu 凯新生物描述: (ICG)是一种用于医学诊断的菁染料它用于测定心输出量、肝功能和肝血流,以及眼科血管造影它的峰值光谱吸收接近800 nm这些红外频率穿透视网膜层,使ICG血管造影能够比…

【STA】(2)概念

目录 1.CMOS逻辑设计 1.1 基本MOS结构 1.2 COMS逻辑门 1.3 标准单元 2.CMOS单元建模 3.电平翻转波形 4.传播延迟 5.波形的转换率 6.信号之间的偏移 7. 时序弧和单调性 8.最小和最大时序路径 9.时钟域 10.工作条件 1.CMOS逻辑设计 1.1 基本MOS结构 MOS(Metal Oxide…

2022年Python笔试选择题及答案(秋招)

2022年Python笔试选择题及答案(秋招) 🏠个人主页:编程ID 🧑个人简介:大家好,我是编程ID,一个想要与大家共同进步的程序员儿 🧑如果各位哥哥姐姐在准备面试,找…

【Redis-11】Redis事务实现原理

Redis通过MULTI、EXEC、WATCH等命令来实现事务的功能,事务提供了一种将多个命令请求打包,然后一次性,顺序性的执行多个命令的机制。在事务执行期间,服务器不会中断事务去执行其他客户端的命令,他会讲事务中所有命令执行…

谈主成分分析/因子分析中的特征值“矩阵近似”

主成分分析和因子分析是数据降维的常用手段,其中以特征值为载体,在不断降维“近似”原本的协方差矩阵。 CSDN中一些文章在介绍这个问题或者叫“特征值分解”时,讲得都比较学术化,今天用一个小例子,还是面向新人&#…