第9章查找--2.pptVIP

  1. 1、本文档共51页,可阅读全部内容。
  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文档。上传文档
查看更多
第9章查找--2

第8章 查找/检索 (Search) 目录 §8.0 查找概述 §8.1 静态查找表 §8.2 动态查找表 §8.3 散列表(哈希表) §8.3 散列表(哈希表) 8.3.1 哈希表的概念 8.3.2 哈希函数的构造 8.3.3 处理冲突的方法 8.3.1哈希表的概念(hash) 一种基于计算的存储技术和查找技术: Address(Ri)=H(Ri.key) 其中,函数H( )称为哈希函数; 建立查找表时,每个元素按哈希函数算出的地址H(Ri.key)去存放; 检索时,按H(K)算出地址,找目标元素。 哈希函数是一种映象----从关键字空间到存储地址空间的映象。 哈希表的定义: 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为纪录在表中的存储位置,这种表便称为哈希表;这一映像过程称为哈希造表或散列;所得存储位置称哈希地址或散列地址。 哈希表的存储结构: 用一维数组HT[m]存放n个元素: 哈希表需要解决的两个问题: 1. 哈希函数H( )的构造: 2. 解决冲突问题: 冲突:H(K1)==H(K2), 且K1?K2 不同的记录争夺同一个哈希地址; K1与K2称为同义词 §8.3 散列表(哈希表) 8.3.1 哈希表的概念 8.3.2 哈希函数的构造 8.3.3 处理冲突的方法 构造散列函数时的几点要求: 散列函数的定义域必须包括需要存储的全部关键码;散列函数的值域必须在 0到m-1 之间(m是散列表的容量)。 散列函数计算出来的地址应均匀分布在整个地址空间中:若 key是从关键字集合中随机抽取的一个关键字,散列函数应能以同等概率取0到m-1 中的每一个值。 散列函数应是简单的,能在较短的时间内计算出结果。 8.3.2 哈希函数的构造 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 一、直接定址法 用关键字的线性函数作为哈希函数: H(k)= a×k+b a,b----常数 举例:学生档案,地址空间: 000..999 H(k)=k 二、数字选择法 三、平方取中法 对数字选择法的改进 将关键字平方,取中间的几位作为哈希地址。这样,哈希地址与关键字的每一位都相关。 四、折叠法 适合于长关键字 K=5 8 2 4 2 3 2 4 1 6 9 五、除留余数法 最简单、最常用的一种方法; H(K) = K mod p (p≤m) 除数p的选择不当将会导致很多同义词出现; 当m较小时,取p为小于等于m的最大质数; 当m较大时,取p为质因子不小于20的合数 。 六、随机数法 选一个伪随机函数,取关键字的伪随机函数值作为哈希地址 H(K) = random(K) 一般当关键字长短不一时采用 §8.3 散列表(哈希表) 8.3.1 哈希表的概念 8.3.2 哈希函数的构造 8.3.3 处理冲突的方法 开放定址法 拉链法 再哈希法 建公共溢出区法 解决冲突的方法: 一、 开放定址法 二、 拉链法 三、 再哈希法 四、 建公共溢出区法 一、开放定址法 “开放”----哈希地址为h的单元不仅向哈希函数值等于h的同义词开放,而且向哈希函数值不等于h的记录开放。以“抢占”的方式争取哈希地址。 探测序列: Hi=(H(key)+di) mod m i=1,2,...,k(k=m-1) H(key)---hash函数值 di ---增量序列 m ---哈希表的容量 增量di的三种取法: (1)线性探测再散列 di=1,2,3,…,m-1 (2)二次探测再散列 di=12,-12,22,-22,…,k2,-k2 (k≤m/2) 特别注意:要求表长m为形如4*j+3的素数 (3)伪随机探测再散列 di=伪随机数序列, 说明: 如果Hi=m,则Hi=Hi-m*n; 其中n为整数 如果Hi0, 则Hi=Hi+m*n; 其中n为整数 举例,已知关键字序列: 26,36,41,38,44,15,68,12,06,51,25 用除留余数法构造哈希函数,线性探测法解决冲突。①建哈希表;②求查找成功和失败的ASL。 解: n=11 取α=0.75, m = ?n/α? =15 哈希函数:H(key)

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档