数据结构CH9.ppt

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

数据结构 沈阳大学信息工程学院 齐晓轩 第九章 查找 9.1 静态查找表 9.1.1 顺序表的查找 9.1.2 有序表的查找 9.1.3 索引顺序表的查找 9.2 动态查找表 9.3 哈希表 然而,更多的情况下哈希函数并不是如此简单的,对例2,为了查找方便应以地区作为关键字,假定地区名以汉语拼音表示,此时,要将其转化为数字,构造方法如下: ① 取关键字中的第一个字母在字母表中的序号作为哈希函数,例如,BEIJING的首字母序号为02,故f(BEIJING)=02。 ② 先求关键字的第一个和最后一个字母在字母表中的序号之和,然后判断此和值,大于30则减30,例如TIANJIN的首尾字母“T”和“N”序号之和为34,故f(TIANJIN) = 04。 ③ 先求每个汉字的首拼音字母的ASCII码之和的八进制形式,将其视为十进制数再除以30(若余数为0则加30), 故f(key) = [ (首字母)8 + (尾字母)8]10 MOD 30 例如,HENAN的首尾字母“H”和“N”的ASCII码之和为(226)8,以(226)10除以(30)10得余数16,故f(HENAN) = 16。 16 16 17 23 13 02 26 04 f3(key) 03 22 26 28 28 17 04 09 f2(key) 19 08 19 19 19 08 20 02 f1(key) SICHUAN HENAN SHANGDONG SHANGHAI SHANXI HEBEI TIAN JING BEIJING Key 从前例可见: 哈希函数是一个映像(key → 记录的存储地址),因此可灵活设定,只要使得任一key的哈希函数值落在表长允许范围内即可。 不同的关键字可能得到同一哈希地址,即key1≠key2,但f(key1)=f(key2),此现象成为“冲突”,这两个关键字(对于该哈希函数而言)为“同义词”。 对于第一种哈希函数的情况下,山西、上海、山东、四川这四个记录的哈希地址均为C[19],而C[19]只能存放一个记录,如何存储其余三个记录? 如何选择一个恰当的哈希函数来减少冲突? 哈希函数是从关键字集合到地址集合的映像,一般情况下,是一个压缩映像,因此不可避免地会产生冲突,在造哈希表时一要设定一个“好”的哈希函数,二要设定一种处理冲突的方法。 综前所述,可如下定义哈希表:   根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映象到一个有限的、地址连续的地址集(区间)上,并以关键字在地址集中的“象”作为相应记录在表中的存储位置,这种表被称为“哈希表”,这一映象的过程亦被称为“散列”。 构造哈希函数的方法 若对于关键字集合中的任意一个关键字,经哈希函数映象到地址集合中任何一个地址的概率相等,则称此类哈希函数为均匀的哈希函数。对于数值型关键字,常用的构造均匀的哈希函数的方法有如下几种: 一、直接定址法 取关键字本身或关键字的某个线性函数值作为哈希表的地址。   即 Hash(key)=key 或 Hash(key)=a*key+b (a 和 b 均为常数,此种哈希函数叫做自身函数)。   直接定址所得地址集的大小和关键字集的大小相同,关键字和地址一一对应,决不会产生冲突。但实际应用中能采用直接定址的情况极少。 … … … … 1050 … 5000 2000 3000 人数 100 … 27 26 25 … 3 2 1 年龄 100 … 27 26 25 … 03 02 01 地址 这是一个从1岁到100岁的人口数字数字统计表,其中,年龄作为关键字,哈希函数取关键字自身,因此,若要寻找25岁的人有多少,则只要查表的第25项即可。 二、数字分析法 如果可能出现的关键字的数位相同,且取值事先知道,则可对关键字进行分析,取其中“分布均匀”的若干位或它们的组合作为哈希表的地址。   例如已知80个记录的关键字为8位十进制数(右图列出其中部分),假设哈希表的表长为100,即地址为00~99。由于关键字中的第 1、2、3 和 8 位取值集中在某几个数上,则应取其余四位中的任意两位或其中两位与另两位之叠加和(舍去进位)作为哈希地址。 P254 三、平方取中法 如果关键字的所有各位分布都不均匀,则可取关键字的平方值的中间若干位作为哈希表的地址。由于一个数的平方值的中间几位数受该数所有位影响,将使随机分布的关键字得到的哈希函数值也随机。 四、折叠法 若关键字的位数很多,且每一位上数字分布大致均匀,则可采用移位叠加或间界叠加,即将关键字分成若干部分,然后以它们的叠加和(

文档评论(0)

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

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

1亿VIP精品文档

相关文档