【软考】哈希表

目录

        • 一、概念
          • 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和两个关键字K1和K2,如果K1≠K2,而H(K1)=H(K2),则称为冲突
  • 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.Hi=(H(key)+di)%m i=1,2,…,k (k ≤ m-1)其中,H(key)为哈希函数,m为哈希表表长
  • 2.常见的增量序列有:线性探测再散列di=1,2,3,…,m-1;二次探测再散列di=12,-12,22,-22,…,±k2(k≤m/2);随机探测再散列di=伪随机数序列
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.Hi=RHi(key)(i=1,2,…,k)
  • 2.RHi均是不同的哈希函数,即在同义词发生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。这种方法不易产生聚集现象,但增加了计算时间。
3.5 建立公共溢出区
  • 1.发生冲突,都填入到公共溢出区中。
四、哈希表的查找
4.1 查找过程
  • 1.在哈希表中进行查找操作时,用与存入元素时相同的哈希函数和冲突处理方法计算得到待查记录的存储地址,然后到相应的存储单元获得有关信息再判定查找是否成功。
4.2 查找特点
  • 1.哈希表在关键字与记录的存储位置之间建立了直接映像,由于冲突,使得哈希表的查找过程仍然是一个给定值和关键字进行比较的过程。所以需要以平均查找长度衡量哈希表的查找效率。
  • 2.在查找过程中需要和给定值进行比较的关键字的个数取决于三个因素:哈希函数、处理冲突的方法和哈希表的装填因子。
4.3 装填因子
  • 1.装填因子的定义
    在这里插入图片描述
  • 2.α标志着哈希表的装满程度。
  • 3.α越小,发生冲突的可能性越小;α越大,表中已填入的记录越多,再装填记录时,发生冲突的可能性就越大,则查找时,给定值需与之进行比较的关键字的个数也越多。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境: P740AIXSybaseV7000存储阵列柜,阵列柜上有12块SAS机械硬盘(包括1块热备盘)。 服务器故障: 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障,于是更换磁盘并同步数据&#xff0…

大厂面试:找出数组中第k大的数的最佳算法

一.前置条件 假如数组为a,大小为n,要找到数组a中第k大的数。 二.解决方案 1.使用任意一种排序算法(例如快速排序)将数组a进行从大到小的排序,则第n-k个数即为答案。 2.构造一个长度为k的数组,将前k个数复制过来并降序…

一站式解读多模态——Transformer、Embedding、主流模型与通用任务实战(上)

本文章由飞桨星河社区开发者高宏伟贡献。高宏伟,飞桨开发者技术专家(PPDE),飞桨领航团团长,长期在自媒体领域分享AI技术知识,博客粉丝9w,飞桨星河社区ID为GoAI 。分享分为上下两期,本…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一:简单2阶矩阵求法 六、逆矩阵二:3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

AcWing282.石子合并

【题目链接】acwing.com/problem/content/284/ 输入样例&#xff1a; 4 1 3 5 2输出样例&#xff1a; 22 【注意】本题与哈夫曼树做法的区别&#xff0c;哈夫曼树是可以合并任意两堆&#xff0c;而区间DP模型只能合并相邻两堆 【代码及详细注释】 #include<bits/stdc.h…

基于springboot实现美发门店管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现美发门店管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了美发门店管理系统的开发全过程。通过分析美发门店管理系统管理的不足&#xff0c;创建了一个计算机管理美发门店管理系…

postgresql uuid

示例数据库版本PG16&#xff0c;对于参照官方文档截图&#xff0c;可以在最上方切换到对应版本查看&#xff0c;相差不大。 方法一&#xff1a;自带函数 select gen_random_uuid(); 去掉四个斜杠&#xff0c;简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

vue通过echarts实现数据可视化

1、安装echarts cnpm install echarts -Sechart官方图表示例大全&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-line 2、代码实现 <template><div><div class"box" ref"zhu"></div><div class&…

Ubuntu Desktop 免费的文件 / 目录差异比较工具 (Beyond Compare 为收费软件)

Ubuntu Desktop 免费的文件 / 目录差异比较工具 [Beyond Compare 为收费软件] 1. Installation2. Meld Diff Viewer3. Lock to LauncherReferences Meld - Visual diff and merge tool https://meldmerge.org/ Meld helps you compare files, directories, and version contro…

