数据结构--哈希表

一、核心概念

  1. 定义:基于散列函数(哈希函数),将键(Key)映射到数组对应下标,实现高效存取的线性数据结构。

  2. 核心目标:以近似 O(1) 的时间复杂度完成增删查操作。

  3. 核心要素

◦ 散列函数:建立键到数组下标的映射关系

◦ 哈希表数组:存储数据的主体结构

◦ 冲突解决机制:处理多个键映射到同一下标(哈希冲突)的情况

二、散列函数设计原则

  1. 确定性:同一键多次计算,得到的哈希值必须相同。

  2. 均匀性:哈希值分布均匀,尽可能减少哈希冲突。

  3. 高效性:计算速度快,时间复杂度低。

  4. 范围适配:计算出的哈希值需落在哈希表数组的下标范围内。

  5. 常用方法

◦ 直接定址法:hash(key)=a\times key+b,适合键分布连续的场景

◦ 除留余数法:hash(key)=key\ mod\ m(m 为数组长度,通常取质数),应用最广

◦ 平方取中法:取 key^2 的中间几位作为哈希值,适合键分布不规律的场景

◦ 折叠法:将键分段后叠加,适合键长度较长的场景

三、哈希冲突解决方法

(一)开放定址法

  1. 核心思想:发生冲突时,按某种规则在哈希表数组中寻找下一个空位置。

  2. 常用探测方式

◦ 线性探测:冲突后依次向后查找 hash(key)+1, hash(key)+2,...,易产生聚集现象

◦ 二次探测:冲突后按 hash(key)\pm 1^2, hash(key)\pm 2^2,... 查找,缓解聚集

◦ 双重散列:使用第二个散列函数计算探测步长,分散性更好

(二)链地址法(拉链法)

  1. 核心思想:哈希表数组的每个下标位置存储一个链表(或红黑树),冲突的元素直接链入对应链表。

  2. 优势:处理冲突简单,不易产生聚集,适合高频插入删除的场景。

  3. 优化:当链表长度超过阈值时,转为红黑树,提升查找效率(如Java的HashMap)。

(三)其他方法

• 公共溢出区法:建立基本表和溢出表,冲突元素统一存入溢出表。

• 再哈希法:冲突时使用新的散列函数重新计算哈希值,直到找到空位置。

四、关键性能指标

  1. 装填因子:\alpha=\frac{哈希表中元素个数}{数组长度},是衡量哈希表拥挤程度的核心指标。

  2. 装填因子与性能的关系:\alpha 越小,冲突概率越低,但空间利用率低;\alpha 越大,空间利用率高,但冲突概率上升。

  3. 扩容机制:当装填因子超过阈值时,对哈希表数组进行扩容(通常扩容为原长度的2倍),并重新计算所有元素的哈希值(重哈希)。

五、常见应用

  1. 实现关联数组(如Java的HashMap、Python的dict)

  2. 数据库索引:加速数据查询

  3. 缓存系统:如Redis的哈希结构

  4. 字符串匹配:如布隆过滤器的底层基础

六、注意事项

  1. 散列函数的优劣直接决定哈希表的性能,需结合键的特征选择。

  2. 开放定址法中删除元素不能直接清空,需标记为"已删除",避免影响后续查找。

  3. 链地址法需注意链表和红黑树的转换条件,平衡时间与空间效率。

相关推荐
wuyk55510 小时前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法
点心的游戏开发世界11 小时前
GDScript 入门笔记(五):函数
笔记·游戏引擎·godot
wp123_113 小时前
硬件设计笔记:1μH功率电感选型实战——线艺 XFL4020-102MEC 与 国产 pin to pin MVLH4020-1R0M 详细参数测评
笔记·科技·硬件架构·硬件工程
摇滚侠13 小时前
《SpringBoot 3:入门与应用实战》第 14 章 打包与部署 Spring Boot 应用打包 阅读笔记 41
spring boot·笔记·后端
Chester_199913 小时前
CSP202312C.树上搜索
开发语言·数据结构·c++·蓝桥杯·stl
金立基包装胶水13 小时前
纸袋热封胶常见都有哪些问题?
大数据·笔记·其他
chnyi6_ya14 小时前
论文阅读笔记 | HoneyBee: Data Recipes for Vision-Language Reasoners
论文阅读·笔记
repetitiononeoneday14 小时前
【每日规划与反思】2026.9.4
笔记
江湖人称菠萝包14 小时前
【Windows】《深入浅出Windows API程序设计:编程基础篇》笔记-Chapter1-基础知识
windows·笔记
江湖人称菠萝包15 小时前
【Windows】《深入浅出Windows API程序设计:编程基础篇》笔记-Chapter2-Windows窗口程序
windows·笔记