函数(映射).ppt

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

哈希函数主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码里,叫做Hash值。也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。 将记录的关键字K作为自变量,通过哈希函数计算出的值,即为该元素的存储地址。表示为:Addr=H(key)。 (2) 应用 如果在存储位置和关键字之间建立某种直接关系,那么在查找时,就无需做比较,或进行比较的次数非常少。 按照这种关系直接由关键字找到相应的记录,就是哈希表查找的基本思想。 哈希表查找又称杂凑法或散列法。 (3) 哈希表查找 在哈希表中,存在不同的关键字对应到同一个存储位置的现象。均匀的哈希函数可以较少冲突,但不能避免冲突。冲突发生后,必须得到解决;即必须寻找下一个可用地址。 哈希函数的构造 构造哈希函数的方法很多,其原则是: 使哈希地址尽可能均匀地分布在整个地址空间中; 使得用此哈希函数产生的映射所发生冲突的可能性最小; 使计算尽量简单,以节省计算时间。 直接定址法 特点:计算简单,一个关键字对应于一个存储地址,不会产生冲突。这种方法适用于关键字分布连续的情况。 但在实际中,由于关键字集合中的元素很少是连续的,用该方法产生的哈希表会造成空间的浪费。因此,这种方法很少使用。 数字分析法 数字分析法是在预先知道的,可能出现的一组关键字中,每个关键字由n位数字组成,选取数字分布比较均匀的若干位作为哈希地址。 数字位数的选取与哈希表的最大长度有关,也就是与关键字的个数有关。 例如,下面一组关键字,每个关键字由8位十进制数组成。 除留余数法 式中%表示余数运算。用该方法产生的哈希函数的优劣取决于p值的选取。实践证明,当p取最接近于表长的素数时,产生的哈希函数较好。 平方取中法 关键字 关键字的平方数 哈希地址 1654 2 735 716 375 5541 30 702 681 026 1675 2 805 625 056 5341 28 526 281 262 …… …… …… 平方取中法是将关键字平方后的中间几位作为哈希地址。因为一个数的平方数与该数的每一位数都有关,所以所取的位数与表长有关。 折叠法 折叠法是首先把关键字分割成位数相同的数段(最后一段的位数可以少一些),每一段长度的选择与哈希表的表长有关,然后将这几段的叠加和作为哈希地址的方法。 在折叠法中,数位叠加有移位叠加和间界叠加两种方法。 例如:关键字为k=38145603781 折叠法用于关键字位数很多,而且关键字中每一位上的数字分布大致均匀的情况。 解决冲突的方法 无论如何构造哈希函数,在实际应用中冲突是不可避免的。为此,如何解决冲突也是建立哈希表时不可忽视的方面。 冲突是指由关键字得到的哈希地址上已经有了记录,而解决冲突就是为该关键字的记录找到另一个新的哈希地址。 若新地址上也有记录了,则再找另一个新的哈希地址,依次类推,直至找到一个空的地址为止。 1. 开放定址法 所谓开放定址法,就是存储空间中空闲地址向处理冲突开放。在哈希表未满时,处理冲突需要的下一个空地址在存储空间的空闲地址之中解决。 (1) 线性探测法 线性探测法处理冲突容易造成元素的聚集,使探测下一个空闲单元的长度大大增加。造成这种堆积的原因是,探测序列都集中在发生冲突的单元后面,没有在整个哈希表上分散开。为此,引入二次探测法。 (2) 二次探测法 这样使连续两次探测到的单元分别在发生冲突单元的前后两侧,将探测的单元分散开。 (3) 随机探测法 随机探测法是指选择一个随机函数产生随机数序列。 例:已知关键字集合k={18,73,20,5,68,99,27,41,51,32,25},设哈希表长m=13,哈希函数H(k)=k % 13,采用线性探测法处理冲突,构造该哈希表。 为了构造哈希表,首先要计算哈希地址。若地址未被占用,则插入新结点,否则进行线性探测。用线性探测法求下一个地址的方法为: 例:已知哈希表的地址空间为A[0..11],哈希函数H(k)=k mod 11,采用线性探测法处理冲突。请将下列数据{25,16,38,47,79,82,51,39,89,151,231}依次插入到哈希表中。 地址 0 1 2 3 4 5 6 7 8 9 10 11 关键字 比较次数 练习:设输入的关键字序列为:

文档评论(0)

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

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档