【基础算法】哈希表(开放寻址法)
🌹作者:云小逸
📝个人主页:云小逸的主页
📝Github:云小逸的Github
🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏👏专栏:Linux学习👏
👏专栏:C语言初阶👏👏专栏:数据结构👏👏专栏:备战蓝桥杯👏
文章目录
- 前言
-
- 例题: 模拟散列表
- 题目:
- 输入格式
- 输出格式
- 数据范围
- 输入样例:
- 输出样例:
- 开放寻址法:
- 核心思想:
- 添加:
- 查找:
- 删除:
- 代码:
- 代码解析:
-
- 最后
-
-
前言
今天这篇文章接着上一篇文章【哈希表(拉链法)】继续说解决哈希表冲突的第二种方法:开放寻址法。
——————————————————————————————
首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1. 世界上最厉害的人,是说起床就起床,说睡觉就睡觉,说做事就做事,说玩就玩,说收心就收心,说不爱 就不爱。
2.一定要狠下心来努力变成一个很厉害的人,厉害到有一天,你可以随时离开那些令你不舒服的圈子和人, 让他们通通羡慕不已。
3.努力变得更厉害的原因是,以后遇到喜欢的人,除了真心,还有其他东西可以拿得出手。
4.我以为别人尊重我,是因为我很优秀。慢慢的我明白了,别人尊重我,是因为别人很优秀;优秀的人更懂 得尊重别人。对人恭敬其实是在庄严你自己。
5. 五粮液从不骂茅台,茅台也从不诋毁五粮液。双双成为世界名酒。人活着发自己的光就行,没必要灭别人 的灯。
例题: 模拟散列表
题目:
维护一个集合,支持如下几种操作:
I x,插入一个数 x;
Q x,询问数 x 是否在集合中出现过;
现在要进行 N 次操作,对于每个询问操作输出对应的结果。
输入格式
第一行包含整数 N,表示操作数量。接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。
输出格式
对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No。
每个结果占一行。
数据范围
1≤N≤105
−109≤x≤109
输入样例:
5
I 1
I 2
I 3
Q 2
Q 5
输出样例:
Yes
No
开放寻址法:
核心思想:
与拉链法类似,要先建立一个哈希函数,将原数组映射到哈希函数上,
与拉链法相比,开放寻址法只需要建立一个数组,不用像拉链法那样再设置一个链表。

