【软考】哈希表

news2024/11/28 6:38: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和两个关键字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.coloradmin.cn/o/1581917.html

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

相关文章

Solid Converter 10.1下载地址及安装教程

Solid Converter 10是一款专业的PDF转换工具,用于将PDF文件转换为可编辑的文档格式,如Word、Excel、PowerPoint等。它提供了强大的转换功能和一系列实用的工具,帮助用户将PDF内容转换为可重复使用和编辑的格式。 Solid Converter 10的主要功…

vcruntime140.dll文件缺失的多种解决方法,这五种修复vcruntime140.dll绝对有效

当你在使用电脑的时候,可能会遇到一个提示错误,显示“vcruntime140.dll文件缺失,程序因此无法启动”。这种状况不但打断了你的日常使用,还可能对你的工作效率造成不利影响。为了助你更好地搞清楚这个问题的由来以及解决方案&#…

贪心算法|860.柠檬水找零

力扣题目链接 class Solution { public:bool lemonadeChange(vector<int>& bills) {int five 0, ten 0, twenty 0;for (int bill : bills) {// 情况一if (bill 5) five;// 情况二if (bill 10) {if (five < 0) return false;ten;five--;}// 情况三if (bill …

基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242

摘 要 使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的人事管理…

【C++】探索C++中的类与对象(下)---深入理解C++中的关键概念与应用

​​ &#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 在C编程中&#xff0c;有许多重要的概念和特性&#xff0c;包括构造函数、explicit关键字、静态成员、友元以及内部类…

【Web世界探险家】CSS美学(一)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

linux 迁移home目录以及修改conda中pip的目录,修改pip安装路径

1&#xff09;sudo rsync -av /home/lrf /data/home/lrf 将/home目录下的文件进行复制&#xff08;假设机械硬盘挂载在/data目录下&#xff09;** 2&#xff09;usermod -d /data/home/lrf -m lrf 修改用户$HOME变量** 3&#xff09;vi /etc/passwd 查看对应用户的$HOME变量是…

IDEA无法成功配置Tomcat的解决方法(IDEA版本问题)

在创建Servlet时&#xff0c;下载了Tomcat文件夹以及成功配置了环境变量之后&#xff0c;在IDEA中怎么都找不到Tomcat&#xff0c;尝试了网络中的各种方法&#xff0c;都不行&#xff0c;结果发现时IDEA版本的问题。因为我下的IDEA是社区版的&#xff0c;所以没有自带的Tomcat&…

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

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

【数据库】数据库应用系统生命周期

目录 1.为什么提出”软件工程“的思想&#xff1f; 2.为什么提出”瀑布模型“&#xff1f;缺点是什么&#xff1f; 3.为什么提出”快速原型模型“&#xff1f; 4.为什么提出”螺旋模型“&#xff1f; 5.关于数据库的英文缩写。 6.模型设计中的3条设计主线&#xff1a;数…

C++实现list容器

目录 1.前言 2.实现list容器 2.1链表结构体 2.2list迭代器 迭代器的成员变量 迭代器的构造函数 迭代器的&#xff0c;-- 迭代器的&#xff0c;&#xff01; 迭代器的解引用 迭代器的-> 3.list类 构造函数 析构函数 插入 删除 头插、尾插 头删、尾删 begin、end size empty 拷…

第23次修改了可删除可持久保存的前端html备忘录:增加了百度引擎

第22次修改了可删除可持久保存的前端html备忘录视频背景分离&#xff0c;增加了本地连接&#xff0c;增加了纯CSS做的折叠隐藏修改说明 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport…

采用Flink CDC操作SQL Server数据库获取增量变更数据

采用Flink CDC操作SQL Server数据库获取增量变更数据 Flink CDC 1.12版本引入了对SQL Server的支持&#xff0c;包括SqlServerCatalog和SqlServerTable。在SqlServerCatalog中&#xff0c;你可以根据表名获取对应的字段和字段类型。 SQL Server 2008 开始支持变更数据捕获 (C…

数码相框-显示JPG图片

LCD控制器会将LCD上的屏幕数据映射在相应的显存位置上。 通过libjpeg把jpg图片解压出来RGB原始数据。 libjpeg是使用c语言实现的读写jpeg文件的库。 使用libjpeg的应用程序是以"scanline"为单位进行图像处理的。 libjpeg解压图片的步骤&#xff1a; libjpeg的使…

FPGA:图像数字细节增强算法(工程+仿真+实物,可用毕设)

目录 日常唠嗑一、视频效果二、硬件及功能1、硬件选择2、功能3、特点 未完、待续……四、工程设计五、板级验证六、工程获取 日常唠嗑 有2个多月没写文章了&#xff0c;又是老借口&#xff1a;“最近实在是很忙”&#x1f923;&#xff0c;不过说真&#xff0c;确实是比较忙&am…

AWS服务器有哪些优势?

作为一家总部在美国的公司&#xff0c;AWS为什么会受到中国企业的喜爱&#xff1f;他有什么优势&#xff1f;九河云作为AWS合作伙伴&#xff0c;将会带读者展现使用AWS的优势。 首先是作为跨国企业&#xff0c;AWS在全球有数十个区域节点&#xff0c;这种广泛的地域覆盖不仅有…

【简单讲解下Kotlin】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

[大模型]基于 ChatGLM3 和 LangChain 搭建知识库助手

基于 ChatGLM3 和 LangChain 搭建知识库助手 环境配置 在已完成 ChatGLM3 的部署基础上&#xff0c;还需要安装以下依赖包&#xff1a; pip install langchain0.0.292 pip install gradio4.4.0 pip install chromadb0.4.15 pip install sentence-transformers2.2.2 pip inst…

详解TCP和UDP协议的区别

一、前言 TCP和UDP协议是TCP/IP协议的核心。TCP 传输协议&#xff1a;TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输&#xff0c;它提供的服务包括数据流传送、可靠性、有效流控、全双…