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

数据结构与程序设计(王丽苹)23hash函数.pptVIP

数据结构与程序设计(王丽苹)23hash函数.ppt

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

Result*数据结构与程序设计*Key:3Theother:201Key:0Theother:02链地址法*数据结构与程序设计*拉链法解决哈希冲突的思想是将所有具有相同哈希地址的关键字连接成一个单链表。设给定元素的关键码为key,首先根据散列函数h计算出h(key),即确定是在第h(key)条链表中,然后在该链表中进行插入、删除及检索操作。设基本区域长度为m,使用拉链法需要建立m条链表,所有散列地址相同的元素存放在同一条链表中。已知关键码集合K={18,73,10,5,68,99,27,41,51,32,25},m取13,设散列函数为h(key)=key%13,用拉链法得到的散列表如下图所示。*数据结构与程序设计*数据结构与程序设计(23)

Chapter099.6Hashing函数王丽苹哈希函数*数据结构与程序设计*满足上述存储关系的表为Hash表。关键字在整个Hash表中必须要唯一。04Hash函数输出为:存储位置05顺序查找和二分查找都是建立在“比较”的基础上,所要查找的关键字与存贮地址之间无确定的关系,故查找的效率决定于查找中比较的次数。01Hash函数输入为:关键字03如果能找到一种函数,对应于每个关键字,都能唯一确定一个存贮地址,那么在查找时,只要根据给定的关键字用该函数进行计算后即可直接取得该关键字所在记录的存贮地址,从而获得待查记录。这个思想就是哈希查找的思想,相应地称这种函数为哈希函数。02哈希函数*数据结构与程序设计*建立哈希函数带有极强的技术性和经验性,下面简单介绍几种常用方法。直接哈希函数直接哈希函数是直接取关键字或关键字的某个线性函数作为哈希函数,其特点是关键字与哈希地址之间是一对一的关系,因此不会发生冲突,但它的空间浪费严重,因为在大多数情况下,由哈希函数计算出来的地址不是连续的。例如,对参加某一活动的同学进行登记,关键字为学生的学号,哈希函数为H(key)=key。哈希函数*数据结构与程序设计*除数取余法这种方法是先找出一个合适的正整数m,取关键字对m的余数作为哈希函数的值,即H(key)=keymodm。为了尽可能避免冲突,一般m取小于存贮区长度的尽可能大的素数。哈希函数*数据结构与程序设计*随机法当关键字的长度不等时,通常采用随机函数法,先选择一个随机函数作为哈希函数,关键字对应的随机函数值即为哈希地址,即H(key)=ran(key)。哈希函数*数据结构与程序设计*在哈希表的建表过程中,若对于某个哈希函数H(k),若有两个或两个以上的关键字映射的哈希地址相同,即H(key1)=H(key2)(key1≠key2),则发生冲突。在前一节提到过,选择哈希函数时应选择均匀的,冲突较少的。但在大多数情况下,冲突是不可避免的,因此选择哈希函数和解决冲突是哈希查找中两个主要研究内容。常用的处理冲突的方法有开放地址法和链地址法。开放地址法*数据结构与程序设计*开放地址法解决哈希冲突的思想是,将整个哈希地址区看成一个环形表,当冲突发生时,根据某种解决冲突的方法,为发生冲突的关键字找出一个“空”的地址单元作为该关键字的哈希地址。若插入元素,则碰到空的地址单元就存放要插入的同义词。若检索元素,则需要碰到空的地址单元后,才能说明表中没有待查的元素(检索失败)。开放地址法*数据结构与程序设计*用开地址法解决冲突的方法讨论:用线性探测法:即将基本存储区看作一个循环表。若在地址为d=h(key)的单元发生碰撞,则依次探查下述地址单元∶d+1,d+2,…,m-1,0,1,…,d-1(m为基本存储区的长度)直到找到一个空单元或查找到关键码为key的元素为止。如果从单元d开始探查,查找一遍后,又回到地址d,则表示基本存储区已经溢出。可能会造成“堆积”。例子:已知关键码集合K={18,73,10,5,68,99,27,41,51,32,25},设散列表基本区域用数组element表示,大小为m(m=13),散列函数为h(key)=key%13,用线性探查法解决碰撞。按散列函数d=key%13计算每个元素的散列地址如下:h(18)=5, h(73)=8, h(10)=10, h(5)=5, h(68)=3, h(99)=8h(27)=1, h(41)=2,h(51)=12, h(32)=6, h(25)=12最后的散列表为:开放地址法用开地址法解决冲突的方法讨论:(2)平方探测法我们可以改变增量的形式,如发生冲突时,检测H(key)±

文档评论(0)

136****0775 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档