hash查找与搜素

哈希查找是通过计算 数据元素存储地址进行查找的一种方 法。
哈希查找的操作步骤:
⑴用给定的哈希函数构造 哈希表
⑵根据选择的冲突处理方法解决地址冲突;
⑶在 哈希表的基础上执行哈希查找。
建立 哈希表操作步骤:
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,则查找成功,否则查找失败。
哈希查找的本质是先将数据映射成它的 哈希值。哈希查找的核心是构造一个哈希函数,它将原来直观、整洁的数据映射为看上去似乎是随机的一些整数。
哈希查找的产生有这样一种背景——有些数据本身是无法排序的(如图像),有些数据是很难比较的(如图像)。如果数据本身是无法排序的,就不能对它们进行比较查找。如果数据是很难比较的,即使采用折半查找,要比较的次数也是非常多的。因此,哈希查找并不查找数据本身,而是先将数据映射为一个整数(它的 哈希值),并将 哈希值相同的数据存放在同一个位置一即以哈希值为索引构造一个 数组
在哈希查找的过程中,只需先将要查找的数据映射为它的 哈希值,然后查找具有这个哈希值的数据,这就大大减少了查找次数。如果构造哈希函数的参数经过精心设计,内存空间也足以存放 哈希表,查找一个 数据元素所需的比较次数基本上就接近于一次。
影响哈希查找效率的一个重要因素是哈希函数本身。当两个不同的 数据元素哈希值相同时,就会发生冲突。为减少发生冲突的可能性,哈希函数应该将数据尽可能分散地映射到 哈希表的每一个表项中。解决冲突的方法有以下两种:
如果两个 数据元素的哈希值相同,则在 哈希表中为后插入的 数据元素另外选择一个表项。
当程序查找 哈希表时,如果没有在第一个对应的哈希表项中找到符合查找要求的 数据元素,程序就会继续往后查找,直到找到一个符合查找要求的数据元素,或者遇到一个空的表项。
(2) 链地址法
哈希值相同的数据元素存放在一个 链表中,在查找 哈希表的过程中,当查找到这个链表时,必须采用线性查找方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值