哈希——哈希表
回顾/本期梗概
上期我们学习了哈希——字符串哈希(空降链接),本期我们将学习哈希中的哈希表。
1、哈希表原理
(1)使用数组下标直接标记元素
哈希表(也叫数列表):是一种高效的、通过把关键词码值映射到表中的一个位置来访问记录的数据结构。
类似字符串,查找的时间复杂度是常熟时间,缺点是需要消耗更多的内存。
现在要存储和使用下面的线性表:.
为了用的时间实现查找,可以开一个一维数组
,使得
,虽显然造成了空间上的很大浪费,尤其是数据范围很大时。
(2)除余法构造哈希值
为了使空间开销减少,我们可以对第二种方法加以优化,实际一个哈希函数,然后令
,这样一来定义一个一维数组
就已足够,这种方法就是哈希表。
但这样会造成哈希冲突,比如和
的值都是2.
这里与字符串 Hash 有所不同,可能不论我们怎样选用哈希函数,还是很难避免产生冲突。
因此我们考虑对每一个哈希值记一个链表(其实也就相当于邻接表),把所有等于同一个哈希值的数字都存储下来,而查询只要遍历对应的链表即可,这样实际复杂度取决于查询的链表长度,也可以看做是常熟级。
例如:我们定义哈希函数,对数组
,进行哈希运算后,插入一些数据的效果如下图。

(3)哈希函数的构造
取余法构造哈希:,为了尽量避免冲突,一般选取为能够存储下并且尽量大的素数(一般情况下我们根据空间取
左右的素数)。一般的说,如果 b 的约数越多,那么冲突的几率就越大。
2、使用数组模拟邻接表
(1)插入关键操作:
v = hash(x);//计算x的哈希值
idx++;
e[idx] = x;
ne[idx] = h[v];
h[v] = idx;
(2)查找关键操作:
int v = hash(x);//计算x的哈希值
//循环链表
for(int i=h[v];i!=0;i=ne[i]){if(e[i] == x){return true;}
}
例如:读入整数2 5 6 8 3 11,假设
则:每个元素的哈希值是2 5 0 2 3 5
存储数组如下:
element数组:按读入的顺序,存储每个元素的值。

next数组:next[i]存储和element[i]哈希值相同的上一个数的编号。

header数组:header[i]存储哈希值为i的最后一个元素的编号

