14-算法打卡-哈希表-基本概念-第十四天

news2025/4/19 15:20:09

1 基本概念

1.1 哈希表

百度百科解释:

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

简单来说就是数组就是一张哈希表,哈希表的关键码其实就是索引下标,关键值其实就是关键码对应的数组元素。

哈希表的作用:快速判断某个元素是否出现在集合中
比如我们要查询班级里面是否有叫"张三"名字的同学,如果用传统的链表需要一个节点一个节点的查找时间复杂度是O(n),但是如果使用哈希表的话时间复杂度是O(1)。
        首先我们需要把班级里的所有学生名称都映射(hash function哈希函数)到哈希表中,在查询的时候可以直接通过索引直接查询,直接判断出是否在班级里面。

1.2 哈希函数

百度百科解释:

哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。 

一般的线性表记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。

学生名称通过哈希函数找到对应的索引下标,将数据存放到数组中。
hashcode可以把名字转化为数值;数值可能大于tableSize;所以数值与tableSize取模,保证值落在数组范围内[0, tableSize-1]

当学生人数大于哈希表数组长度的时候,就会导致多个学生对应一个数组下标,这种场景就称之为哈希碰撞,这种问题有几种常见的处理方案。

1.3 哈希冲突(碰撞)

张三、李四都落在索引下标为2的地方,这个时候就发生了哈希冲突

1.3.1 哈希冲突-链表法

刚刚张三和李四在索引2的位置发生了冲突,发生冲突的元素都被存储在链表中。 这样我们就可以通过索引找到张三和李四。

数据规模(数组大小)是tableSize, 索引范围[0, tableSize-1]
链表法就是要设置适当的哈希表大小,这样既不会因为数组空值浪费,也不会因为冲突导致链表长度太长而在查找上浪费太多时间。

1.3.2 哈希冲突-线性探索

使用线性探索法,一定要保证tableSize(哈希表长度)的长度大于dataSize(数据个数),因为我们需要依赖哈希表中的空位来处理哈希冲突的问题,例如冲突的位置,放了张三,那么就向下寻找下一个空位放置李四的信息。所以要求tableSize一定要大于dataSize ,要不然哈希表上就没有空置的位置来存放冲突的数据。

2 总结

在Java中使用hash实现的常见的数据结构HashSet、HashMap、HashTable;当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法

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

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

相关文章

第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解

赛时参加的是Python组,这是赛后写的题解,还有两题暂时还不会,待更新 题目链接题目列表 - 洛谷 | 计算机科学教育新生态 A 移动距离 答案:1576 C 可分解的正整数 Python3 import itertools from functools import cmp_to_ke…

英文查重的时候参考文献显示重复是怎么回事?

像上图这样参考文献部分有颜色的情况,是属于参考文献没有排除干净的问题。 如何解决这样的问题? 首先第一步,先确认该报告是不是排除参考文献的版本; 第二步,如果是排除参考文献的版本,且参考文献仍然有…

八股文---MySQl(3)

目录 12.事务的特性是什么?可以详细说一下吗? 回答 13并发事务带来哪些问题?怎么解决这些问题呢?MySQL的默认隔离级别是? 脏读:一个事务读到另外一个事务还没有提交的数据。 不可重复读:一个…

基于labview的钢琴程序设计

部分程序如下 按照上图子vi更改输出频率即可 若需完整程序可以联系我

基于CNN+ViT的蔬果图像分类实验

