- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Data Structures and Algorithms with Java Chapter 11 Hash Tables 哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展。某些哈希表被填满后,性能下降非常严重,所以程序员必须要清楚表中将要存储多少数据,或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程。 如果不需要有序遍历数据项,并且可以提前预测数据量的大小,那么哈希表在速度和易用性方面是无与伦比的。 本章重点内容 ① 哈希化简介 本节将要介绍哈希表和哈希化。其中一个重要的概念是如何把关键字转化为数组下标。在哈希表中,这个转换通过哈希函数来完成。 然而,对于特定的关键字,并不需要哈希函数;关键字的值可以直接用于数组下标。 例如:雇员号码作为关键字 方法二:幂的连乘 ② 开放地址法 线性探测法 在线性探测中,线性地查找空白单元。如果5421是要插入的位置,它已经被占用了,那么就是用5422,然后是5423,依此类推,数组下标一直递增,知道找到空位。这就叫线性探测,因为它沿着数组的下标一步一步顺序地查找空白单元。 线性探测的Java代码 hash.java程序 二次探测法 前面已经看到,在开放地址法的线性探测中会发生聚集。一旦聚集形成,它会变得越来越大,那些哈希化后的落在聚集范围内的数据项,都要一步一步移动,并且插在聚集的最后,因此使聚集变得更大。聚集越大,它增长得也就越快。如“人群看热闹” 二次探测是防止聚集产生的一种尝试。思想是:探测间隔较远的单元,而不是和原始位置相邻的单元。 在线性探测中,如果哈希函数计算的原始下标为x: △线性探测依次探测空间中x+1, x+2, x+3位置,依次类推; △而二次探测,探测过程为x+12, x+22, x+32, x+42, x+52,依此类推。 二次探测的问题 二次探测消除了在线性探测中产生的聚集问题,这种聚集叫“原始聚集” 。然而,二次聚集产生了另外一种更细的聚集问题。因为所有映射到同一个位置的关键字在寻找空位时,探测的单元都是一样的。 比如将184,302,420和544依次插入到表中,它们都映射到了7.那么302需要一步步长的探测,420需要4为步长的探测,544需要9为步长的探测。只要有一项,其关键字映射到7,就需要更长步长的探测,这种现象叫二次聚集。 再哈希法 为了消除原始聚集和二次聚集,可以使用另外一种方法:再哈希法。二次聚集产生的原因是,二次探测的算法产生的探测步长总是固定为1,4,9,16,依此类推。 如果探测序列的选择依赖关键字,而不是每个关键字都一样,那么,不同的关键字即使映射到相同的数组下标,也可以使用不同的探测序列。方法是把关键字用不同的哈希函数再做一遍哈希化,用这个结果作为步长。对于指定的关键字,步长在整个探测中是不变的,不同的关键字步长不一样。 ③ 链地址法 开放地址法中,通过在哈希表中再寻找一个空位解决冲突问题。 另一种方式是在哈希表每个单元中设置链表。某个数据项的关键字值还是像通常一样映射到哈希表的单元,而数据项本身插入到这个单元的链表中。 JAVA CODE FOR SEPARATE CHAINING ④ 哈希函数 快速的计算 好的哈希函数很简单,所以它能快速计算。哈希表的主要优点是它的速度。如果哈希函数运行缓慢,速度就会降低。哈希函数中乘法和除法是不可取的。 哈希函数的目的是得到关键值的范围,把它用一种方式转化成数组的下标值,这种方法应该使关键字值随机地分布在整个哈希表中。关键字可能完全随机,但也有可能不那么完全随机。 随机关键字 所谓完美的哈希函数把每个关键字都映射到表中不同的位置。但关键字值范围足够小,可以直接用于数组下标;大多数情况下,哈希函数需要将较大的关键字值范围压缩成较小的数组下标范围。 如果数据随机分布,那么直接利用如下哈希函数: index = key % arraySize; 由于关键字随机,计算得到的下标也将是随机的,他们在数组中将会有良好的分布。 非随机关键字 然而,数据通常不是随机分布的。假设数据库使用汽车零件号码作为关键字。也许号码形式为033-400-03-94-05-0-535。 数字含义: 0-2位: 厂商号码(1到999, 目前最大为70) 3-5位: 分类代号(100,150,200,250,一直到 850) 6-7位: 引进的月份(1到12) 8-9位: 引进的年份(00到99) 10-11位: 序列号(1到99,但不超过100) 12位:是否有毒标志(0 or 1) 1
您可能关注的文档
最近下载
- 三年级上册数学应用题专项训练.pdf VIP
- 现代幼儿教师实用英语口语 (10)字母教学.pptx VIP
- 1.2.3多细胞生物教学设计 (表格式)苏教版生物七年级上册.docx VIP
- 《生物化学》考研查锡良版2025年配套名校考研真题库.pdf VIP
- 110KV升压站工程施工组织设计.pdf VIP
- 高职院校产教融合、校企合作项目质量评价体系构建的探索.docx VIP
- 2025年山东省公安机关公务员录用考试模拟试卷.docx VIP
- 2025北京师范大学校医院事业编医生岗招聘2人笔试模拟试题及答案解析.docx VIP
- 2025ADA血糖管理指南解读.pptx VIP
- 音乐鉴赏:音乐基础知识PPT教学课件.pptx VIP
原创力文档


文档评论(0)