一般的线性表、树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
哈希表中元素是由哈希函数确定的。将数据元素的关键字K作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。表示为: Addr = H(key)。为此在建立一个哈希表之前需要解决两个主要问题:
一、构造一个合适的哈希函数
常见的哈希函数:
(1)除留余数法 H(key)=key mod B
最简单的哈希函数是将数据除以某一个常数后,取余数来当索引。例如在一个有13个位置的数组中,只使用到7个地址,值分别是12、65、70、99、33、67、48。我们可以把数组内的值除以13,并以其余数来当数组的下标(即作为索引)。
(2)平方取中法
平方取中法和除留余数法相似,就是先计算数据的平方,之后再取中间的某段数字作为索引。在下例中,我们使用平方取中法,并将数据存放在100个地址空间中,其操作步骤如下:
将12、65、70、99、33、67、51平方后得144、4225、4900、9801、1089、4489、2601,