- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构9陈慧南_搜索树_散列
DATA STRUCTURE §8.3.1 散列技术 散列表是表示集合和字典的另一种有效方法。它提供了一种完全不同的存储和搜索方式:通过将关键字值映射到表中某个位置上来存储元素,而后根据关键字值直接访问。 Loc(key)=h(key) 其中,Loc(key)表示关键字值为key的元素的存储位置。 (1)这个把关键字值映射到位置的函数h称为散列函数; (2)这样建立的表称为散列表。 h(key) DATA STRUCTURE §8.3.1 散列技术 冲突和同义词 建立全国省、市、自治区的人口统计简表。 h(Hebei)=h(Henan)=h(Hubei)=h(Hunan)=8 h(Shandong)= h(Shanxi)= h(Shanghai)= h(Sichuan)=19 所谓冲突,是指对于关键字集合中的两个关键字值Ki和Kj,当Ki≠Kj时,有h(Ki)=h(Kj),h是散列函数。具有相同散列函数值的关键字值,对该散列函数而言称为同义词 。 DATA STRUCTURE §8.3.1 散列技术 冲突是不可避免的 例1:关键字值集合有31个元素,如果我们选择一个有40个元素的记录数组的散列表,也就是说散列地址的范围从0到39。 存在4031种可能的函数关系。 对每个变元给出不同的地址 C4031·31!= 40!/ 9!? 1042 而4031 ? 4*1049,所以不同地址函数可能性 1/107 散列函数 DATA STRUCTURE §8.3.2 散列函数 均匀的散列函数 假定散列函数最多可取M个不同的值,即有0≤h(key)M。一个均匀的散列函数应当是:如果key是从关键字值集合中随机选取的一个值,则h(key)以同等概率取区间 [0,M-1]中的每一个值。 “好”的散列函数 一个实用的散列函数h应当满足下列条件: (1)能快速计算; (2)具有均匀性。 DATA STRUCTURE §8.3.2 散列函数 常见的散列函数 (1)除留余数法 除留余数法的散列函数的形式如下: h(key)=key mod M 其中,key是关键字,M是散列表的大小。 【注】mod 是对模数求剩余。设M0,x mod M的值在[0,M-1] 中。 DATA STRUCTURE §8.3.2 散列函数 (2)平方取中法 设关键字用内部码表示,内码采用八进制表示。 字长W=2w,表长M=2k,w=18,k=9。 关键字值内码 内码的平方 散列函数值 0100 0010000 010 1100 1210000 210 1200 1440000 440 DATA STRUCTURE §8.3.2 散列函数 折叠法 key=12320324111220 若散列地址取3位,则key被划分为5段: 123 203 241 112 20 (a)移位法 (b)分界法 DATA STRUCTURE §8.3.2 散列函数 数字分析法 设关键字值是n位数,每位的基数是r。首先应列出关键字值,分析其分布情况。取分布相对均匀的数作为散列函数值。 如图8.4,取第4、5、6位,相对均匀 DATA STRUCTURE §8.3.3 ?拉链法 解决冲突也称为“溢出”处理技术。有两种常用的解决冲突的方法:拉链的方法和开地址法。拉链的方法也称开散列法,而开地址法又称闭散列法。 采用拉链的方法建立散列表,在极端情况下,散列表中全部为同义词,所以,最坏情况下,为了搜索一个关键字值,需检查全部n个元素。一般情况下有n个元素的散列表的链表的平均长度为n/M。 DATA STRUCTURE §8.3.3 ?拉链法 11 Λ Λ Λ : : 33 55 66 Λ 36 69 Λ 16 49 82 Λ 当散列表存在冲突时,用单链表排列 DATA STRUCTURE §8.3.4 ?开地址法 地址h(key)被称为基位置 ,如果该位置已被占用,则采用一种策略去查询其他空位置。 探查表中空闲位置的探查序列形如: h(key),(h(key)+p(1))mod M,?, (h(key)+p(i))mod M, ? ? 根据生成探查序列的规则不同,可以有线性探查法、伪随机探查法、二次探查法和双散列法。 DATA STRUCTURE §8.3.5 ?线性探查法 线性探查法是当 p(i)=i 时的开地址法。 线性探查法使用下列循环探查序列: h(key), h(key)+1,?, M-1, 0, ?,h(key)-1 DATA STRUCTURE §8.3.6 ?其它开地址法 线性探
文档评论(0)