第8的章 查找技术.ppt

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

散列函数为: H(key)=key mod p 散列函数——除留余数法 14 7 0 14 7 0 14 散列地址 56 49 42 35 28 21 14 关键码 如何选取合适的 p,产生较少同义词? 例: p =21=3×7 8.4 散列表的查找技术 散列函数——除留余数法 一般情况下,选p为小于或等于表长(最好接近表长)的最小素数或不包含小于20质因子的合数。 除留余数法是一种最简单、也是最常用的构造散列函数的方法,并且不要求事先知道关键码的分布。 适用情况? 8.4 散列表的查找技术 根据关键码在各个位上的分布情况,选取分布比较均匀的若干位组成散列地址。 例:关键码为8位十进制数,散列地址为2位十进制数 8 1 3 4 6 5 3 2 8 1 3 7 2 2 4 2 8 1 3 8 7 4 2 2 8 1 3 0 1 3 6 7 8 1 3 2 2 8 1 7 8 1 3 3 8 9 6 7 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 散列函数——数字分析法 8.4 散列表的查找技术 适用情况: 能预先估计出全部关键码的每一位上各种数字出现的频度,不同的关键码集合需要重新分析。 散列函数——数字分析法 8.4 散列表的查找技术 对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。 散列函数——平方取中法 事先不知道关键码的分布且关键码的位数不是很大。 适用情况: 例:散列地址为2位,则关键码123的散列地址为: (1234)2=1522756 8.4 散列表的查找技术 将关键码从左到右分割成位数相等的几部分,将这几部分叠加求和,取后几位作为散列地址。 散列函数——折叠法 例:设关键码为2 5 3 4 6 3 5 8 7 0 5,散列地址为三位。 2 5 3 4 6 3 5 8 7 + 0 5 ─── 1 3 0 8 移位叠加 2 5 3 3 6 4 5 8 7 + 5 0 ─── 1 2 5 4 间界叠加 适用情况: 关键码位数很多,事先不知道关键码的分布。 8.4 散列表的查找技术 处理冲突的方法——开放定址法 由关键码得到的散列地址一旦产生了冲突,就去寻找下一个空的散列地址,并将记录存入。 如何寻找下一个空的散列地址? (1)线性探测法 (2)二次探测法 (3)随机探测法 8.4 散列表的查找技术 线性探测法 当发生冲突时,从冲突位置的下一个位置起,依次寻找空的散列地址。 对于键值key,设H(key)=d,闭散列表的长度为m,则发生冲突时,寻找下一个散列地址的公式为: Hi=(H(key)+di) % m (di=1,2,…,m-1) 用开放定址法处理冲突得到的散列表叫闭散列表。 8.4 散列表的查找技术 例:关键码集合为 {47, 7, 29, 11, 16, 92, 22, 8, 3},散列表表长为11,散列函数为H(key)=key mod 11,用线性探测法处理冲突,则散列表为: 47 7 29 11 16 92 29 22 22 8 8 3 3 3 3 堆积:在处理冲突的过程中出现的非同义词之间对同一个散列地址争夺的现象。 线性探测法 0 1 2 3 4 5 6 7 8 9 10 8.4 散列表的查找技术 在线性探测法构造的散列表中查找算法——伪代码 1. 计算散列地址j; 2. 若ht[j]等于k,则查找成功,返回记录在散列表中的下标; 否则执行第3步; 3. 若ht[j]为空或整个散列表探测一遍,则查找失败,转4; 否则,j指向下一单元,转2; 4. 若整个散列表探测一遍,则表满,抛出溢出异常; 否则,将待查值插入; 8.4 散列表的查找技术 int HashSearch1(int ht[ ], int m, int k) { j = H(k); //计算散列地址 if (ht[j] == k) return j; //没有发生冲突,比较一次查找成功 else if (ht[j] == Empty) {ht[j

文档评论(0)

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

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

1亿VIP精品文档

相关文档