首页 要闻娱乐军事情感奇闻搞笑社会体育游戏百科

哈希表 什么是哈希表

2021-12-06 17:34

为什么这么关注?

首先

哈希表、关联数组或字典数据结构如何在表中工作?

什么时候用哈希表存储项目比较合适?

哈希表中的“冲突”如何处理?

5分钟内:

假设我们想要存储一个用户列表,这样我们以后就可以通过他们的名字找到他们。

我们可以简单地将用户存储在一个数组中。当我们将来需要找人的时候,可以通过遍历所有的数据来找到目标用户。

当我们只有3个用户时,我们可以用简单的方法轻松找到他们。然而,如果我们有成千上万的用户,这个过程将会非常缓慢。因此,通过使用哈希表,可以更好地完成查询。

正是因为哈希表是作为键值对存储的,所以搜索数据的速度比在数组中循环要快得多。

创建哈希表

要使用哈希表,您需要为每个用户提供一个唯一的值,即key。该索引将用于存储该项目以备将来检索。

假设每个用户都有一个唯一的名称,并将其用作主键。例如,在实际应用中,ID被用作主键。

Hashtable的工作原理是将键值对存储在Buckets中。哈希表由多个桶组成,每个桶存储所有具有相同值的HashKey,如图所示:

举个简单的例子,我们将使用4个桶。

当用户被添加到哈希表中时,我们使用它的索引来确定它存储在哪个桶中。

当需要再次检索用户时,可以直接跳转到正确的桶找到目标,比依次搜索要快。

存储表

第一个用户“Ada”存储在表中。

首先,确定将它存储在哪个桶中。这意味着我们需要在关键字的位置存储一个字符串,如果我们能在将它代入函数后得到表中包含关键字的记录的地址。这样做的过程就是我们的哈希表,函数就是hash函数。

在这个例子中,我们将创建一个简单的散列函数。为用户名分配一个数字,其中包含每个字母;A=0,B=1,C=2等。最后,将所有的值加在一起,结果就是一个哈希值,也就是哈希值,也就是哈希地址所在的位置。

对于“Ada”,数字是3——因此我们可以将Ada存储在存储区3:

将来需要检索“Ada”时,可以对她的名字执行同样的哈希函数。这将告诉我们在桶3中寻找她,而不需要遍历数组。

然后存储下一个用户“Grace”:

“Grace”的哈希值是29,但是我们没有29个桶!

仅使用其哈希值来存储数组将意味着我们将需要大量的Bucket。相反,我们需要一种将哈希值转换为桶号的方法。

一种常见的实现方法是将哈希值除以桶的数量,然后将剩余部分用作桶号。

除以两个数得到的余数叫做模。“Grace”的哈希值是29,我们有4个桶。29除以4后的余数是1,因此“Grace”存储在编号为1的桶中。

这个操作可以写成29% 4 = 1,或者29 mod 4 = 1。

当我们以这种方式计算桶时,哈希表如下:

冲突

一个好的Hash函数不仅具有优越的性能,还能使存储在底层数组中的值分布更加均匀,减少冲突。

其实输入键映射到一个很小的空上,所以碰撞是不可避免的。可以做的是降低哈希冲突的概率。

然后存储“蒂姆:

现在,我们有两个用户要存储在桶3中:

有两种方法可以解决这个问题:

我们可以使用一种算法来连续选择新的桶,直到找到一个空的桶,然后将哈希地址存储在那里。每个存储桶中只有一个底层阵列的方法称为开放寻址。

或者,不是在每个桶中只存储一个散列地址,而是存储一组散列地址。当我们使用这种方法寻找冲突时,我们只需要将冲突的键值对放在同一个桶中。

以后需要取回数组的时候,还是可以直接跳到正确的桶。但是,这一次存储桶可能包含多个数组。在这种情况下,我们将依次检查桶中的每个数组,以找到我们想要的数组。

