当前位置:首页 > 编程笔记 > 正文
已解决

哈希表(Hash Table)介绍

来自网友在路上 165865提问 提问时间:2023-10-06 07:23:02阅读次数: 65

最佳答案 问答题库658位专家为你答疑解惑

哈希表(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的记录:

待续

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"哈希表(Hash Table)介绍":http://eshow365.cn/6-16184-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!