深入解析哈希表:从核心原理到动态扩展策略
目录一、hash查询的核心流程二、哈希表的两个核心设计三、装填因子四、静态哈希表1. 线性探测2. Robin Hood哈希3. Cuckoo 哈希五、动态哈希表1. 链式哈希2. 可扩展哈希3. 线性哈希六、几种方法的比较七、哈希表与B树的区别一.hash查询的核心流程键(key)通过哈希函数计算得到哈希值,然后哈希值通过取模运算映射为具体的桶O(1),然后进行桶内查找找到对应的数据1.哈希值:哈希值就是把任意长度的数据通过哈希函数计算后得到的固定长度的输出2.桶:桶就是哈希表中的一个槽位桶的本质二.哈希表的两个核心设计1.哈希函数:负责把任意长度的键转换为整数好的哈希函数的特点:计算速度快;输出分布均匀;尽量减少冲突;相似输入也可以产生差异较大的结果2.哈希方案:哈希值最终要映射到有限的槽位,而不同的键可能映射到相同的位置三.装填因子装填因子 α n / m其中n表中已有的元素总数量m哈希表的总长度影响装填因子越大发生冲突的可能性越高。装填因子越小发生冲突的可能性越低但空间利用率也越低。四.静态哈希表1.线性探测当发生冲突时依次探测下一个位置通常为 H(key)1, H(key)2, ...直到找到空闲位置为止。若探测到表尾则从表首继续探测循环探测。查询也遵循相同过程计算理想位置。从该位置向后检查。找到目标键则成功。遇到真正的空槽则说明不存在。删除问题:不能简单把被删除的位置变为空槽,应该设置删除墓碑缺点:线性探测容易产生连续占用区域,称为聚集,聚集区越长,查询和探测的次数就越多2.Robin Hood哈希它会记录每一个元素距离其理想距离有多远:探测位置 当前位置 - 理想位置插入时如果新元素的探测距离比当前位置元素更大就交换二者距离远的元素获得当前位置距离近的元素继续向后寻找3.Cuckoo 哈希Cuckoo Hashing 为一个键准备多个候选位置通常使用多个哈希函数位置1 h1(key) 位置2 h2(key)如果两个位置都被占用把其中一个旧元素踢出去。新元素占据该位置。被踢出的元素前往自己的另一个候选位置。重复这一过程。例:新键 X 想进入 A 的位置 X 踢走 A A 前往自己的另一个位置 A 又可能踢走 B五,动态哈希表1.链式哈希Chained Hashing 的每个槽位不只存一个元素而是指向一个数据集合优点实现简单容量可以动态增长装载因子可以大于1删除操作比较自然缺点可能产生很长的冲突链指针和额外桶需要更多空间随机内存访问对缓存不友好2.可扩展哈希Extendible Hashing 使用一个目录 Directory:也可说为指针多个桶 Bucket全局深度 Global Depth:决定目录使用哈希值的多少位;若为2,则表示使用2个2进制位,目录有2的平方个入口局部深度 Local Depth:表示某个桶当前依赖多少个哈希位,多个目录项可以指向同一个桶因此局部深度可能小于全局深度。桶满:“桶满”就是指这个桶里存放的数据条目已经达到了它预设的物理容量上限再也塞不进新数据了,若桶满了,怎么处理(1)局部深度小于全局深度分裂这个桶增加它的局部深度调整部分目录指针。(2)局部深度等于全局深度将目录扩大一倍全局深度加1分裂溢出的桶重新分配桶中的元素。3.线性哈希Linear Hashing 不使用可扩展哈希中的显式目录。它维护当前哈希层级一个分裂指针两组不同范围的哈希函数。例:h₀(key) hash(key) mod N h₁(key) hash(key) mod 2N桶按照固定次序逐个分裂,每次分裂分裂指针指向一个旧桶创建一个新桶使用更高层哈希函数重新分配该桶的数据分裂指针前进一步一轮分裂完成后进入下一个层级。优点不需要大型目录渐进式扩容避免一次性重建整张表缺点查询逻辑比普通哈希复杂在扩张期间不同桶可能使用不同层级的哈希函数可能需要临时溢出页六.几种方法的比较七.哈希表与B树的区别附.

相关新闻

固态继电器(SSR)原理、选型与应用实战指南

