数据结构之检索.ppt

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

* * * * * * * * * * * * * * * * * * * * * * * 检索 */85 算法分析 设散列表的装填因子为 ? = n / (s*m),其中 n 是表中已有的表项个数,s 是每个桶中最多可容纳表项个数,m 是表中的桶数。 可用 ? 表明散列表的装满程度。? 越大,表中表项数越多,表装得越满,发生冲突可能性越大。 通过对线性探查法的分析可知,为搜索一个关键码所需进行的探查次数的期望值 P 大约是 (2-?)/(2-2?)。虽然平均探查次数较小,但在最坏情况下的探查次数会相当大。 检索 */85 (2) 二次探查法 (quadratic probing) 为改善“堆积”问题,减少为完成搜索所需的平均探查次数,可使用二次探查法。 通过某一个散列函数对表项的关键码 x 进行计算,得到桶号,它是一个非负整数。 H0 = hash(x) 二次探查法在表中寻找“下一个”空桶的公式为: Hi = (H0 + i 2 ) % m, Hi = (H0 - i 2 ) % m, i = 1, 2, …, (m-1)/2 式中的 m 是表的大小,它应是一个值为 4k+3 的质数,其中 k 是一个整数。这样的质数如 3, 7, 11, 19, 23, 31, 43, 59, 127, 251, 503, 1019, …。 检索 */85 探查序列形如 H0, H0+1, H0-1, H0+4, H0-4, …。 在做 (H0 - i2 ) % m 的运算时,当 H0 - i2 0 时,运算结果也是负数。实际算式可改为 j = (H0 - i2 ) % m, while ( j 0 ) j += m 示例:给出一组关键码 { Burke, Ekers, Broad, Blum, Attlee, Alton, Hecht, Ederly }。 散列函数为:Hash (x)=ord (x)-ord (A) 用它计算可得 Hash (Burke) = 1 Hash (Ekers) = 4 Hash (Broad) = 1 Hash (Blum) = 1 Hash (Attlee) = 0 Hash (Hecht) = 7 Hash (Alton) = 0 Hash (Ederly) = 4 检索 */85 因为可能桶号是 0 ? 25, 取满足 4k+3 的质数,表的长度为TableSize = 31,利用二次探查法得到的散列结果如图所示。 0 1 2 3 4 5 Blum Burke Broad Ekers Ederly Hecht 6 7 8 9 10 11 Alton Attlee (3) (1) (2) (1) (2) (1) 25 26 27 28 29 30 (5) (3) 利用二次探查法处理溢出 检索 */85 使用二次探查法处理溢出时的搜索成功的平均搜索长度为: 搜索不成功的平均搜索长度为: 检索 */85 相减,可以得到: 从而 设散列表桶数为 m,待查表项关键码为 x,第一次通过散列函数计算出来的桶号为 H0=hash(x)。当发生冲突时,第 i-1 次和第 i 次计算出来的“下 一个”桶号分别为: 检索 */85 (3)随机探查法(伪随机探查) 理想的探查函数应当在探查序列中随机地从未访问过的空桶中选择下一个位置,即探查序列应当是散列表位置的一个随机序列。 但是,实际上不能随机地从探查序列中选择一个位置,因为在检

文档评论(0)

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

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

1亿VIP精品文档

相关文档