制作不易,点个赞吧!!!
制作不易,点个赞吧!!!
制作不易,点个赞吧!!!
相关文章:
哈希——哈希表
回顾/本期梗概 上期我们学习了哈希——字符串哈希(空降链接),本期我们将学习哈希中的哈希表。 1、哈希表原理 (1)使用数组下标直接标记元素 哈希表(也叫数列表):是一种高效的、通过把…...
简单了解 JVM
目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。 虚拟机是指通过软件模…...
已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?
我是29岁那年,完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁,到你退休那年,中间这么漫长的30年,那么30岁转行完全来得及; 如果你觉得必须在什么年纪,什么时间内必须完成赚到几十…...
快速理解docker(一)docker 简介
在当今快速迭代的软件开发环境中,如何高效地部署、管理和扩展应用程序成为了开发者们面临的重大挑战。Docker,作为一款开源的容器化平台,凭借其轻量级、可移植性和易于部署的特性,迅速成为了解决这些挑战的热门选择。本文将带您走…...
RHCS认证-Linux(RHel9)-Ansible
文章目录 一、ansible 简介二 、ansible部署三、ansible服务端测试四 、ansible 清单inventory五、Ad-hot 点对点模式六、YAML语言模式七、RHCS-Ansible附:安装CentOS-Stream 9系统7.1 ansible 执行过程7.2 安装ansible,ansible-navigator7.2 部署ansibl…...
【Python】Spyder:科学 Python 开发环境
在数据科学和科学计算领域,Python 已经成为了一个不可或缺的工具。为了提高开发效率和改善编程体验,一个功能强大且用户友好的开发环境是必需的。Spyder(Scientific Python Development Environment)正是这样一个为科学计算和数据…...
SpringBootWeb响应
2. 响应 前面我们学习过HTTL协议的交互方式:请求响应模式(有请求就有响应) 那么Controller程序呢,除了接收请求外,还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中,都已经设置了…...
CMake 构建Qt程序弹出黑色控制台
CMake 构建Qt程序弹出黑色控制台...
虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)
文章目录 一、下载镜像源(准备工作)1、开源网站2、下载 二、VMware配置centos三、配置静态IP地址四、Finalshell使用1、下载Finalshell2、连接虚拟机 五、谢谢观看! 一、下载镜像源(准备工作) 1、开源网站 有许多开源…...
git 删除 git push 失败的记录
文章目录 问题分析 问题 git push 失败后如何清理 commit 提交的内容 当我们 git push 失败后,如果下次有新的改动需要push时,会出现如下报错 分析 找到需要回退的那次commit的 哈希值 git log然后就回退到了指定版本,这个时候再把新修改…...
【专题】2024年中国白酒行业数字化转型研究报告合集PDF分享(附原数据表)
原文链接:https://tecdat.cn/?p37755 消费人群趋于年轻化,消费需求迈向健康化,消费场景与渠道走向多元化,这些因素共同驱动企业凭借数据能力来适应市场的变化。从消费市场来看,消费群体、需求、场景及渠道皆展现出与…...
哪款品牌充电宝性价比比较高?五款性价比绝佳充电宝推荐
在现代生活中,充电宝已经成为我们日常出行和工作的必备品。然而,面对市场上琳琅满目的充电宝品牌,大家往往难以抉择。尤其是在近期,充电宝不合格产品的数量持续上升,据最新抽查结果显示,不合格率已经上升到…...
巨坑!!华为大数据平台sparksql,连接gauss200数据库
最近用华为大数据平台fusion6.5平台,写了一个sparksql 读取gauss200的MPP数据库的程序。 首先将spark 相关的jar依赖包,必须在华为大数据平台的客户端的spark/jars 这个文件里面去找到然后添加到idea 依赖里面。打包要把整体包打在里面。 核心代码片段…...
BGP相关知识笔记
技术背景: 在只有IGP(诸如OSPF、IS-IS、RIP等协议,因为最初是被设计在一个单域中进行一个路由操纵,因此被统一称为Interior Gateway Protocol,内部网关协议)的时代,域间路由无法实现一个全局路由…...
在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS‘ 错误
在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS’ 错误 在 Windows 系统上启动 Vue 项目时,遭遇报错。具体报错信息如下: ‘NODE_OPTIONS‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。这个错误通常意味着 Windows 系统无法识…...
面试真题:谈一谈Mysql的分库分表
分表和分库是什么?有什么区别? 分库是一种水平扩展数据库的技术,将数据根据一定规则划分到多个独立的数据库中。每个数据库只负责存储部分数据,实现了数据的拆分和分布式存储。分库主要是为了解决并发连接过多,单机 my…...
玄机靶场--蚁剑流量
木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容,提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器,提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件,提交文件绝对路径 蚁剑流量特征总结 …...
uniapp map设置高度为100%后,会拉伸父容器的高度
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
CICD从无到会
一 CICD是什么 CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 1.1 持续集成(Continuous Integration) 持续集成是…...
责任链模式优化 文章发布的接口(长度验证,敏感词验证,图片验证等环节) 代码,示例
需求:后端需要提供一个文章发布的接口,接口中需要先对文章内容进行如下校验,校验通过后才能发布 1. 文章长度不能超过1万个字符 2. 不能有敏感词 3. 文章中图片需要合规 责任链相当于一个链条一样,链条上有很多节点,节…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
mcts蒙特卡洛模拟树思想
您这个观察非常敏锐,而且在很大程度上是正确的!您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些,您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”,这个观察非…...
GC1808:高性能音频ADC的卓越之选
在音频处理领域,高质量的音频模数转换器(ADC)是实现精准音频数字化的关键。GC1808,一款96kHz、24bit立体声音频ADC,以其卓越的性能和高性价比脱颖而出,成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...
Heygem50系显卡合成的视频声音杂音模糊解决方案
如果你在使用50系显卡有杂音的情况,可能还是官方适配问题,可以使用以下方案进行解决: 方案一:剪映替换音色(简单适合普通玩家) 使用剪映换音色即可,口型还是对上的,没有剪映vip的&…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...