本文只是做一个简单融合的实验,没有任何新颖,大家看看就行了。 1.数据集 本文所采用的数据集为Fruit-360 果蔬图像数据集,该数据集由 Horea Mureșan 等人整理并发布于 GitHub(项目地址:Horea94/Fruit-Images-Datase…

【虚幻C++笔记】接口

目录 概述创建接口 概述 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法后可以有不同的具体实现。任何使用接口的类都必须实现这些接口。实现解耦解决多继承的问题 创建接口 // Fill out your copyright notice in the Description page o…

【MCP】第一篇:MCP协议深度解析——大模型时代的“神经连接层“架构揭秘

【MCP】第一篇:MCP协议深度解析——大模型时代的"神经连接层"架构揭秘 一、什么是MCP?二、为什么需要MCP?三、MCP的架构四、MCP与AI交互的原理4.1 ReAct(Reasoning Acting)模式4.2 Function Calling 模式 五…

实时模式下 libaom 与 x264 编码对比实验

前沿 理论基础:在相同视频质量下,AV1的压缩率比H.264高约30%-50%。实时模式:视频编码中的实时模式,其核心目标是平衡编码效率与延迟要求,尤其在视频会议、直播、实时通信等场景中至关重要。 低延迟要求:编…

学习海康VisionMaster之矩形检测

这几天太忙了,好几天没有学习了,今天终于空下来了,继续学习之路吧。 一:进一步学习了 今天学习下VisionMaster中的矩形检测,这个一开始我以为是形态学方面的检测,实际操作下来其实还是边缘直线的衍生应用&…

C Primer Plus 第6版 编程练习——第3章

1、通过试验(即编写带有此类问题的程序)观察系统如何处理整数上道、浮占数上溢和浮点数下溢的 int main(int argc, char** argv) {int intMax 2147483647;float floatMax 3.402823466e38f;float floatMin -3.402823466e38f;printf("intMax:%d, …

十倍开发效率 - IDEA插件之 Mybatis Log Free

提高效率不是为了完成更多任务,而是为了有充足的时间摸鱼 快速体验 MyBatis Log Free 支持打印执行的 SQL(完整的SQL,没有占位符的)。 没有使用 MyBatis Log Free 的开启日志打印是这样的: 用了 MyBatis Log Free 后…

手动安装 VMware Tools 并设置虚拟机共享 Windows 文件夹

前言:在当今数字化的工作环境中,虚拟机技术为我们提供了强大的灵活性和便利性。VMware 作为虚拟化领域的佼佼者,其虚拟机软件被广泛应用于开发、测试和日常工作中。然而,许多用户在使用 VMware 虚拟机时,会遇到一个常见…

(免费)flask调用讯飞星火AI,实现websocket

本文章可借鉴学习,不可直接盗用 接入ai要获取ID,Secret,Key,和接口地址,由于我们服务接口类型是websocket,所以要获取相应的接口地址。(千万不要复制粘贴到http的了) 还要获取doma…

2021-11-09 C++三位数平方含有该数

缘由求解&#xff0c;运算函数&#xff0c;哪位大神教一下-编程语言-CSDN问答 void 三位数平方含有该数() {//缘由https://ask.csdn.net/questions/7560152?spm1005.2025.3001.5141int a 100, aa 1000, f 0;while (a < aa){f a*a;while (f > a)if ((f - a) % aa)f …

StarRocks Community Monthly Newsletter (Mar)

版本动态 3.4.1 版本更新 核心功能升级 数据安全与权限管控 支持「安全视图」功能&#xff0c;严格管控视图查询权限 MySQL协议连接支持SSL认证&#xff0c;保障数据传输安全 存算分离架构增强 支持自动创建Snapshot&#xff08;集群恢复更便捷&#xff09; Storage Volu…

Github 2FA(Two-Factor Authentication/两因素认证)

Github 2FA认证 多因素用户认证(Multi-Factor Authentication)&#xff0c;基本上各个大互联网平台&#xff0c;尤其是云平台厂商&#xff08;如&#xff1a;阿里云的MFA、华为云、腾讯云/QQ安全中心等&#xff09;都有启用了&#xff0c;Github算是搞得比较晚些了。 双因素身…

动态规划 -- 简单多状态dp,打家劫舍问题

1 按摩师 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 本题的意思简单理解就是&#xff0c;如果我们接受了第 i 个预约&#xff0c;那么第 i -1 个预约和第 i1 个预约我们都是无法接受的&#xff0c;只能至少间隔一个选择。 按照以前的经验&#xff0c;我们…

C++学习之游戏服务器开发⑤AOI业务逻辑

目录 1.项目进度回顾 2.完善整体架构 3.AOI网格思路 4.网络AOI数据结构 5.游戏世界类添加&#xff0c;删除和构造 6.AOI查找实现 7.GAMEROLE类结合AOI 8.登陆时发送ID和姓名 9.登陆时发送周围玩家位置 10.玩家上线完成 11.玩家下线处理 1.项目进度回顾 时间轮调度处理…

Python 实现日志备份守护进程

实训背景 假设你是一名运维工程师&#xff0c;需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求&#xff1a; 后台运行&#xff1a;脱离终端&#xff0c;长期监控指定目录&#xff08;如 /var/log/app/&#xff09;中的日志文件。自动备份&#xf…

Electricity Market Optimization 探索系列(VII)- 直流潮流方程的推导及例题

本文参考书籍&#xff1a;电力经济与电力市场&#xff0c;甘德强&#xff0c;杨莉&#xff0c;冯冬涵 著 link \hspace{1.6em} 文章的结构如下&#xff1a;围绕电力传输系统中短线路的等值等效模型&#xff0c;从节点注入功率的角度和线路功率的角度分析电网中的潮流&#xff0…