这称为公共溢出区,通常用于哈希表实现。

这就是为什么一个好的散列函数对性能至关重要的原因之一。

糟糕的散列函数不能均匀地分配项目,所以它们只能集中在几个可用的桶中。

在最坏的情况下,如果所有内容都在同一个桶中,则可以遍历每个项目来查找所需的内容。这就是为什么我们用哈希表来避免麻烦!

相关阅读
何赛飞骂白百合原话 何赛飞为什么骂白百合
说到何赛飞想必大家都是不太认识的这个人,但是如果把她和白百合放在一起的话大家应该是清楚的,因为这两个人曾经有互骂过,而且都是互相的指责对方这样的,那么有的网友就要好奇了,这个何赛飞为什么会骂白百合呢?这背后到底有什么样的原因呢?还有就是这个何赛飞她骂白百合的原话是什么样的,到底有多么的难听呢?下面就跟随小编一起来看看详细的介绍,所以有感兴趣的网友一定不要错过欢迎大家一起品鉴八卦了!何赛飞骂白百合原17在看 07-07
黄志玮关颖 关颖黄志玮分手原因曝光 揭秘黄志玮和关颖情史
关颖和黄志玮的感情一直是大众关注的焦点。2007年8月两人一度传出分手,但随即否认,只表示哪对情侣不吵架,之后依旧共同现身各类场合,直到近日传出分手。下面是关颖黄志玮分手原因揭晓,黄志玮的经纪人詹元手机无人接听,没回应分手一事;关颖助理则仍坚称两人绝对没分手。关颖黄志玮分手原因黄志玮和关颖的恋情始于2004年,两人因拍摄罗志祥的《音乐爱情故事》相识进而相恋。关颖黄志玮分手原因曝光,黄志玮也是娱乐圈30在看 07-07
陈能宽逝世 陈能宽病逝 揭陈能宽去世时间及病逝原因是什么
据央视报道,中国核武器事业的奠基人之一,“两弹一星”功勋奖章获得者,中国科学院院士,原中国工程物理研究院副院长,核工业部科技委副主任陈能宽同志于2016年5月27日12时在北京逝世,享年94岁。观海内参记者统计发现,截止目前,23位两弹一星功臣中已有17人离我们而去。陈能宽(1923.4.28--2016.5.27 ) 著名金属物理学家。湖南省慈利县人,男,中共党员,中国科学院院士。陈能宽历任第二13在看 07-07
电视娱乐节目暂停播放事件原因及什么时候复播
每次到周末,电视剧旁总会充满了愉快的笑声,因为各大的综艺节目都会纷纷来袭,大家都会选择自己喜欢的节目,看得乐不思蜀。不过,6月6日,打开电视发现很多娱乐节目都没有播出,才知道原来是遭暂停播放了。6月5日晚,江苏卫视通过官方微博宣布为沉痛悼念“东方之星”号客轮翻沉事件中的遇难者,本周暂停播出《非诚勿扰》、《我们相爱吧》、《昆仑决》、《为她而战》四档节目。记者第一时间连线了江苏23在看 07-07
故宫中董鄂妃的画像 清朝董鄂妃的简介 董鄂妃的画像欣赏
董鄂妃是清朝时期有名的妃子,她的丈夫是顺治皇帝,虽然古代的女子嫁给皇帝后很少有得到真爱的人,可是董鄂妃却得到了顺治帝全部的爱,董鄂妃也因此闻名于世,不过除了她和顺治帝的爱情,她的生平也很有名,那么关于董鄂妃有怎样的生平,她的简介是什么呢?她有哪些画像值得后人欣赏呢?故宫中董鄂妃的画像 清朝董鄂妃的简介 董鄂妃的画像欣赏清朝董鄂妃的简介董鄂妃是清朝很有名的一位妃子,事实上她的称呼应该是孝献皇后,但因30在看 07-07

热文排行