数据结构与算法三【哈希表】

哈希表是一种数据结构,通过哈希函数将关键码映射到数组索引,实现O(1)的时间复杂度查找。当出现哈希碰撞,即不同关键码映射到同一索引时,可采用拉链法或线性探测法解决。文章讨论了哈希表在存储和检索中的应用,特别是处理学生姓名的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1哈希表

在这里插入图片描述
一个数组就是一个哈希表,其中数组的下标是哈希表的索引,数组内的值是哈希表的元素。
这样,我们通过索引可以直接找到对应的元素时间复杂度就是O(1)
有了哈希表,我们就可以快速检索一个元素是否存在于集合中。(注:要通过集合首先构建哈希表)

哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)

哈希表是根据关键码的值而直接进行访问的数据结构。

2哈希函数

哈希函数,把学生的姓名通过哈希函数直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。
哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了

3哈希碰撞

学生A和学生B都映射到了索引下标 1 的位置,这一现象叫做哈希碰撞。
一般哈希碰撞有两种解决方法, 拉链法和线性探测法。

拉链法

在这里插入图片描述

线性探测法

使用线性探测法一定要保证tableSize大于dataSize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五阿哥爱跳舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值