考研辅导-查找课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
以关键字的平方值的中间几位作为存储地址。平方值的中间各位能受到整个关键字中各位的影响,区分度通常较好 3. 平方取中法 适用场合:事先不知道关键字情况,或者关键字各位上都有某些数字重复多次出现.较常用 如2061^2=4310541, 2161^2=4734741,H(2061)=310 将关键字分割成位数相同的若干部分(最后一部分可不同),然后取它们的叠加和为哈希地址。叠加方法:移位叠加(低位对齐相加,后舍弃越界位)和间界叠加(来回折叠取值,后对其相加) 4. 折叠法 适用场合:关键字的数字位数特别多,且每一位上数字分布均匀 如ISBN号0-442-20586-4,每4位一块,则移位叠加即5864+4220+04=10088,H(key)=0088;间界叠加为5864+0224+04=6092,H(key)=6092 5. 除留余数法(最常用) H(key) = key MOD p 其中p最好为素数,或者至少不包含20 以下的质因子 例:给定一组关键字为:12, 39, 18, 24, 33,21;若取 p=9, 则他们对应的哈希函数值为:3, 3, 0, 6, 6, 3;若p=11则为1,6,7,2,0,10 如p=9时因p中含质因子3,所有含质因子 3 的关键字均映射到编号为“3 的倍数”的地址上,从而增加了“冲突”的可能。 6.随机数法 H(key) = Random(key),random()为伪随机函数 此方法用于对长度不等的关键字构造哈希函数。 处理冲突:为产生冲突的元素寻找另外一个地址 1. 开放定址法 2.再哈希法 3. 链地址法 4.公共溢出区 三、处理冲突的方法 产生冲突时加一个增量di : H0 = H(key);Hi = ( H0+ di ) MOD m 直到Hs处无冲突。其中m为表长; 增量序列di三种取法: di={1,2,3,…,m-1} 线性探测再散列 di={12,-12,22,-22,32,…,±k2}二次探测再散列 di=伪随机数序列 伪随机探测再散列 1. 开放定址法 Hash造表举例{19, 01,23,14,55,68,11,82,36 } 设定哈希函数H(key) =key MOD 11 (表长=11 ) 19 01 23 14 55 68 19 01 23 14 68 若采用线性探测再散列处理冲突 若采用二次探测再散列处理冲突 11 82 36 55 11 82 36 di的选择应使产生的Hi 均不相同,且所产生的 Hi 值能覆盖哈希表中所有地址,线性探测再散列肯定能满足这两个性质,对于平方探测法则要求表长 m 必为形如 4j+3 的素数(如: 7, 11, 19, 23, … 等)。线性探测再散列的过程中容易产生二次聚集 注意:增量 di 应具有“完备性” 设计多个hash函数,在产生冲突时计算另一个哈希函数地址,直到冲突不再发生。不易聚集,但增加了计算时间 2. 再哈希法 设计指针数组,每个指针指向一个链表,哈希地址为i的记录放入i号链表中 3. 链地址法: 0 1 2 3 4 5 6 14 01 36 19 82 23 11 68 55 ? ? ? ? ? ? ? ASL=(6×1+2×2+3)/9=13/9 H(key)=key MOD 7 { 19, 01, 23, 14, 55, 68, 11, 82, 36 } 4、公共溢出区:一旦发生冲突即填入公共溢出区 查找过程和造表过程一致。比如采用开放定址处理冲突,则查找过程为: 对于给定值 K, 计算哈希地址 i = Hash(K) 若 H[i] == NULL 则查找不成功 否则,若 H[i].key = K 则查找成功 否则 { 据冲突处理方法定位下一地址 Hi } 直至H[i] = NULL或H[i].key=K 为止。 四、哈希表的查找及性能分析 例:查找{19,01,23,14,55,68,11,82,36 }中11 设定哈希函数H(key) =key MOD 11 (表长=11 ) 若采用线性探测再散列处理冲突 19 01 23 14 55 68 19 01 23 14 68 若采用二次探测再散列处理冲突 11 82 36 55 11 82 36 1 1 2 1 3 6 2 5 1 思考:等概率查找成功时的平均查找长度如何求?查找失败时平均查找长度是多少? 再例:链地址法解决冲突 0 1 2 3 4 5 6 14 01 36 19 82 23 11 68 55 ? ? ? ? ? ? ? 成功:ASL=(6×1+2×2+3)/9=13

文档评论(0)

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

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

1亿VIP精品文档

相关文档