作业散列法实验研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作业散列法实验研究

课程设计题目 1. 具体要求 散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响Hashing)在表项的存储位置与它的关键码之间建立一个确定的对应函数关系Hash(),以使每个关键码与结构中的唯一存储位置相对应,该关系可用下式表示: Address=Hash(Record.key) 相应的表称为哈希表,这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,使得p=H(k),H称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为H(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=H(k),从而达到按关键字直接存取元素的目的。 哈希函数是一个映象,哈希函数的设定灵活,只要使得任何关键字所得的哈希函数值都落在表长范围之内即可。 当关键字集合很大时,关键字值不同的元素可能会映象到哈希表的同一地址上,即 k1≠k2,但H(k1)=H(k2),这种现象称为冲突,此时称k1和k2为同义词。实际中,冲突是不可避免的,只能通过改进哈希函数的性能来减少冲突。  综上所述,哈希法主要包括以下两方面的内容:  (1) 如何构造哈希函数; (2) 如何处理冲突。 4. 数据结构与算法描述 一、散列函数 通常,构造散列函数应该注意的几个问题包括:首先,散列函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址,其值域必须在1~m-1之间;其次,散列函数计算出来的地址应能均匀分布在整个地址空间中;再次,散列函数应当是尽量简单的。 (1)直接定址法 直接定址法蓝颜元素关键码的某个线性函数值作为该元素的散列地址(散列地址,即元素最终在字典中的存储位置)。如下面的函数式: Hash(key)=a×key+b 式中,a,b为常数。采用该种方法,当向字典中加入某一新元素时算法自动调用此函数,以确定该元素最终的存储位置。若某元素关键码key为1,上式中,a=2,b=3则该元素最终会存储在字典第5个位置中。 直接定址法的优点是实现方法简单,算法时间复杂度较小,而且不会产生冲突。但是,直接定址法要求散列地址空间的大小与关键码集合的大小一致,而这种要求是苛刻的,一般很难实现。例如当关键码的范围为1~1000000时,元素散列地址的个数也要达到1000000。这么大的散列地址是不合实际的。 (2)除留余数法 设散列表中允许的地址数为m,取一个不大于m,但最接近或等于m的质数k,或选取一个不含有小于20的质因子的合数作为除数。利用下面的式子计算元素的散列地址的方法称为除留余数法。 Hash(key)=key%k,k≤m 其中,“%”是整数除余法取余的运算,要求这时的质数不是接近2的幂。例如,当元素的关键码key为2008,散列地址总数为50,这时取k=47,则散列地址为Hash(2008)=2008%47=34,所以运算将存储在字典第47个位置中。 除留余数法将有效缩减散列地址空间的大小,例如上例散列地址空间中只有50个有效的散列地址。除留余数法的缺点是极易发生冲突,如关键码为1914的元素经过上述教例函数计算后也将获得散列地址34。此时出现的两个不同元素争用同一存储地址的情况就称为冲突。 (3)平方取中法 平方取中法是一种常用的实现散列函数的方法。 平方取中法是一种先放大再集合的构造方法,这种构造模式先通过求关键字的平方值扩大相近数的差别,然后根据表长度取中间的几位数作为散列函数值,这种取中间数的方法是一种类随机方案,因此也可以认为平方取中法是一种产生伪随机数的方法。因为一个乘积的中间几位数和乘数的每一位都相关,所以有此产生的散列地址较为均匀。 利用平方取中法实现散列函数的过程:首先,利用一定的编码规则把元素的关键码转换成标识符。然后,求出标识符的内码表示并计算内码的平方值。最后,取内码平方数的中间x位作为元素最终的散列地址。简而言之,即先计算构成关键码表示符的内码平方,然后按照散列表的大小取中间的若干位作为散列地址。 在平方取中法中,地址空间内散列地址的数目一般为2的k次幂,并在计算出内码平方的平方后,根据k的大小决定最终散列地址的位数。例如某个地址空间中散列地址的个数为128,则最终取内码平方中间7位作为元素最终的散列地址。 (4)乘余取整法 乘余取整法利用下面的式子计算元素的散列地址。 Hash(key)=[Z×(a×key%1)] 其中,a为一个常数且0a1,Z为一个整数。式a×key%1表示a×key取小数部分,

文档评论(0)

pangzilva + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档