计算机软件技术基础10.pptVIP

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机软件技术基础10

* 2.7.6 哈希表技术及其查找 前几节讨论的查找方法都是通过和文件中的关键字进行比较来实现的,且都采用平均查找长度来衡量算法的优劣。由此引出一种想法,即能否有一种方法,不必进行与关键字比较而达到查找目的,这样平均查找长度就为零。哈希表技术正是基于这一设想而产生的。 1.哈希表 哈希查找的基本思想是:通过对给定值作某种运算,直接求得关键字等于给定值的记录在文件中的位置。这就要求在建立文件时,对记录的关键字和它的存储位置之间建立一个确定的对应关系。设关键字key与存储位置间的对应关系为H(key),若用一维数组来存放文件,则H(key)即为数组的下标。我们称函数H为哈希(Hash)函数,H(key)为哈希地址,这个一维数组称为哈希表。 例如以学生姓名为关键字的记录集合{Wang,Li,Zhao,Shen,Gao,Fung,Bai,Chang,Ren,Ma},若采用关键字中第一个字母在字母表中的序号作为哈希函数,则可以构成一个哈希表如图2.74所示。 由上述例子可以看到: (1)由于在建立哈希表时,已把记录的关键字和它的位置之间建立了确定的函数关系,因此在查找时,只需对给定关键字值按哈希函数关系求得记录的存储位置,不需要再和记录关键字进行比较。 (2)一般情况下,哈希表的空间m较记录集合n要大,因此要浪费一部分存储空间,这是为了提高查找效率而付出的代价。我们定义α=n/m为哈希表的装填系数,在实际应用时一般取α=0.65~0.85。 (3)为了求得哈希地址,需要对哈希函数的关键字进行算术或逻辑运算。如果关键字为非数值类型,则可先转化为数值,称为关键字的内部码。而且求得的哈希地址的值域必须在哈希表长的范围内。 (4)若某个哈希函数对不同的关键字得到相同的哈希地址,这种现象称为冲突。例如在上述例子中又增加姓名为{Chen,Wu,Be}三名学生,若仍按原哈希函数求记录地 址,就会发生冲突。为避免冲突产生,就要另选哈希函数。但在实际应用中,绝对没有冲突的哈希函数极少存 在,只能设定冲突尽可能少的哈希函数。而一旦出现冲突 时,就要寻找一种解决冲突的方法。 综上所述,运用哈希技术进行查找,要解决哈希函数 的构造以及解决冲突问题。 2.构造哈希函数的几种方法 构造哈希函数的方法很多,一般应根据实际问题需要,使关键字经过哈希函数转换得到的地址尽可能均匀地分布在整个地址区间中,从而减少冲突。这里介绍几种常用的构造哈希函数的方法。 (1)数字分析法 这种方法适合大的静态数据,即所有关键字值均事先知道,然后检查关键字值中所有数字,分析每一数字是否分布均匀,将不均匀的数字删除,然后根据存储空间的大小来决定数字的数目。例如有7个学生的学号为: 542 42 2241 542 8l 3678 542 22 8171 542 38 9671 542 54 1577 542 88 5376 542 19 3552 从观察可得:在以上7个数中,从左算起第1,2,3位的数值太不均匀,故删去;第8位中数值7出现次数太多,故删去,假设存储空间为1000,则可选取第4,6,7位作为其存储地址,分别为422,836,281,396,5l 5,853,135。 (2)平方取中法 如果一组关键字在每一位上对某些数字的重复频度都很高,用数字分析法就很难得到均匀的哈希函数。平方取中法首先求关键字的平方值,通过平方扩大差别,然后再选取其中几位作为哈希地址。例如一组关键字(0100,1100,1200,1160,2060,2061,2163,226l,2262),设存储空间为1000,将关键字平方后取第2,3,4位构成哈希地址为(010,210,440,345,243,247,678,112,116)。 (3)除留余数法 除留余数法是对关键字取模作为哈希函数,即 H(key)=key mod p 其中p必须是小于或等于表长的质数。 (4)折叠法 折叠法是将关键字值分为几段,除了最后一段外, 其余各段都须等长,然后将各段相加作为哈希地址。在相加时有两种方法: · 移位折叠:将各段向左边靠齐后相加。 · 边界折叠:将奇数字段或偶数字段倒排后相加。

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档