news 2026/1/16 22:37:07

HASH表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HASH表

HASH函数构造


构造函数的常用方法(下面为了叙述简洁,设 h(k) 表示关键字为 k 的元素所对应的函数值):

为简单起见,假定关键码是定义在自然数集合上,常见的哈希函数构造方法有:

1、直接定址法


以关键字Key本身或关键字加上某个数值常量C作为散列地址的方法。散列函数为:h(Key)= Key+C,若C为0,则散列地址就是关键字本身。

2、除余法


选择一个适当的正整数m,用m去除关键码,取其余数作为地址,即:h(Key)= Key % m,这个方法应用的最多,其关键是m的选取,一般选m为小于某个区域长度n的最大素数(如例1中取m=13),
为什么呢?就是为了尽力避免冲突。假设取m=1000 ,则哈希函数分类的标准实际上就变成了按照关键字末三位数分类,这样最多1000类,冲突会很多。
一般地说,如果 m 的约数越多,那么冲突的几率就越大。而素数的约数是最少的,因此我们选用大素数。记住“素数是我们的得力助手”。

3、数字分析法


常有这样的情况:关键码的位数比存储区域的地址的位数多,在这种情况下可以对关键码的各位进行分析,丢掉分布不均匀的位留下分布均匀的位作为地址。

本方法适用于所有关键字已知,并对关键字中每一位的取值分布情况作出了分析。

【例】 对下列关键码集合(表中左边一列)进行关键码到地址的转换,要求用三位地址。

分析:

键码是9位的,地址是3位的,需要经过数字分析丢掉6位。丢掉哪6位呢?显然前3位是没有任何区分度,第5位1太多、第6位基本都是8和9、第7位都是3、4、5,这几位的区分度都不好,而相对来说,第4、8、9位分布比较均匀,所以留下这3位作为地址(表中右边一列)。

4、平方取中法


将关键码的值平方,然后取中间的几位作为散列地址。具体取多少位视实际要求而定,取哪几位常常结合数字分析法。

【例】
将一组关键字(0100,0110,1010,1001,0111)平方后得(0010000,0012100,1020100,1002001,0012321),若取表长为1000,则可取中间的三位数作为散列地址集:(100,121,201,020,123)。

5、折叠法


如果关键码的位数比地址码的位数多,而且各位分布较均匀,不适于用数字分析法丢掉某些数位,那么可以考虑用折叠法。折叠法是将关键码从某些地方断开,分关键码为几个部分,其中有一部分的长度等于地址码的长度,然后将其余部分加到它的上面,如果最高位有进位,则把进位丢掉。

一般是先将关键字分割成位数相同的几段(最后一段的位数可少一些),段的位数取决于散列地址的位数,由实际需要而定,然后将它们的对应位叠加和(舍去最高位进位)作为散列地址。

6、基数转换法


将关键码值看成在另一个基数制上的表示,然后把它转换成原来基数制的数,再用数字分析法取其中的几位作为地址。一般取大于原来基数的数作转换的基数,并且两个基数要是互质的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/14 5:13:06

Langchain-Chatchat社区活跃度报告:GitHub星标破万背后的真相

Langchain-Chatchat社区活跃度报告:GitHub星标破万背后的真相 在企业知识管理日益复杂的今天,一个看似不起眼的开源项目却悄然在 GitHub 上掀起波澜——Langchain-Chatchat。它没有明星团队背书,也不依赖商业推广,却在短短几个月内…

作者头像 李华
网站建设 2026/1/15 21:30:50

70、Windows 7 计算机问题检测与解决全攻略

Windows 7 计算机问题检测与解决全攻略 在使用 Windows 7 系统的过程中,难免会遇到各种各样的问题。本文将详细介绍 Windows 7 系统中检测和解决计算机问题的方法,包括内置诊断框架、故障排除工具、事件日志跟踪、系统服务管理以及备份功能等方面。 1. 内置诊断框架 Windo…

作者头像 李华
网站建设 2026/1/16 7:37:11

81、Windows系统使用与故障排除全攻略

Windows系统使用与故障排除全攻略 1. Windows Media Center基础设置 Windows Media Center提供了丰富的设置选项,可帮助用户优化使用体验。 - 启动行为管理 :通过选择“Tasks→Settings→General→Startup and Windows Behavior”,用户可以管理Windows Media Center的启…

作者头像 李华
网站建设 2026/1/2 16:07:45

Langchain-Chatchat如何设置问答结果的桌面客户端调用?

Langchain-Chatchat 如何实现桌面客户端调用问答结果 在企业知识管理日益智能化的今天,如何安全、高效地访问私有文档成为一大挑战。通用大模型虽然强大,但其云端处理机制带来了数据泄露风险和网络依赖问题,尤其在金融、医疗、制造等行业中难…

作者头像 李华
网站建设 2025/12/21 13:20:15

微信小程序接入大模型实战 8:面相/手相健康扫描仪(含代码)

1. 前言:当传统“望诊”遇见深度学习在传统中医中,“望闻问切”是诊断的第一步。其中,“望”诊(观察面色、手掌色泽等)蕴含了丰富的生理信息。随着 AI 技术的发展,利用 Computer Vision (CV) 对人体特征进行…

作者头像 李华
网站建设 2025/12/21 12:58:19

Langchain-Chatchat本地知识库问答系统实战:如何用开源模型构建企业AI助手

Langchain-Chatchat本地知识库问答系统实战:如何用开源模型构建企业AI助手 在金融、医疗和法律等行业,数据敏感性极高,将内部文档上传至公有云大模型几乎等同于“裸奔”。然而,这些行业恰恰最需要智能化工具来提升效率——员工每天…

作者头像 李华