执行查找算法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * 假设散列表的地址空间为0~m-1,使关键字K除以m所得的余数作为散列地址。 散列函数为: H(K)=K % m 该方法的关键是选取m。选取的m应使得散列函数值尽可能与关键字的各位相关。m最好为素数。 【例】有一组关键字4756693334547579, 哈希表的大小是43,则上述键的地址是: 43=143=3243=1743=343=26 9.4 哈希表查找技术——构造哈希函数 2. 除余法 根据哈希表长将关键字分成尽可能分成若干段,然后将这几段的值相加,并将最高位的进位舍去,所得结果即为其哈希地址。相加时有两种方法,一种是顺折,即把每一段中的各位值对齐相加,称之为移位法;另一种是对折,像你折纸条一样,把原来关键字中的数字按照划分的中界向中间段折叠,然后求和,称之为折叠法。 【例】有一组关键字(4766934,5656975,4685637,3547807,7569664),将这些数 拆成2位、4位和1位数,然后再把它们相加,如图11.9所示: 图11.9用折叠移位法构造哈希函数示意图 9.4 哈希表查找技术——构造哈希函数 3. 折叠移位法 9.4 哈希表查找技术——解决哈希冲突方法 1. 开放地址法 用开放定址法解决冲突的做法是:当冲突发生时,按照某种方法探测表中的其他存储单元,直到找到空位置为止。开放地址法很多,本课主要介绍线性探测法。 将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为: ??? d,d+l,d+2,…,m-1,0,1,…,d-1 ???即:探查时从地址d开始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1], 此后又循环到T[0],T[1],…,直到探查到T[d-1]为止。 探查过程终止于三种情况: 若当前探查的单元为空,则表示查找失败(若是插入则将key写入其中); 若当前探查的单元中含有key,则查找成功,但对于插入意味着失败; 若探查到T[d-1]时仍未发现空单元也未找到key,则无论是查找还是插入均意味着失败(此时表满)。 哈希表查找技术——解决哈希冲突方法 2. 开放地址法之线性探测法 将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为: ??? d,d+l,d+2,…,m-1,0,1,…,d-1 ???即:探查时从地址d开始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1], 此后又循环到T[0],T[1],…,直到探查到T[d-1]为止。 探查过程终止于三种情况: 若当前探查的单元为空,则表示查找失败(若是插入则将key写入其中); 若当前探查的单元中含有key,则查找成功,但对于插入意味着失败; 若探查到T[d-1]时仍未发现空单元也未找到key,则无论是查找还是插入均意味着失败(此时表满)。 哈希表查找技术——解决哈希冲突方法 2. 开放地址法之线性探测法 三、处理冲突的方法: 例:散列函数H(K)=K%7,采用线性探测法将下列数据依次插入下表中: 23,34,56,12,8,14,35,25 0 1 2 3 4 7 5 8 6 9 23 1 34 1 56 1 12 1 8 1 14 4 35 5 25 4 假设查找每个元素的概率相同,则: 查找成功的平均查找长度(ASL)= 所有数据放置成功的次数/数据的个数 ASL=(1+1+1+4+5+1+1+4)/8=18/8 9.4 哈希表查找技术——解决哈希冲突方法 三、处理冲突的方法: 用此法来构造散列表会产生非同义词对同一地址的争夺,称之为堆积。 0 1 2 3 4 7 5 8 6 9 23 1 34 1 56 1 12 1 8 1 14 4 35 5 25 4 哈希表查找技术——解决哈希冲突方法 9.4 哈希表查找技术——解决哈希冲突方法 2. 链表法 链表法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的哈希表长度为m,则可将哈希表定义为一个由m个头指针组成的指针数组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在链表法中,装填因子α可以大于1,但一般均取α≤1。 散

文档评论(0)

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

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

1亿VIP精品文档

相关文档