




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、散列 (Hashing) 在线性表、树结构中查找纪录是通过与关键 字的“比较”完成的。 顺序查找,比较的结果为“=”或“” 非顺序查找,比较的结果为“” 散列的思想: 根据纪录的关键字直接找到记录的存储位置, 即为关键字和记录的存储位置建立一个对应f,使每个关键字和结构中一个唯一的 存储位置相对应。 对应关系f为散列函数,按该思想建立的表 为散列表。1 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为纪录在表中的存储位置,这种表便称为哈希表,这一影像过程称为哈希造表或散列,所得存储位置称哈希地址或散列地址。哈希表
2、的定义2散列方法在表项的存储位置与它的关键字之间建立一个确定的对应函数关系Hash( ),使每个关键字与结构中一个唯一存储位置相对应: Address Hash ( Rec.key )在查找时,首先对表项的关键字进行函数计算,把函数值当做表项的存储位置,在结构中按此位置取表项比较。若关键字相等,则查找成功。在存放表项时,依相同函数计算存储位置,并按此位置存放。3构造散列函数时的几点要求: 散列函数的定义域必须包括需要存储的全部关 键码,如果散列表允许有m个地址时,其值域必 须在 0 到 m-1 之间。 散列函数计算出来的地址应能均匀分布在整个 地址空间中:若 key是从关键字集合中随机抽 取的
3、一个关键字,散列函数应能以同等概率取 0到 m-1 中的每一个值。 散列函数应是简单的,能在较短的时间内计算 出结果。哈希函数的构造方法41. 直接定址法 此类函数直接取关键字或关键字的某个线性函数值作为散列地址:Hash ( key ) a * key + b a, b为常数 这类散列函数是一对一的映射,一般不会产生冲突。 但是,它要求散列地址空间的大小与关键字集合的 大小相同。52. 数字分析法 设有n个d位数,每一位可能有r种不同的符号。这 r 种不同的符号在各位上出现的频率不一定相同,可能在某些位上分布均匀些;在某些位上分布不均匀,只有某几种符号经常出现。可根据散列表的大小,选取其中各
4、种符号分布均匀的若干位作为散列地址。6 9 4 2 1 4 8 9 4 1 2 6 9 9 4 0 5 2 7 9 4 1 6 3 0 9 4 1 8 0 5 9 4 1 5 5 8 9 4 2 0 4 7 9 4 0 0 0 1 数字分析法仅适用于事先明确知道表中所有关键字每一位数值的分布情况,它完全依赖于关键字集合。如果换一个关键字集合,选择哪几位要重新决定。73. 平方取中法此方法在词典处理中使用十分广泛。它先计算构成关键字 的标识符的内码的平方,然后按照散列表的大小取中间 的若干位作为散列地址。设标识符可以用一个计算机字长的内码表示。因为内 码平方数的中间几位一般是由标识符所有字符决定
5、, 所以对不同的标识符计算出的散列地址大多不相同, 即使其中有些字符相同。在平方取中法中,一般取散列地址为2的某次幂。例 如,若散列地址总数取为m = 2r,则对内码的平方数 取中间的r位。如果r = 3,所取得的散列地址参看 图的最右一列。84. 折叠法此方法把关键字自左到右分成位数相等的几部分,每一部分的位数应与散列表地址位数相同,只有最后一部分的位数可以短一些。把这些部分的数据叠加起来,就可以得到具有该关键字的记录的散列地址。有两种叠加方法:移位法 把各部分的最后一位对齐相加;分界法 各部分不折断,沿各部分的分界来回折叠,然后对齐相加,将相加的结果当做散列地址。9示例:设给定的关键字为
6、key = 23938587841,若存储空间限定 3 位, 则划分结果为每段 3 位. 上述关键字可划分为 4段: 239 385 878 41把超出地址位数的最高位删去, 仅保留最低的3位,做为可用的散列地址。10一般当关键字的位数很多,而且关键字每一位上数字的分布大致比较均匀时,可用这种方法得到散列地址。115. 除留余数法设散列表中允许的地址数为m,取一个不大于m,但最接近于或等于m的质数p,或选取一个不小于20的质因数的合数作为除数,利用以下公式把关键字转换成散列地址。散列函数为: hash ( key ) = key % pp m其中, “%”是整数除法取余的运算,要求这时的质数p
7、不是接近2的幂。示例:有一个关键字 key = 962148,散列表大小 m = 25,即 HT25。取质数 p= 23。散列函数 hash ( key ) = key % p。则散列地址为:12 hash ( 962148 ) = 962148 % 23 = 12可以按计算出的地址存放记录。需要注意的是,使用上面的散列函数计算出来的地址范围是 0到 22,因此,从23到24这几个散列地址实际上在一开始是不可能用散列函数计算出来的,只可能在处理溢出时达到这些地址。13以上介绍了几种常用的散列函数。在实际工作中应根据关键字的特点,选用适当的方法。有人曾用“轮盘赌”的统计分析方法对它们进行了模拟分
8、析,结论是平方取中法最接近于“随机化”。在应用平方取中法时,若关键字不是整数而是字符串时,可以把每个字符串转换成整数。14转换的方法:把字符串从右向左,按一个固定长度 (例如 4 ) 进行分段,必要时可在最左端添一些空格。把每一个字符看成为一个数字,把字符串的每一段看作为一个整数。如, ASCII码采用7位字符代码,因此每一个字符可以看成一个128进制的数字。字符串abcd看成整数 a*(128)3 + b*(128)2 + c*(128) + d。把字符串的每一段都转换成一个整数后,再把各段转换成的整数加起来。 15如果这个整数之和太大,再选择一个适当的常数C (大于任一段字符串转换成的整数
9、)来除这个和并取其余数,就得到这个字符串所对应的整数了。161. 开放定址法(闭散列)是处理溢出的一种常用的方法Hash函数: Hi = (H(key)+di) MOD m, i=1,2,k(km-1) 其中:H(key)为哈希函数,m为哈希表表长,di为增量序列。 di分别有三种取法: (1) di=1,2,3,m-1 线性探测再散列 (2) di=12,-12,22,-22, k2, -k2,(km/2) 二次探测再散列 特别注意:要求表长m为形如4*j+3的素数 (3) di=伪随机数序列,伪随机探测再散列说明:如果Him,则Hi= Hi- m*n; 其中n为整数如果Hi0, 则Hi= Hi+ m*n; 其中n为整数处理冲突的方法172. 再哈希法(也称双散列法) Hi = R Hi (key)183. 链地址法开散列方法 将所有关键字为同义词的记
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册建筑师专业知识考核试卷(建筑设计与时代特征)
- 非遗传承中的社区参与与文化认同
- 基于模拟医学教育的临床能力培养
- 儿童行为心理学解析
- 创新引领业务前行
- 临产的处理原则及护理措施
- 舞蹈魅力与初中生活
- 出资转让协议书
- 2025授权代理在线直投广告合同模板
- 财务资产管理培训
- 武汉大学研究生毕业论文模板
- 污水厂防汛知识培训课件
- 代建管理制度安徽省
- 2025-2030中国定向能量激光系统行业市场发展趋势与前景展望战略分析研究报告
- 2025年国防教育课件
- 2025年中考英语作文话题终极预测
- 2025辽宁大连长兴控股集团有限公司及所属公司招聘9人笔试参考题库附带答案详解
- 门窗钢副框施工方案
- 家园社协同育人中的矛盾与解决策略
- 出租车租车合同样板
- 《测绘生产成本费用定额》(2025版)
评论
0/150
提交评论