数据结构第9章-3.ppt

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

9.3.3 处理冲突的方法 9.3.4 哈希表的查找及分析 一.哈希表的查找 查找过程和建立哈希表的过程基本一致。 (1) 计算哈希地址。 (2) 相应地址上没有记录,则查找不成功。 (3) 相应地址上有记录,则比较关键字, ①若和给定值相等,则查找成功。 ②不相等,则根据造表时设定的处理冲突的 方法找“下一地址”,直到哈希表中某个位置 为空或者表中的关键字与给定值相同为止。 * * * * 哈希表的基本思想: “一次”查找成功。 关键字集合 映射函数 H 地址空间 H(key) ASL的T(n)=O(1)。 通常设定一个一维数组空间存储记录集合,则H(key)指示数组中的下标。 称这个一维数组为哈希(Hash)表或散列表。 称映射函数 H 为哈希函数。 H(key)为哈希地址 9.3.1 什么是哈希表 一、直接地址法 取关键字或关键字的某个线性函数值为哈希地址 即: H(key) = key 或: H(key) = a* key + b 其中,a, b为常数。 假设关键字集合中的每个关键字都是由 s 位数字组成 (u1, u2, …, us),分析关键字集中的全体, 并从中提取分布均匀的若干位或它们的组合作为地址。 二、数字分析法 四 、折叠法 将关键字分割成位数相同的几部分,然后将这几部分叠加,舍去进位作为哈希地址。 移位叠加:将分割之后的每一部分的最低位对齐,然后相加。 间界叠加:从一端向令一端沿分割界来回折叠,然后相加。 三、平方取中法 将k平方后的中间几位取为哈希地址。位数由表长决定 五、 除留余数法 当关键字k为整数时,用关键字除以一个整数p 所得余数作为哈希的地址。 H(key) = key % p 设hash表的长度为m,冲突是指 j=H(K) 的位置已有记录,(0≤j≤m-1) “处理冲突”—— 为K另找一个“空”的地址。 一. 开放地址法: 哈希表的存储结构: typedef struct { KeyType key; //关键字成员 … ; //其它成员 } elemtype typedef elemtype hashtable[m] ; 利用下面的公式求“下一个”地址。 Hi = (H(key) + di ) % m, di是增量序列, (i=1,2,…,k,且k≤m-1) 根据d 的取值不同,开放地址法又可分为: (Ⅰ)线性探测再散列: di = 1,2,3, … ,m-1 (Ⅱ)二次探测再散列: di = 12,-12,22,-22,…,?k2 此时:Hi = (H(key) +m+ di ) % m, (Ⅲ)随机探测再散列 di = 伪随机序列 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 例如: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 } 设定哈希函数 :H(key) = key % 11 (表长=11) 19 1 01 1 23 2 14 1 55 1 68 3 19 1 01 1 23 2 14 1 68 4 若采用线性探测再散列处理冲突 若采用二次探测再散列处理冲突 11 6 82 2 36 5 55 1 11 3 82 1 36 2 在查找概率相同的情况下, 查找成功时的ASL ASLsucc =(1*4+2*2+3+5+6)/9 =22/9 查找不成功时的ASL ASLunsucc=(9+8+7+6+5+4+3+2+1)/11=56/11 若采用线性探测再散列处理冲突 0 1 2 3 4 5 6 7 8 9 10 19 1 01 1 23 2 14 1 55 1 68 3 11 6 82 2 36 5 平均查找长度ASL: 在查找概率相同的情况下, 查找成功时的ASL ASLsucc =(1*5+2*2+3+4) /9 =16/9 查找不成功时的ASL ASLunsucc=( )/11 = /11 若采用二次探测再散列处理冲突 0 1 2 3

文档评论(0)

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

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

1亿VIP精品文档

相关文档