网站大量收购独家精品文档,联系QQ:2885784924

数据结构9-查找b课件.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构9-查找b课件

9.3 哈希(Hash)表和哈希法 采用连续存储单元存储数据元素的查找表有两种: (1)顺序表,对数据元素的存储一般有两种形式: (a) 是按到来次序连续存放,则查找时使用顺序查找法; (b) 二是按关键字的相对关系整理后以递增或递减形式连续存放,则查找时使用顺序查找法和二分查找法。 (2)哈希表:存储数据元素时,利用一个Hash函数根据数据元素的关键字计算出该数据元素的存储位置,查找时,也是根据给定的数据元素的关键字计算出该数据元素可能存储位置,这样一来,存储和查找的效率相当高, 哈希表也称为散列表,其数据元素的存储一般是不连续的。 通过Hash函数计算出的地址称为哈希地址或散列地址。 9.3.1 根据设定的哈希函数H(k)和处理冲突的方法, Hash函数实现的是将一组关键字映象到一个有限的地址区间上, 理想的情况是不同的关键字得到不同的地址。 设K1和K2为关键字, 若K1≠K2,H(K1)=H(K2),则称 K1,K2为同义词,K2与K1为发生了冲突 例 设 H(k)=k%17 k1=5 k2=22 ∵ H(5)=5%17=5 H(22)=22%17=5 H(5)=H(22)=5 ∴ 5和22是同义词,5和22发生冲突 9.3.2 构造哈希函数的方法 1.直接定址法 取关键字或关键字的某个线性函数值为哈希地址 H(key)=key H(key)=a.key+b 例1 人口统计表 例2 学生成绩表 例3 标识符表 2.除留余数法 设哈希表HT[0..m-1]的表长为m,哈希地址为key除以p 所的的余数: H(key)=key MOD p //PASCAL语言 H(key)=key % p //C语言 其中:MOD,%为取模或求余 p=m ,p为接近m的质数(素数), 如: 3,5,7,11,13,17,19,23,29,31,37...... 或不包含小于20的质因子的合数,如:713(=23*31) 例1 设 m=130, 取p=127, H(key)=key % 127 例 设哈希表的地址范围为0~20,哈希函数为H(K)=K % 19 输入关键字序列:39,22,21,37,36,38,19,解决冲突的 方法为线性探测再散列(哈希),构造哈希表HT[0..20]。 例 设哈希表的地址范围为0~20,哈希函数为H(K)=K % 19 输入关键字序列:39,22,21,37,36,38,19,解决冲突的 方法为线性探测再散列(哈希),构造哈希表HT[0..20]。 对于H(k)=k % 19,所有的19a+b为同义词,0≤b≤19 如:5,24,43,62,81,..... 3.平方取中法----取关键字平方后的中间某几位为哈希地址,即: H(k)=取k2的中间某几位数字 4.折叠法 将关键字分割成位数相同的几部分,然后取这几部分的叠加 和作为哈希地址。 4.折叠法 将关键字分割成位数相同的几部分,然后取这几部分的叠加 和作为哈希地址。 5.数字分析法 设哈希表中可能出现的关键字都是事先知道的,则可取关键 字的若干分布均匀的位组成哈希地址。 6.随机数法 H(key)=random(key) random(key)为产生伪随机数的函数 7.灵活构造哈希函数 9.3.3 如何解决冲突 1.开放地址法(开式寻址法) 假定记录Ri,RX的关键字Ki,KX为同义词,散列地址为q,Ri已存 入HT[0..m-1]中的HT[q]中,则RX 存入HT中的某个空位上。 依次在地址q+1,q+2,...,m-1,0,1,...,q-1中寻找一个空 位,叫做线性探测再散列。 (1) 线性探测再散列 课堂练习:设 H(k)=k的首字母在字母表中的序号,用线性探测再 散列法解决冲突,依次用下列关键字,造哈希表 HT[0..28]。 例 设 H(k)=k的首字母在字母表中的序号,用线性探测再散列 法解决冲突,依次用下列关键字,造哈希表HT[0..28]。 (2) 二次探测再散列 假定记录Ri和Rj的关键字Ki和Kj为同义词,散列地址为q, Ri已存入HT[0..m-1]中的HT[q]中。 若依次在地址q+12,q-12,q+22,q-22,...,q+i2,q-i2 ,...中 寻找一个空位,叫做二次

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档