【软考】哈希表

目录

        • 一、概念
          • 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.α越小,发生冲突的可能性越小;α越大,表中已填入的记录越多,再装填记录时,发生冲突的可能性就越大,则查找时,给定值需与之进行比较的关键字的个数也越多。

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

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

相关文章

centos7部署zabbix6.4.9

文章目录 [toc]一、环境准备1)部署lnmp2)修改配置文件3)安装数据库 二、部署zabbix1)下载zabbix2)安装zabbix服务端3)修改配置4)开机启动5)安装客户端 三、登录配置1)访问…

在Windows电脑上上传iOS应用至App Store

引言 📱 使用UniApp开发iOS应用十分便捷,一套代码即可兼容多个平台。然而,UniApp开发iOS应用需要进行证书打包和将IPA文件上传至App Store,这两个步骤通常需要在Mac电脑上完成。那么,如果我们使用的是Windows开发环境…

three.js跟着教程实现VR效果(四)

参照教程:https://juejin.cn/post/6973865268426571784(作者:大帅老猿) 1.WebGD3D引擎 用three.js (1)使用立方体6面图 camera放到 立方体的中间 like “回” 让贴图向内翻转 (2)使…

机器学习 —— 使用机器学习进行情感分析 详细介绍版

机器学习 —— 使用机器学习进行情感分析 详细介绍版 机器学习 —— 使用机器学习进行情感分析 演示版 目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和…

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

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

HarmonyOS开发实例:【状态管理】

状态管理 ArkUI开发框架提供了多维度的状态管理机制,和UI相关联的数据,不仅可以在组件内使用,还可以在不同组件层级间传递,比如父子组件之间,爷孙组件之间等,也可以是全局范围内的传递,还可以是…

限流的实现方式

1、tomcat 设置最大链接数 2、Nginx 漏桶算法 3、网关,令牌桶算法

【HTML】简单制作一个3D动态粒子效果的时空隧道

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的文件名改为[Bab…

单例模式(饿汉模型,懒汉模型)

在着里我们先了解什么是单例模式。 就是某个类在进程中只能有单个实例,这里的单例模式需要一定的编程技巧,做出限制,一旦程序写的有问题,创建了多个实例,编程就会报错。 如果我们学会了单例模式,这种模式…

ubuntu下miniconda安装方式

conda官网: https://docs.anaconda.com/free/miniconda/ 安装方式: 全部执行完毕后,重新登录终端,就可以进入默认的 base 环境。 接下来可以继续使用命令创建和切换所需要的python环境 # 创建python 3.8的环境 mytest conda c…

mineadmin 设置时区

由于不同环境下,会造成时区不一致问题 在/bin/hyperf.php 文件里,设置 date_default_timezone_set(Asia/Shanghai);

qiankun 主子应用使用同一地址同一端口配置

参考官网配置链接:https://qiankun.umijs.org/zh/cookbook#%E5%9C%BA%E6%99%AF-1%E4%B8%BB%E5%BA%94%E7%94%A8%E5%92%8C%E5%BE%AE%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2%E5%88%B0%E5%90%8C%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8C%E4%B8%80%E4%B8%A…

【Java网络编程】IP网络协议与TCP、UDP网络传输层协议

1.1、IP协议 当应用层的数据被封装后,想要将数据在网络上传输,数据究竟要被发往何处,又该如何精准的在网络上定位目标机器,此时起到关键作用的就是“IP协议”。IP协议的作用在于把各种数据包准确无误的传递给目标方,其…

微信小程序用户登录授权指定(旧版本)

配置旧版本基础库2.12.3 实现效果 点击登录按钮即可直接登录&#xff0c;获取用户昵称和头像 点击获取头像昵称按钮则需要授权&#xff0c;才能成功登录 代码实现 my.xml <!-- 登录页面,调试基础库为2.20.2库 --> <view class"mylogin"><block w…

B02、分析GC日志-6.3

1、相关GC日志参数 -verbose:gc 输出gc日志信息&#xff0c;默认输出到标准输出-XX:PrintGC 输出GC日志。类似&#xff1a;-verbose:gc-XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志&#xff0c; 并在进程退出时输出当前内存各区域分配情况-XX:PrintGCTimeStamp…

XILINX 7系列时钟资源

文章目录 前言一、时钟概要1.1、CC1.2、BUFR、BUFIO、BUFMR1.3、CMT1.4、BUFH1.5、BUFG 二、时钟路由资源三、CMT 前言 本文主要参考xilinx手册ug472 一、时钟概要 7系列FPGA时钟资源主要有CC、BUFR、BUFIO、BUFMR、CMT、BUFG、BUFH和GTE_COMMON 1.1、CC “CC”&#xff0…

代码签名证书是什么?软件签名证书功能和分类

代码签名证书是什么&#xff1f;代码签名证书&#xff08;Code Signing Certificate&#xff09;是用于对可执行文件或脚本&#xff0c;软件代码等进行数字签名&#xff0c;可验证软件发布者身份、保证软件签名后未被篡改&#xff0c;以此验证开发者身份的真实性和保护代码的完…

运营商名称 是如何显示到 手机通知栏上的?

在我们日常使用手机的过程中&#xff0c;经常会在通知栏或设置菜单中看到特定的运营商名称&#xff0c;例如"中国移动"、"中国联通"或"中国电信"等。 那么&#xff0c;这些运营商的名称是如何出现在我们手机上的呢&#xff1f;手机又是如何区分不…

软信天成:如何通过5个步骤获得高层对主数据管理项目的支持

如今&#xff0c;全球各地的组织正在采用主数据管理&#xff08;MDM&#xff09;以应对日益严峻的数据问题。然而&#xff0c;成功地实现 MDM 项目并非易事&#xff0c;这需要得到高层的全力支持。下面&#xff0c;软信天成将详细介绍五步策略&#xff0c;协助您获得高层对MDM项…

SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…