哈希表(Hash Table)介绍

哈希表(Hash Table)介绍

哈希表(Hash Table):也叫做散列表。是根据键值(Key Value、关键码值)直接进行访问的数据结构。

哈希表通过“键(key)”和“映射函数(Hash Function)”计算出对应的“值(value)”,把关键值映射到表中一个位置(哈希值)来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(散列函数),存放记录的数组叫做哈希表(散列表)。

哈希表的主要操作包括:

插入(Insert):将键值对插入哈希表中。如果键已经存在,则更新其对应的值。

查询(Search):根据键查找并返回对应的值。

更新(Update):根据键更新对应的值。

删除(Delete):根据键删除对应的键值对。

哈希表在很多编程语言和库中都有实现,例如 JavaScript 中的 Map 和 Set 对象,以及 Python 中的 dict 数据结构。哈希表的应用非常广泛,例如在数据库、缓存、消息队列等领域都有重要的作用。

哈希表特点:

哈希表(Hash Table),是一个数据结构。

哈希表本质上就是一个数组,只不过数组存放的是单一的数据,而哈希表中存放的是键值对(key - value pair)。

key 通过哈希函数(hash function)得到数组的索引,进而存取索引位置的值。

不同的 key 通过哈希函数可能得到相同的索引值,此时,产生了哈希碰撞。

在哈希表中,键的存储位置是通过散列函数映射得到的。不同的关键字可能得到相同的散列地址,这种情况称为冲突(Collision)。

解决哈希冲突的常见方法是使用链地址法(Chaining)也叫开散列、开放地址法(Open addressing)也叫闭散列。

链地址法:将所有关键字为同义字的记录存储在一个单链表中,我们称这种单链表为同义词子表,散列表中存储同义词子表的头指针。如关键字集合为{19,14,23,01,68,20,84,27,55,11,10,79},按哈希函数H(key) = key mod 13;

链地址法解决了冲突,提供了永远都能找到地址的保证。但是,也带来了查找时需要遍历单链表的性能损耗。

开放地址法:一旦发生了冲突就去寻找下一个空的哈希地址,只要哈希表足够大,空的散列地址总能找到,并将记录存入。
   公式:Hi=(H(*key) + Di) mod m (i = 1,2,3,….,k k<=m-1)
   其中:H(key)为哈希函数;m为哈希表表长;Di为增量序列,有以下3中取法:
     ①Di = 1,2,3,…,m-1, 称为线性探测再散列;
     ②Di = 1²,-1²,2²,-2²,。。。,±k²,(k<= m/2)称为二次探测再散列
     ③Di = 伪随机数序列,称为伪随机数探测再散列。
     例如:在长度为12的哈希表中插入关键字为38的记录:

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值