哈希查找的操作步骤:
⑴用给定的哈希函数构造
哈希表;
⑵根据选择的冲突处理方法解决地址冲突;
⑶在
哈希表的基础上执行哈希查找。
建立
哈希表操作步骤:
step1 取
数据元素的关键字key,计算其哈希
函数值。若该地址对应的存储
空间还没有被占用,则将该元素存入;
否则执行step2解决冲突。
step2 根据选择的冲突处理方法,计算关键字
key的下一个存储地址。若下一个存储地
址仍被占用,则继续执行step2,直到找
到能用的存储地址为止。
哈希查找步骤为:
设
哈希表为HST[0~M-1],哈希函数取H(key),解决冲突的方法为R(x);
Step1 对给定k值,计算哈希地址 Di=H(k);若HST为空,则查找失败;
若HST=k,则查找成功;否则,执行step2(处理冲突)。
Step2 重复计算处理冲突的下一个存储地址 Dk=R(Dk-1),直到HST[Dk]为
空,或HST[Dk]=k为止。若HST[Dk]=K,则查找成功,否则查找失败。
哈希查找的本质是先将数据映射成它的
哈希值。哈希查找的核心是构造一个哈希函数,它将原来直观、整洁的数据映射为看上去似乎是随机的一些整数。
哈希查找的产生有这样一种背景——有些数据本身是无法排序的(如图像),有些数据是很难比较的(如图像)。如果数据本身是无法排序的,就不能对它们进行比较查找。如果数据是很难比较的,即使采用折半查找,要比较的次数也是非常多的。因此,哈希查找并不查找数据本身,而是先将数据映射为一个整数(它的
哈希值),并将
哈希值相同的数据存放在同一个位置一即以哈希值为索引构造一个
数组。
在哈希查找的过程中,只需先将要查找的数据映射为它的
哈希值,然后查找具有这个哈希值的数据,这就大大减少了查找次数。如果构造哈希函数的参数经过精心设计,内存空间也足以存放
哈希表,查找一个
数据元素所需的比较次数基本上就接近于一次。
影响哈希查找效率的一个重要因素是哈希函数本身。当两个不同的
数据元素的
哈希值相同时,就会发生冲突。为减少发生冲突的可能性,哈希函数应该将数据尽可能分散地映射到
哈希表的每一个表项中。解决冲突的方法有以下两种:
(1)
开放地址法
(2) 链地址法