哈希表——概念

在之前讨论的各种数据结构中,数据元素的存放位置是人为给定的,和数据元素本身没有直接关系。这种情况下,存取一个元素只有按地址直接存取和遍历查找两种方法。

顺序存储结构和链式存储结构是两种基本的存储结构,哈希表是一种特殊类型的存储结构,它是一种数据元素及其在内存中的位置之间存在某种函数关系的存储结构,如果构造合适,时间效率非常高。

哈希表主要是构造一个映射函数,该函数以数据元素为自变量,函数值即为数据元素在内存中的存储位置。这样的映射函数称为哈希函数h(x)。

哈希表的构造方法:

设要存储的数据元素个数为n,设置一个长度为m(m>=n)的连续内存单元(即数组),分别以每个数据元素的关键字Ki(0<=i<=n-1)为自变量,以哈希函数h(Ki)值为该数据元素在数组中的下标值存储该数据元素。哈希函数也称哈希地址。

存在的问题:

对于两个数据元素的关键字(主关键字)Ki和Kj,i≠j时,有Ki≠Kj,但h(Ki)=h(Kj)。也就是两个不一样的数据元素,经过哈希函数映射得到了一样的地址,这种现象称作哈希冲突。通常把这种具有不同关键字而具有相同哈希地址的哈希冲突称作同义词冲突。

冲突解决办法:

通过设计哈希冲突函数产生一个新的哈希地址,使不发生冲突。哈希冲突函数通常是一组,因为哈希冲突函数产生的地址还是有可能再次发生冲突,此时,再用下一个冲突函数得到新地址,一直到不冲突为止。

哈希表中查找:

通过关键字K,以建立哈希表时使用的相同哈希函数为映射得到地址,比较改地址中的Ki

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值