hash基础知识(算法村第五关青铜挑战)

一、Hash的概念和基本特征
哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。


二、碰撞处理方法(2种)
在上面的例子中,我们发现有些在Hsh中很多位置可能要存两个甚至多个元素,很明显单纯的数组是不行的,这种两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。
那该怎么解决呢?常见的方法有:开放定址法(Java里的Threadlocal)、链地址法(Java里的ConcurrentHashMap)、再哈希法(布隆过滤器)、建立公共溢出区。后两种用的比较少,重点看前两个。


1.开放定址法
开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
例如上面要继续存7,8,9的时候,7没问题,可以直接存到索引为0位置。8本来应该存到索引为1的位置,但是已经满了,所以继续向后找,索引3的位置是空的,所以8存到3位置。同理9存到索引6位置。
这里是否有一个疑惑:这样鸠占鹊巢的方法会不会引起混乱?比如再存3和6的话,本来自己的位置好好的,但是被外来户占领了,该如何处理呢?这个问题直到我在学习Java里的ThreadLocal才解开。具体过程可以学习一下相关内容,我们这里只说一下基本思想。ThreadLocal?有一个专门存储元素的TheadLocalMap,每次在get和set元素的时候,会先将目标位置前后的空间搜索一下,将标记为nul的位置回收掉,这样大部分不用的位置就收回来了。这就像假期后你到公司,每个人都将自己的位子附近打扫干净,结果整个工作区就很干净了。当然Hsh处理该问题的整个过程非常复杂,涉及弱引用等等,这些都是Java技术面试里的高频考点。

2.链地址法
将哈希表的每个单元作为链表的头结点,所有哈希地址为的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头结点的链表的尾部。

这种处理方法的问题是处理起来代价还是比较高的,要落地还要进行很多优化,例如在Java里的ConcurrentHashMap中就使用了这种方式,其中涉及元素尽量均匀、访问和操作速度要快、线程安全、扩容等很多问题。
 

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

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

相关文章

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么?2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的?4.1 在潜在空间中…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

序言:《未来已来》

尊敬的读者, 你是否曾经在面对冗长的报告、繁琐的工作、沉重的生活压力时感到困扰,渴望找到一种方式来提升效率,释放压力?你是否曾经在自我创业的道路上,苦于找不到有效的市场营销方式,寻求突破&#xff1f…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式,例如在时域中表现出平稳性的动态纹理模式,以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

开发一个商城小程序要多少钱?

随着科技的飞速发展,小程序已成为移动端购物的新宠。商城小程序更是如此,凭借其便捷性、灵活性、以及强大的营销功能,为企业打开了新的销售渠道。那么,开发一个商城小程序到底要多少钱呢?今天,我们就来深入…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

玩转Ubuntu零基础教程

欢迎来到 Ubuntu&#xff01;以下是一份零基础入门 Ubuntu 的指南&#xff0c;以帮助你更好地了解和使用这个流行的 Linux 操作系统。 1. 安装 Ubuntu&#xff1a; 从 Ubuntu 官网 下载最新版本的 Ubuntu。制作启动盘&#xff08;可以使用软件如 Rufus 或 balenaEtcher&#…

Python----matplotlib库

目录 plt库的字体&#xff1a; plt的操作绘图函数&#xff1a; plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number)&#xff1a; plt.axes(rect)&#xff1a; plt.subplots_adjust(): plt的读取和显示相关函数&#xff1a; plt库的基础图…

vue和react哪种框架使用范围更广

Vue和React都是非常流行的前端JavaScript框架&#xff0c;它们各自有着广泛的应用场景和支持者。选择使用哪一个框架往往取决于特定的项目需求、开发团队的熟悉程度以及生态系统的偏好。以下是这两个框架的一些主要特点&#xff0c;以帮助比较它们的使用范围&#xff1a; React…

【数据挖掘】基于 LightGBM 的系统访问风险识别(附源码)

基于 LightGBM 的系统访问风险识别 文章目录 基于 LightGBM 的系统访问风险识别一、课题来源二、任务描述三、课题背景四、数据获取分析及说明&#xff08;1&#xff09;登录https://www.datafountain.cn并获取相关数据&#xff08;2&#xff09;数据集文件说明&#xff08;3&a…

【QT】发生的运行时错误汇总

1 、QObject::startTimer: Timers cannot be started from another thread 错误原因&#xff1a;QObject是可重入的&#xff0c;它的大多数非GUI子类&#xff0c;例如QTimer, QTcpSocket, QUdpSocket and QProcess都是可重入的&#xff0c;使得这些类可以同时用于多线程。需要…

百川 大模型部署 排错实战笔记

目录 测试成功代码: 模型地址: 模型下载: 模型微调地址: win11系统:

目标检测YOLO实战应用案例100讲-基于红外图像处理的无人机光伏组件故障检测

目录 前言 国内外研究现状 光伏组件故障检测研究现状 图像检测算法研究现状

进程和计划任务

一、什么是程序 是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二、进程 1.什么是进程 进程&#xff1a;正在运行中的程序&#xff0c;加载到内存…

如何使用graalvm为带有反射功能的java代码生成native image

译自Configure Native Image with the Tracing Agent graal官方文档 , 以下所有命令需要在linux环境下操作&#xff0c;graalvm也支持windows。 要为使用 Java 反射、动态代理对象、JNI 或类路径资源的 Java 应用程序构建本机可执行文件&#xff0c;应为 native-image 工具提供…

Python 自学(三) 之序列的应用

目录 1. 序列的含义 2. 序列的索引 P80 3. 序列相加 P81 4. 序列乘法 P82 5. in 关键字 P83 6. 计算序列的最大值max()&#xff0c;最小值min()和长度len() P83 7. 列表的初始化 list() P85 8. 列表元素的添加&#xff0c;…

apache httpd多后缀解析漏洞复现

一、漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。 该漏洞和apache版本和php版本无关,属于用户配置不当造成的解…

如果一个n位正整数等于其各位数字的n次方之和

❤ 厾罗 如果一个n位正整数等于其各位数字的n次方之和 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 5^3 3^3 153。 1000以内的阿姆斯特朗数&#xff1a; 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。 以下代码用于检测用户输…

vc2017编译从github网站上下载的源码

以ZLmediakit为例 1.下载软件 cmakehttps://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-windows-x86_64.zip Microsoft Visual Studio https://my.visualstudio.com/Downloads?qvisual%20studio%202017&wt.mc_ido~msft~vscom~older-downloads …