固态继电器(SSR)原理、选型与应用实战指南

1. 项目概述:从“咔哒”声到静默革命 如果你拆开过家里的老式空调或者工业控制柜,大概率见过一种会发出清脆“咔哒”声的黑色方块——电磁继电器。它通过线圈通电产生磁力,吸合机械触点来完成电路的接通与断开,是自动化控制领域几…

2026/8/5 7:54:25 阅读更多 →
Unity异步编程实战:从协程到async/await的性能优化与避坑指南

Unity异步编程实战:从协程到async/await的性能优化与避坑指南

1. 项目概述:为什么Unity开发者必须掌握async/await?如果你在Unity开发中遇到过界面卡死、加载场景时游戏完全冻结,或者试图在协程里处理复杂的状态逻辑时把自己绕晕,那么你正站在异步编程的大门前。async/await这套语法糖&#x…

2026/8/5 7:54:25 阅读更多 →
3分钟极速上手:用XUnity.AutoTranslator让外语游戏秒变中文版

3分钟极速上手:用XUnity.AutoTranslator让外语游戏秒变中文版

3分钟极速上手:用XUnity.AutoTranslator让外语游戏秒变中文版 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的外语游戏而烦恼吗?面对日文、韩文或英文的游戏界面和对…

2026/8/5 7:54:25 阅读更多 →

最新新闻

一文搞懂充电:谁是硬件自动执行、谁是软件策略控制

一文搞懂充电:谁是硬件自动执行、谁是软件策略控制

刚步入BSP充电行业,记录下来偶发灵感和学习心得,欢迎前辈指导,新人们共同探讨!在充电驱动开发学习过程中,由于充电模块与硬件连接很紧密,所以很容易踩到软硬件边界不清的坑,协议识别是谁干的&am…

2026/8/5 8:32:41 阅读更多 →
离谱!竟然是这样——论如何彻底解决 Mac Chrome 文件上传卡顿:从原理到实战的完整方案

离谱!竟然是这样——论如何彻底解决 Mac Chrome 文件上传卡顿:从原理到实战的完整方案

前言 使用苹果电脑的大大们,不知道大家有没有遇到过:在谷歌浏览器的任何网页上传文件的时候会很慢,即使已经点击了确定文件上传之后整个页面没有任何反应,过了十几秒才会出现那个你在上传的文件 情况!!&am…

2026/8/5 8:32:41 阅读更多 →
零基础也能看懂的 C 语言指针完整教程

零基础也能看懂的 C 语言指针完整教程

一、内存与地址基础概念内存:程序运行时操作系统分配的存储空间,以字节为最小管理单位。地址:操作系统给每一字节内存分配唯一编号,用来定位内存位置,编号就是地址。指针:地址本身就叫指针,指针…

2026/8/5 8:32:41 阅读更多 →
服务器500错误深度排查:从日志分析到系统诊断的实战指南

服务器500错误深度排查:从日志分析到系统诊断的实战指南

1. 从“500”到“真相”:一个服务器错误的深度诊疗手册如果你在浏览网页、提交表单,或者调用某个API时,突然看到一个冷冰冰的“500 Internal Server Error”,那一刻的感受,大概就像兴冲冲去赴约,结果吃了个…

2026/8/5 8:32:41 阅读更多 →
终极解密方案:Unlock Music Electron如何让你彻底掌控音乐文件

终极解密方案:Unlock Music Electron如何让你彻底掌控音乐文件

终极解密方案:Unlock Music Electron如何让你彻底掌控音乐文件 【免费下载链接】unlock-music-electron Unlock Music Project - Electron Edition 在Electron构建的桌面应用中解锁各种加密的音乐文件 项目地址: https://gitcode.com/gh_mirrors/un/unlock-music-…

2026/8/5 8:32:41 阅读更多 →
网络排错必备:深入解析IPv4数据报首部20字节核心字段

网络排错必备:深入解析IPv4数据报首部20字节核心字段

1. 从一次网络故障排查说起:为什么必须懂IP首部? 前段时间,我帮一个朋友排查他们公司内部一个诡异的网络问题。现象是:从A办公室的某台电脑,向B办公室的一台服务器发送一个特定的业务请求包,总是会超时失败…

2026/8/5 8:31:41 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →