数据结构——哈希表

哈希表是一种数据结构,通过哈希函数实现关键字与存储位置的映射,以快速查找数据。然而,哈希冲突是常见问题,文章介绍了哈希冲突的定义,并探讨了常见的哈希函数构造方法,如直接定值法、数字分析法、平方取中法、折叠法、除留余数法和随机数法。此外,还讨论了解决哈希冲突的四种方法:开放定址法、再哈希法、链地址法和公共溢出区。
摘要由CSDN通过智能技术生成

1、基础知识

1.1 引子

在实现编程中,常常面临着两个问题:存储和查询。存储和查询的效率往往决定了整个程序的效率。而我们常见存储数据的数据结构比如线性表,树等。数据在结构中的位置都是不明确的,当我们在这些数据结构中要查询一个数据,都避免不了的执行查询算法,去遍历数据结构,拿关键字和结构中的数据一一比较,从而得到想要的数据。整个查询的效率就决定了程序的执行效率,查询效率又依赖查找过程中所进行的比较次数。所以我们就希望能不能不通过比较就能获得我们想要的结果呢?

答案是有的,不经过任何比较,一次存储便能取得所查记录。但这就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f。使得每个关键字和结构中一个唯一的存储位置相对应。这个关系就是我们所说的哈希函数f(x)。在这个思想上建立起来的表就称为哈希表。

1.2 什么是哈希表

哈希表(Hash Table)又称为散列表。哈希表是一种可以根据以key-value键值对形式存储数据的数据结构,可以通过关键字Key直接找到数据Value的存储位置,而不需要经过任何的遍历和比较。

1.3 哈希表中的四个概念

  • 关键字(Key)
    (哈希表是通过一个信息来查找另一个信息,将这两个信息在哈希表从形成映射关系,而关键字则是我们要提供的信息)
  • 值(Value)
    (值是我们想要获取到的信息)
  • 哈希函数
    (哈希函数是用来构成哈希表的工具,也是哈希表的核心思想,是关键字和对应数据的存储位置的一个映射关系,通过把关键字代入哈希函数中进行计算,可以得到关键字所对应的数据在哈希表中的存储位置,)
  • 哈希地址
    (哈希地址记录的是我们所需要的数据在哈希表中的存储位置,哈希地址只是表示查找表中的存储位置,不是实际的物理存储位置)

关键字、值、哈希函数、哈希地址、哈希表之间的关系
哈希表是通过哈希函数来构建的,我们把哈希函数想象成数学中的函数f()。而函数中的X就是关键字Key,既f(x)。然后将关键字带入一个公式中,如f(x) = x * 2 + 3 。然后经过运算就可以求出一个值,这个值表示要查询的数据(Value)在哈希表中的存储位置,也就是哈希地址。而记录这整个Key-Value信息的表就是哈希表。

我们现在把一个抽象的哈希表具体表现成下面的形式,可以说下面就是一个哈希表。我们把它想象成一本电话簿,该电话簿用拼音首字母来区分数据,数据记录了具体的人名和其电话号码。换成哈希表的概念,就是说ABCD是哈希地址,用于记录值所存储的位置。人名为查询关键字(Key)。电话号码是我们需要获得的数据(Value)。

在这里插入图片描述
为了简化流程且易懂,我们这里假设了哈希地址就是关键字的拼音首字母大写,那么哈希函数就是f(艾力)= A&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值