数据结构--散列函数的构造方法

一、概述

散列(哈希)函数的作用:将任意整数型 / 字符型关键字,通过固定运算,压缩映射为 0~表长 - 1 范围内的散列地址。构造原则(必背):

计算简单、速度快;

地址分布均匀,尽量减少哈希冲突;

能够覆盖整个散列表空间。

常用五种标准构造方法:直接定址法、除留余数法、数字分析法、平方取中法、折叠法。


二、直接定址法

  1. 公式

H(key)=key或H(key)=a×key+b、为常数,做线性映射。

  1. 原理

直接利用关键字本身,或经过简单线性变换,作为散列地址,一一对应。

  1. 特点

优点:无哈希冲突,计算最简单;

缺点:关键字必须连续、分布集中,若关键字跨度大,会造成散列表空间大量浪费。

  1. 适用场景

关键字取值连续、范围狭小、分布规律明确的场景。


三、数字分析法

  1. 原理

针对位数固定的数字关键字,分析每一位数字的分布规律:

剔除重复多、分布集中的无效位;

选取数字随机、分散性强的若干位,组合作为散列地址。

  1. 举例

一组学号:20260311、20260315、20260320前几位固定重复,中间段集中,取末尾两位作为地址,分布更均匀。

  1. 特点

优点:地址均匀,冲突少;

缺点:必须预先掌握全部关键字的数字规律,无法通用。

  1. 适用场景

关键字位数固定、样本已知、批量静态数据。


四、平方取中法

  1. 原理

对关键字整体进行平方运算;

平方后数值会打乱原有数字规律;

截取平方结果中间若干位作为散列地址。

  1. 核心优势

关键字首尾数字容易集中重复,中间位随机性最强,映射更均匀,有效降低冲突。

  1. 特点

优点:无需分析关键字规律,通用性强,分散效果好;

缺点:大数平方运算稍复杂,计算开销略大。

  1. 适用场景

关键字分布无规律、无法提前分析数位的情况。


五、折叠法

  1. 原理

将关键字按固定长度分割成若干段,对所有分段数值进行叠加求和,再取后几位作为散列地址。分为两种:

移位叠加:分段直接相加;

边界叠加:相邻段反向翻转后再相加,进一步打乱规律。

  1. 举例

关键字:5689427,按 3 位分割:568 | 942 | 7分段求和,取低位作为存储地址。

  1. 特点

优点:适合关键字位数多、数值范围大的数据;

缺点:分割规则需要人为设定,随机度一般。

  1. 适用场景

超长数字关键字、大数值编号类数据。


六、除留余数法

  1. 公式

H(key)=key Mod p

p 为选取的模数。

  1. 选取规则(必考)

设散列表表长为 m,要求:p<m;

p 优先选取质数;

避免选取含有大量公因数的合数(如偶数、5 的倍数),防止地址聚集。

  1. 原理

利用取模运算,将大范围关键字压缩到 0∼p−1区间,运算简单、映射稳定。

  1. 特点

优点:计算极简、实现容易、通用性最强、适配所有类型关键字;

缺点:若 p 选取不当,会出现地址集中、冲突增多。

  1. 适用场景

绝大多数散列表的默认构造方法,笔试、代码、工程全部通用。


七、五种方法整体对比总结

直接定址法:无冲突,仅限连续关键字;

数字分析法:靠数位筛选,适合已知固定样本;

平方取中法:平方乱序,中间取值,分散性好;

折叠法:分段叠加,适合长关键字;

除留余数法:万能通用,考试核心、首选方法。

相关推荐
Cthy_hy9 分钟前
并查集(Disjoint Set Union):巧判「连通聚类关系」的极简利器
数据结构·算法
阿Y加油吧36 分钟前
两道位运算 / 摩尔投票经典题复盘:只出现一次的数字 & 多数元素
数据结构·算法·leetcode
05候补工程师1 小时前
【408狂飙·数据结构】核心考点深度复盘:数组地址计算、特殊矩阵压缩存储与树的五大性质解题直觉
数据结构·笔记·线性代数·考研·算法·矩阵
炘爚2 小时前
数据结构:顺序表
数据结构
LuminousCPP2 小时前
数据结构 - 线性表第二篇:动态顺序表进阶接口实现
c语言·数据结构·笔记·顺序表·线性表
承渊政道2 小时前
【贪心算法】(经典实战应用解析(五):单调递增的数字、坏了的计算器、合并区间、⽆重叠区间、⽤最少数量的箭引爆⽓球)
数据结构·c++·leetcode·贪心算法·排序算法·动态规划·哈希算法
念恒123063 小时前
Python(while循环)
数据结构·python·算法
bqq198610263 小时前
Redis持久化
数据结构·数据库·redis·缓存
阳明山水4 小时前
模型迭代实战:如何将准确率从75%提升到89%
数据结构·人工智能·算法·机器学习·微信·微信公众平台·微信开放平台
故事和你915 小时前
洛谷-【图论2-2】最短路4
开发语言·数据结构·c++·算法·动态规划·图论