半岛体育- 半岛体育官方网站- APP下载哈希函数构造方法及其适用情况

2025-07-23

  半岛,半岛体育,半岛体育app,半岛官网,半岛电竞,半岛真人,半岛棋牌,半岛体育官网注册,半岛体育官方app下载,半岛体育app下载,半岛体育怎么样,半岛体育官网,半岛体育登录入口,半岛体育官方网站

半岛体育- 半岛体育官方网站- 半岛体育APP下载哈希函数构造方法及其适用情况

  【摘要】哈希表由于其效率的优越性应用范围非常广泛,而哈希表的效率由哈希函数决定。哈希函数的构造方法有很多种,本文介绍了几种常用的构造方法,并分析了这几种方法的优劣及适用范围。

  查找的效率取决于查找过程中必要的比较次数,比较次数越多查找效率就越低,反之,则越高。理想的查找方法是无需比较,一次存取便能找到所查的记录。这就要求记录的关键字和它的存储位置有确定的对应关系,使每个关键字和唯一的存储位置相对应,这样在查找时就可以根据这个对应关系,找出给定关键字记录的存储位置。我们把这种对应关系称为哈希函数,由哈希函数得到的存储地址称为哈希地址,采用这种存储方式的存储结构称为哈希表。哈希函数的构造方法有很多种,下文将逐一探讨。

  取关键字为哈希地址或者取关键字的某个线性函数值为哈希地址。获得地址的公式为:address=a*key+b;其中a和b为常数,当a=1,b=0时,address=key。例如有一个表存放了解放后每年的新生儿数量,关键字是年份,哈希函数为address=key+(-1948)。这样,如果要查2000年的新生儿数,则只需要查第52(address=2000-1948)项数据即可。

  采用直接定址法要求地址集合和关键字集合的大小相同,这样对不同的关键字不会发生冲突,但要求能确定关键字的取值范围,且取值范围不能太大,因此实际应用中能使用直接定址法的情况很少。

  如果哈希表中的关键字都是数字而且是事先知道的,则可以取关键字的若干位数字组成哈希地址,这种方法叫做数字分析法。假设有100个记录,其关键字为6位整数,哈希表长度为200。可以对全体关键字进行分析,如果发现第1、2、3、4位的数字是近似随机的,就可以取其中任意三位作为哈希地址,也可以取2组三位数进行叠加求和后舍去进位作为哈希地址。

  通常在选定哈希函数时不一定能知道关键字的全部情况,无法确定取其中哪几位合适,这时可以取关键字平方后的中间几位为哈希地址。一个数平方后的中间几位数和本数的每一位都相关,这样随机分布的关键字得到的哈希地址也是随机的。具体取的位数由哈希表的长度决定。

  当关键字位数很多且关键字中每一位的数字分布大致均匀时,可以将关键字分割成位数相同的几个部分,最后一部分的位数可以不同,然后取这几部分的叠加和(舍去进位)作为哈希地址,这就叫折叠法。按叠加的方法不同,折叠法可以分为移位叠加和间界叠加两种方法。移位叠加是将分割后的每一部分的最低位对齐,然后相加;间界叠加是从一端向另一端沿分割界相对折叠,然后对齐相加。例如关键字为0442205864,哈希地址为四位数,可将关键字分割为04、4220和5864三部分。移位叠加:address=04+4220+5864=0088,间界叠加:address=04+0224+5864=6092。

  除留余数法是一种最简单,也最常用的哈希函数构造方法。公式为:Address=keyMODp,p小于等于哈希表的长度。

  在使用除留余数法时,对p值的选择很重要。如果选值不当,容易产生同意词。例如,若p含有质因子x,则所有含有x因子的关键字的哈希地址均为x的倍数。一般情况下,p值可以为质数,或者不包含20以下质因数的合数。另外,还可以在对关键字折叠、平方取中等运算之后再使用除留余数法。

  选择一个随机函数,取关键字的随机函数值为其哈希地址,即address=random(key),其中random为随机函数。关键字长度不等时,通常使用随机数法构造哈希函数。

  实际应用时,需要根据不同的情况采用不同的哈希函数。主要考虑以下因素:计算哈希函数所需要的时间、关键字的长度、哈希表的大小、关键字的分布情况、记录的查找频率。

  在哈希表中,常常会出现不同的关键字值对应到同一个存储位置的现象,这就叫做冲突。即关键字key1≠key2,但address1=address2。发生冲突后,必须解决,也即必须寻找下一个可用的地址。哈希表的建立通常分为两个步骤:第一步,取出一个数据元素的关键字key,根据哈希函数计算其在哈希表中的存储地址D,若地址为D的存储空间还没有被占用,则将该数据元素存入,否则发生冲突,执行下一步;第二步,根据规定的冲突处理方法,计算关键字为key的数据元素之下一个存储地址,若该存储地址的存储空间没有被占用,则存入,否则继续执行第二步,直到找出一个空闲的存储空间为止。

  构造哈希函数时必须尽量减少冲突的情况,但是由于实际应用中的复杂多样性,冲突往往不可避免。因此在构造哈希函数时除了要考虑以上的几个因素外,还要尽量做到让关键字的地址均匀的分布在哈希表中,以减少冲突的现象。其次要尽量选择计算简单的哈希函数,以提高地址的计算速度。

  [1]骆剑锋.哈希表与一般查找方法的比较及冲突的解决[J].十堰职业技术学院学报,2007(5).

  [2]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2007.

  [3]李志敏,郑世慧,杨义先.可用于哈希函数的安全迭代结构[J].北京邮电大学学报,2008(12).

地址:半岛体育永久网址【363050.com】 客服热线:363050.com 传真:363050.com QQ:363050.com

Copyright © 2012-2025 半岛体育网站 版权所有 非商用版本