这里可以想象一下我们去上厕所的情景,先从k的位置【k是该数在哈希函数的映射值】开始看是否有人,有人就下一个坑位,没人就占这个位置。
添加:
从k的位置开始找,看这个坑位是否有人,有人就下一个
查找:
从第k的坑位开始查找:
当前坑位有人,是x,则查找到了。
当前坑位有人,但不是x,则下一个。
当前坑位没有人,说明x不存在。
删除:
按照查找的方式,如果找到x,一般不会将x删掉,只是打一个特殊的标志,以示删除掉了x,这个与拉链法类似。
代码:
#include <cstring>
#include <iostream>using namespace std;const int N = 200003;//题目要求N的范围是[0,10^5],但从经验上一维数组的长度要开到要求的2-3倍。//这样就可以最大程度地降低冲突的概率,那么N取大于范围的第一个质数。
const int null = 0x3f3f3f3f;//设置一个数表示这个坑位没有人,即设定数组的初始化的值,//且这个要在N的范围之外。int h[N];int find(int x)
{int t = (x % N + N) % N;while (h[t] != null && h[t] != x)//表示坑位不为0,且坑位内不是查找的值{t ++ ;//看下一个坑位if (t == N) t = 0;//看完了最后的坑位,要返回到第一个坑位,循环回来看第一个坑位i}return t;//两种含义:k在哈希表中,返回k在哈希表的下标,如果不在哈希表中,则返回x应该存在哈希表的位置
}int main()
{memset(h, 0x3f, sizeof h);int n;scanf("%d", &n);while (n -- ){char op[2];int x;scanf("%s%d", op, &x);if (*op == 'I') h[find(x)] = x;else{if (h[find(x)] == null) puts("No");else puts("Yes");}}return 0;
}
代码解析:
1.N的范围:
const int N = 200003;//题目要求N的范围是[0,10^5],但从经验上一维数组的长度要开到要求的2-3倍。//这样就可以最大程度地降低冲突的概率,那么N取大于范围的第一个质数。
2.初始化的值:
const int null = 0x3f3f3f3f;//设置一个数表示这个坑位没有人,即设定数组的初始化的值,//且这个要在N的范围之外。
3.查找函数【核心操作】
int find(int x)
{int t = (x % N + N) % N;while (h[t] != null && h[t] != x)//表示坑位不为0,且坑位内不是查找的值{t ++ ;//看下一个坑位if (t == N) t = 0;//看完了最后的坑位,要返回到第一个坑位,循环回来看第一个坑位i}return t;//两种含义:k在哈希表中,返回k在哈希表的下标,如果不在哈希表中,则返回x应该存在哈希表的位置
}
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.我慢慢开始自渡了,变得不悲不喜,我接受世界上所有的不公平,善良并带点锋芒,我请求我自己,热爱 生活热爱自己。
2.人最怕的就是清醒的堕落,什么都懂,却不行动,没有压力,无忧无虑,没有目标,加上一点迷茫,到最 后还是维持现状。
3.我们总是喜欢用顺其自然来敷衍人生道路上的荆棘坎坷,却很少承认,真正的顺其自然,其实是竭尽所能 之后的不强求 ,而不是两手一摊的不作为。
4.你把性格交给星座,把努力交给鸡汤,把运气交给锦鲤,然后对自己说听过许多道理,但依然过不好这一 生。倒也是,过的好了才有鬼呢。
5. 你在人群中看到的每一个耀眼的人,都是踩着刀尖过来的。你如履平地般地舒适坦然,当然不配拥有任何 光芒。
最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!
相关文章:
【基础算法】哈希表(开放寻址法)
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
优化算法(寻优问题)
前言 群智能算法(全局最优):模拟退火算法(Simulated annealing,SA),遗传算法(Genetic Algorithm, GA),粒子群算法(Particle Swarm Optimization&…...
基于视频流⽔线的Opencv缺陷检测项⽬
代码链接见文末 1.数据与任务概述 输入为视频数据,我们需要从视频中检测出缺陷,并对缺陷进行分类。 2.整体流程 (1)视频数据读取和轮廓检测 首先,我们需要使用opencv读取视频数据,将彩色图转为灰度图后进行图像阈值处理。阈值处理是为了让前景和背景更明显的区分处理。…...
百万数据excel导出功能如何实现?
最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了。 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助。 原始需求:用户在UI界面上点击全部导出按钮…...
华为OD机试题,用 Java 解【合规数组】问题
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...
SAP ABAP中的数据类型 Data Types
简单来说分两种: 数据字典里定义的在ABAP程序里定义的 文章目录1. ABAP数据字典里的1.1 数字型的1.2 字符型1.3 字节型1.4 特殊类型2. 预定义的ABAP数据类型2.1 预定义数字型2.2 预定义字符型2.3 预定义字节型1. ABAP数据字典里的 1.1 数字型的 用在数学计算里的…...
HashMap~
HashMap: HashMap是面试中经常被问到的一个内容,以下两个经常被问到的问题, Question1:底层数据结构,1.7和1.8有何不同? 答:1.7数组+链表,1.8数组+(链表|红…...
EasyNLP集成K-Global Pointer算法,支持中文信息抽取
作者:周纪咏、汪诚愚、严俊冰、黄俊 导读 信息抽取的三大任务是命名实体识别、关系抽取、事件抽取。命名实体识别是指识别文本中具有特定意义的实体,包括人名、地名、机构名、专有名词等;关系抽取是指识别文本中实体之间的关系;…...
mysql lesson3
DQL查找语句续集.............................. 分组函数(也叫多行处理函数) 1: select sum(sal) from emp;select min(sal)from emp;select max(sal)from emp;select avg(sal)from emp;select count(ename)from emp;2:分组函…...
python源码保护
文章目录代码混淆打包exe编译为字节码源码加密项目发布部署时,为防止python源码泄漏,可以通过几种方式进行处理代码混淆 修改函数、变量名 打包exe 通过pyinstaller 将项目打包为exe可执行程序,不过容易被反编译。 编译为字节码 py_comp…...
第51讲:SQL优化之COUNT查询的优化
文章目录 1.COUNT查询优化的概念2.COUNT函数的用法1.COUNT查询优化的概念 在很多的业务场景下可能需要统计一张表中的总数据量,当表的数据量很大时,使用COUNT统计表数据量时,也是非常耗时的。 MyISAM引擎会把一个表的总行记录在磁盘中,当执行count(*)的时候会直接从磁盘中…...
ArrayBlockingQueue
同步队列超出长度时,不同的返回形式可以分为以下四种。 会抛异常不会抛异常,有返回值死等,直到可以插入值或者取到值设置等待超时时间添加方法add()offfer()put()offer(E e,long timeout, TimeUnit unit)删除方法remove()poll()take()poll(l…...
DeepLabV3+:对预测处理的详解
相信大家对于这一部分才是最感兴趣的,能够实实在在的看到效果。这里我们就只需要两个.py文件(deeplab.py、predict_img.py)。 创建DeeplabV3类 deeplab.py的作用是为了创建一个DeeplabV3类,提供一个检测图片的方法,而…...
【Git】与“三年经验”就差个分支操作的距离
前言 Java之父于胜军说过,曾经一位“三年开发经验”的程序员粉丝朋友,刚入职因为不会解决分支问题而被开除,这是不是在警示我们什么呢? 针对一些Git的不常用操作,我们通过例子来演示一遍 1.版本回退 1.1已提交但未p…...
【经验】win10设置自启动
方法一:自启动文件夹 按下winr快捷键,弹出运行窗口,输入:shell:startup,弹出自启动文件夹窗口,将要开机自启的程序或快捷方式复制到此窗口中即可。 自启动文件夹路径:C:\Users\【用户名】\Ap…...
Linux SPI-NAND 驱动开发指南
文章目录Linux SPI-NAND 驱动开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员3 流程设计3.1 体系结构3.2 源码结构3.3 关键数据定义3.3.1 flash 设备信息数据结构3.3.2 flash chip 数据结构3.3.3 aw_spinand_chip_request3.3.4 ubi_ec_hdr3.3.5 ubi_vid_hdr3.4 关键接口说…...
【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据
本文接着系列文章(2)进行介绍,以VUE2为开发框架,该文涉及代码存放在HelloWorld.vue中。相较于上一篇文章对div命名class等,该文简洁许多。<template> <div></div> </template>接着引入核心库i…...
在windows搭建Redis集群并整合入Springboot项目
搭建集群配置规划Redis集群编写bat来启动每个redis服务安装Ruby安装Redis的Ruby驱动出现错误镜像过期SSL证书过期安装集群脚本redis-trib启动每个节点并执行集群构建脚本测试搭建是否成功配置springboot项目中配置规划Redis集群 我们搭建三个节点的集群,每个节点有…...
C++【内存管理】
文章目录C内存管理一、C/C内存分布1.1.C/C内存区域划分图解:1.2.根据代码进行内存区域分析二、C内存管理方式2.1.new/delete操作内置类型2.2.new和delete操作自定义类型三、operator new与operator delete函数四、new和delete的实现原理4.1.内置类型4.2.自定义类型4…...
Spring Cloud Nacos源码讲解(六)- Nacos客户端服务发现
Nacos客户端服务发现源码分析 总体流程 首先我们先通过一个图来直观的看一下,Nacos客户端的服务发现,其实就是封装参数、调用服务接口、获得返回实例列表。 但是如果我们要是细化这个流程,会发现不仅包括了通过NamingService获取服务列表…...
连锁经营行业商旅平台选型指南与测评排名Top 6:多门店与全链路商旅管控方案
2026年4月的第一周,艾美咨询发布了《2026年中国连锁经营行业商旅管理数字化白皮书》,数据显示国内规模以上连锁经营企业的商旅支出占整体运营成本的8.7%,其中私车公用、门店巡检类商旅的合规漏洞造成的浪费占总商旅支出的19.2%,连…...
餐饮店主的AI助手:像素特工Ostrakon-VL快速上手,自动检查厨房卫生与陈列
餐饮店主的AI助手:像素特工Ostrakon-VL快速上手,自动检查厨房卫生与陈列 1. 为什么餐饮店主需要AI视觉助手 想象一下这样的场景:早上开店前,你匆匆拍下厨房的照片,上传到一个系统。几秒钟后,它告诉你&…...
代码随想录算法训练营第二天 | Leetcode 209.长度最小的子数组 | Leetcode 59.螺旋矩阵 II | 区间和 | 开发商购买土地
209.长度最小的子数组 力扣题目链接:209. 长度最小的子数组 - 力扣(LeetCode)文档讲解:209.长度最小的子数组 | 滑动窗口 | 连续子数组 | 代码随想录视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数…...
想找济南市中区靠谱装修施工工艺商家?这家公司值得一探!
26年初,随着济南市中区新盘交付,家装成为许多业主生活中的一件大事。然而,家装市场鱼龙混杂,价格不透明、施工质量参差不齐等问题让不少业主头疼不已。今天,我们就来深入探讨几家本地的装修公司,为大家的家…...
OpenClaw性能优化:提升Kimi-VL-A3B-Thinking多模态任务执行效率
OpenClaw性能优化:提升Kimi-VL-A3B-Thinking多模态任务执行效率 1. 为什么需要性能优化? 上周我尝试用OpenClaw对接Kimi-VL-A3B-Thinking多模态模型处理一批产品截图分析任务。原本预计2小时完成的工作,实际运行了整整8小时——期间不仅消耗…...
文字的编码方式————不同UTF之间的区别
目录 1. 编码与字体 A. ASCII(American Standard Code for Information Interchange) B. ANSI C. UNICODE 2 . UNICODE 编码实现 (1)UTF-16 a. UTF-16 LE b. UTF-16 BE (2)UTF-8 (3ÿ…...
性能测试中的“假阳性”:如何识别与避免?
在软件性能测试领域,“假阳性”是一个令测试团队既头疼又难以回避的挑战。它指的是测试报告或监控工具错误地发出性能警报,声称系统存在性能瓶颈或缺陷,但经过深入分析或在实际环境中验证,发现系统运行状态良好,并不存…...
缠论可视化革命:四维分析模型如何重构交易决策逻辑
缠论可视化革命:四维分析模型如何重构交易决策逻辑 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 一、问题重构:当技术分析成为交易认知的枷锁 凌晨3点,量化交易员陈…...
Mod Loader:重新定义GTA系列模组管理的技术架构与实践指南
Mod Loader:重新定义GTA系列模组管理的技术架构与实践指南 【免费下载链接】modloader Mod Loader for GTA III, Vice City and San Andreas 项目地址: https://gitcode.com/gh_mirrors/mo/modloader 一、核心痛点解析:传统模组管理的三大技术瓶颈…...
Phi-4-mini-reasoning部署教程:Nginx反向代理7860端口实现域名访问
Phi-4-mini-reasoning部署教程:Nginx反向代理7860端口实现域名访问 1. 项目介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这款模型主打"小参数、强推理、长上下文、低延迟&q…...
