信管第八章 查找.ppt

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

构成的表如下所示: 把记录按地址存放到文件空间中相应的位置上,就形成了哈希表,也称散列表。 构成哈希表的过程称为地址散列。 冲突(Collision):若某个散列函数对于不同的关键字key1和key2,得到相同的散列地址,这种现象称为冲突,这两个具有相同函数值的关键字称为同义词(synonym)。 如上例Refman、Rambo。 这时就需要想办法处理冲突,使得每个关键字都能找到合理的位置。解决冲突即为对应到同一地址的多个同义词安排存储位置。因此在选定散列函数时应该考虑尽量避免发生冲突。 如何避免冲突发生,则取决于哈希函数的构造。好的哈希函数,应使散列地址均匀地分布在哈希表的整个地址区间内,这样可以避免或减少发生冲突。 然而,这并非是件容易做到的事。哈希函数的构造,与关键字的长度、哈希表的大小、关键字的实际取值状况等许多因素有关,而且有的因素事前不能确定(如关键字的实际取值只知道范围)。哈希函数的构造或多或少带有杂凑的意味,英文单词hash一词就是杂凑的意思。 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 8.4.2 构造哈希函数的常用方法 1、直接定址法(immediately allocate method) 取关键字或关键字的某个线性函数值为哈希地址。即:H(key)=key或H(key)=a·key+b 其中a和b为常数。 例如:有一个1岁到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。 此法仅适合于: 地址集合的大小 = = 关键字集合的大小 2、 数字分析法(digital analysis method)   假设关键字是以R为基的数(如2,8,10等),并且哈希表中可能出现的关键字都是事先知道的,则可以取关键字的若干数位来组成哈希地址,这就是数字分析法。 这种方法适合于关键字值中各位字符分布为已知的情况。 例如:有80个记录,关键字为8位10进制数,则可取其中两位数作为哈希地址。 原则是使得到的哈希地址尽量避免产生冲突,则需从分析这80个关键字着手,下面是一部分数字: ① 由于中间的四位近乎随机,可取中间4位中的任意两位。 ② 或取其中两位与另外两位的叠加求和后舍去进位。 3、 平方取中法(mid-square method) 有时一组关键字在每一位上某些数字的重复出现频率很高,例如:(0100,1100,1200,1160,2060,2163,2261,2262),这时无法是用数字分析法得到较均匀的哈希函数。 平方取中法是首先求关键字的平方值,通过平方来扩大差别,然后再选其中的几位或其组合作为哈希地址。 该方法适用于关键字位数少而相同的位数多的关键字。 4、折叠法(folding method) 有时关键字含位数较多,这时可将关键字值从某些地方断开,分成几段,其中一段的长度等于地址的位数,把其余折叠加到它的上面,若产生进位则舍去。有两种折叠方法(folding): 间接叠加 (folding at the boundaries) 移位叠加(shift folding) 1、间接叠加:从一端沿分割界来回折送,然后对齐相加 此法适于关键字的数字位数特别多。 2、移位叠加:将分割后的几部分低位对齐相加 5、 除留余数法(division method) 除留余数法是用模运算(%)得到的。设给出的关键字值为K,存储区单元数为m,则用一个小于m的质数P去除K,得到的余数为R,即:R=K%P,如果R落在存储区地址范围内,则R就取为哈希函数值(散列地址);否则,再用一个线性函数求出哈希函数值。 一般取p为不大于m的最大素数。 例如:有一组关键字从000001到859999,指定的存储区地址为1000000~1005999,即m=6000,可选P=5999。 因R不在指定的地址范围内,所以取哈希函数为 H(K)=1000000+R 故有: H(K)=H(172148)=1004176 这样就把关键字K直接转换成存储地址了。 若转换关键字K=172148,则有 R=172148 % 5999=4176。 理论分析和试验结果均证明P应取小于存储区容量的素数。 6、随机数法(random number method) 选择一随机函数,取关键字的随机函数值作为它的哈希地址。 即:H(key)=random(key)。 当关键字长度不相等时,可以采用此方法。 选取哈希函数时需

文档评论(0)

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

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

1亿VIP精品文档

相关文档