【MySQL】C# 连接MySQL

C# 连接MySQL 1. 添加MySQL引用 安装完MySQL之后&#xff0c;在安装的默认目录 C:\Program Files (x86)\MySQL\Connector NET 8.0 中查找MySQLData.dll文件。 在Visual Studio 中为项目中添加引用。 2. 引入命名空间 using MySql.Data.MySqlClient;3. 构建连接 private …

DHCP服务器的高可靠、高可用+负载均衡配置

一、适用场景 1、DHCP地址池集中化的管理环境中&#xff08;本例建立了200个C类网24位的地址池&#xff09;&#xff1b; 2、全网仅1台合法的DHCP服务器&#xff08;要是它宕机全部断网&#xff0c;本例旨在提高服务器的可靠性、可用性&#xff0c;双DHCP服务器性能上负载均衡…

mp4转flv怎么转?电脑怎么把视频转成flv?

MP4&#xff08;MPEG-4 Part 14&#xff09;是一种多媒体容器格式&#xff0c;广泛用于包含视频、音频、字幕等多种数据流。MP4因其高度灵活性、压缩效率和兼容性成为视频领域的主流格式&#xff0c;支持范围涵盖从在线视频到移动设备的各类应用场景。 FLV文件格式的多个优点 …

Spring MVC体系结构和处理请求控制器(一)

一、MVC模式 MVC模式是指Model-View-Controller&#xff08;模型-视图-控制器&#xff09;模式&#xff0c;是开发Web应用程序时常用的一种代码分层模式MVC模式是软件工程中的一种架构模式&#xff0c;会强制行的把系统的输入、处理和输出分开&#xff0c;是系统从功能上形成M…

[VMware] 修改参数的一个问题

最近在修改VMware虚拟机的时候遇到一个易用性的问题&#xff0c;比如要给一个VM设置一个参数需要在vSphere里点开设置&#xff0c;打开高级选项&#xff0c;添加配置ethernet0.coalescingScheme比如&#xff1a; 如果想要改的VM个数是十个八个&#xff0c;这种方法也许可以&a…

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字&#xff0c;所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意&#xff1a;本次项目采用的是水墨屏&#xff0c;并且是局部刷新的代码&#xff0c;所以设置字模选项可能有点…

[计算机效率] 资源管理器辅助工具:Clover、QTTabBar

3.21 资源管理器辅助工具&#xff1a;Clover、QTTabBar Clover是一款非常好用的一款资源管理器辅助工具。其实就是给资源管理器增加一个小功能&#xff1a;tab页面。让资源管理器也能想浏览器一样&#xff0c;就算打开多个文件夹&#xff0c;也只是在新的tab页面上。总算是拯救…

苍穹外卖亮点再梳理 ||

一、项目整体亮点&#xff1a; 【注&#xff1a;基于每个亮点&#xff0c;均有整理的相关知识&#xff0c;可在博客中查看】 1.数据库的设计采用RBAC&#xff08;基于角色访问控制&#xff09;的权限设计。 RBAC将权限授予角色&#xff0c;然后将用户分配给角色&#xff0c;…

MES实施之工控机和电脑的选择

在MES项目实施过程中,经常会碰到工控机和电脑的选型问题,那么他们的区别是什么? 1、控机和普通个人电脑(PC)相比,具有以下几个区别: 1.运行环境不同:工控机通常需要在各种恶劣的工业环境中运行,如高温、高湿、强电磁干扰等,因此需要具有防尘、防水、抗干扰等特点。而…

【优选算法专栏】专题十八:BFS解决拓扑排序--前言

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

记录Ubuntu 20.04中被困扰半年多之久的疑难的解决

一、我的ubuntu20.04症状描述&#xff1a; 在编辑文字文档的过程中&#xff0c;会不定时的出现鼠标指针随意跳动的情形&#xff0c;严重干扰了做文字编辑、编写代码等工作的进行。先后排除了戴尔笔记本及配件故障、鼠标故障、ubuntu系统中文档编辑软件的故障等可能。 二、原来…